Няшная / Говнокод #28556 Ссылка на оригинал

0

  1. 1
  2. 2
  3. 3
  4. 4
  5. 5
  6. 6
  7. 7
  8. 8
  9. 9
  10. 10
  11. 11
  12. 12
switch(argCount)
	{
		case 0: sprintf(dst, fmt); break;
		case 1: sprintf(dst, fmt, args[0]); break;
		case 2: sprintf(dst, fmt, args[0], args[1]); break;
		case 3: sprintf(dst, fmt, args[0], args[1], args[2]); break;
		case 4: sprintf(dst, fmt, args[0], args[1], args[2], args[3]); break;
		case 5: sprintf(dst, fmt, args[0], args[1], args[2], args[3], args[4]); break;
		case 6: sprintf(dst, fmt, args[0], args[1], args[2], args[3], args[4], args[5]); break;
		case 7: sprintf(dst, fmt, args[0], args[1], args[2], args[3], args[4], args[5], args[6]); break;
		case 8: sprintf(dst, fmt, args[0], args[1], args[2], args[3], args[4], args[5], args[6], args[7]); break;
		...

GAMER GAMER, (Updated )

Комментарии (9, +9)

Няшная / Говнокод #28553 Ссылка на оригинал

0

  1. 1
  2. 2
  3. 3
  4. 4
  5. 5
  6. 6
  7. 7
  8. 8
  9. 9
  10. 10
  11. 11
  12. 12
  13. 13
  14. 14
  15. 15
  16. 16
  17. 17
  18. 18
  19. 19
  20. 20
  21. 21
  22. 22
  23. 23
  24. 24
  25. 25
  26. 26
  27. 27
  28. 28
  29. 29
  30. 30
  31. 31
  32. 32
  33. 33
  34. 34
  35. 35
  36. 36
  37. 37
  38. 38
  39. 39
  40. 40
  41. 41
  42. 42
  43. 43
  44. 44
  45. 45
if(((mFlags&0x80)==0)&&(mFlags&0x40)==0){if(samplesArr[_k]>dataAmplitudeHi)	//‚믮«­ï¥¬ ¨§¬¥à¥­¨¥ ¨¬¯ã«ìᮢ-¤¥â¥ªâ®à®¢. ’ ª¦¥ ¬¥à塞 ¯ ã§ã{
			while(1){if(samplesArr[_k]>=dataAmplitudeHi){++_k;++_j;}else{break;}}
			dMin=dMax=wideTable[pulseCnt]=_j;
			++pulseCnt;
			dataStack(1,_k);
			_i=_j;_j=0;pauseTrig=1;}
		while(1)
		{if(samplesArr[_k]<=invertSample){++_k;++_j;}else{break;}}
		pMin=pMax=pauseTable[pauseCnt]=_j;
		++pauseCnt;_i=_j;_j=0;
		if(pauseTrig==0){
			while(1){
				if(samplesArr[_k]>=dataAmplitudeHi){
					++_k;
					++_j;}else{break;}}
			dMin=dMax=wideTable[pulseCnt]=_j;
			++pulseCnt;_i=_j;_j=0;}
		else{_k=dataStack(0,0);}
			pauseTrig=0;
			for(uint32_t i=_k;i<bufferLength;++i){
				//printf("iteration %d 0x%02X\n",i,samplesArr[i]);
				if((samplesArr[i]>dataAmplitudeHi)&&(_j>_p)&&(pauseTrig==0)&&(signalTrig==1)){
					//printf("trig pulse up %d",i);if(_j<pMin){pMin=_j;}else if(_j>pMax){pMax=_j;}pauseTrig=1;signalTrig=0;pauseTable[pauseCnt]=_j;++pauseCnt;trigPause=0;_p=_j;_j=0;//printf("\n");}
				else if((samplesArr[i]>dataAmplitudeHi)&&(_j<_p)&&(pauseTrig==0)&&(signalTrig==1))
				{//printf("trig pulse down %d",i);if(_j<pMin){pMin=_j;}else if(_j>pMax){pMax=_j;}pauseTrig=1;signalTrig=0;pauseTable[pauseCnt]=_j;++pauseCnt;trigPause=0;_p=_j;_j=0;//printf("\n");}
				else if((samplesArr[i]>dataAmplitudeHi)&&(_j==_p)&&(pauseTrig==0)&&(signalTrig==1))
				{//printf("trig pulse non-change %d",i);if(_j<pMin){pMin=_j;}else if(_j>pMax){pMax=_j;}pauseTrig=1;signalTrig=0;pauseTable[pauseCnt]=_j;++pauseCnt;trigPause=0;_p=_j;_j=0;//printf("\n");}
				if((samplesArr[i]<invertSample)&&(_j>dMin-(dMin/4))&&(_j>_i)&&(pauseTrig==1)&&(signalTrig==0))
				{//printf("trig pause up %d",i);if(_j<dMin){dMin=_j;}else if(_j>dMax){dMax=_j;}pauseTrig=0;signalTrig=1;wideTable[pulseCnt]=_j;++pulseCnt;_i=_j;_j=0;//printf("\n");}
				else if((samplesArr[i]<invertSample)&&(_j>dMin-(dMin/4))&&(_j<_i)&&(pauseTrig==1)&&(signalTrig==0))
				{//printf("trig pause down %d",i);if(_j<dMin){dMin=_j;}else if(_j>dMax){dMax=_j;}pauseTrig=0;signalTrig=1;wideTable[pulseCnt]=_j;++pulseCnt;_i=_j;_j=0;//printf("\n");}
				else if((samplesArr[i]<invertSample)&&(_j>=dMin-(dMin/4))&&(_j==_i)&&(pauseTrig==1)&&(signalTrig==0))
				{//printf("trig pause non-change %d",i);if(samplesArr[i]<invertSample)pauseTrig=0;signalTrig=1;wideTable[pulseCnt]=_j;++pulseCnt;_i=_j;_j=0;//printf("\n");}
				if((samplesArr[i]>dataAmplitudeHi)&&(_j>dMax)&&(pauseTrig==1)&&(signalTrig==0)){trigPause++;}
				else if(trigPause>2){_k=i-_j-skipsBeforeTrig;_ovct=_j;mFlags=mFlags|0xC0;break;}
				if((samplesArr[i]>dataAmplitudeHi)&&(trigKey==0x00)){trigKey=0xFF;}
				if((samplesArr[i]>dataAmplitudeHi)&&(trigKey==0xFF)){trigKey=0x00;}
				else if((pauseTrig==1)&&(trigPause>skipsBeforeTrig)){trigPause=0;_k=i;_ovct=_i-_p;mFlags=mFlags|0xC0;break;}
				else if(pauseTrig==1){trigPause++;}
				if((samplesArr[i]>dataAmplitudeHi)&&(pauseTrig==1)&&(signalTrig==0)){++_j;}
				if((samplesArr[i]<invertSample)&&(pauseTrig==0)&&(signalTrig==1)){++_j;}}_k=_k-_ovct;
		for(uint8_t i=0;i<pulseCnt;i++){divl=divl+wideTable[i];}
		divl=divl/pulseCnt;
		compTim.tSPavg=round(divl);}
	memset(wideTable,0x00,sizeof(wideTable));

Шизофрения

siclown siclown, (Updated )

Комментарии (8, +8)

Няшная / Говнокод #28466 Ссылка на оригинал

0

  1. 1
  2. 2
  3. 3
  4. 4
  5. 5
  6. 6
  7. 7
  8. 8
  9. 9
  10. 10
  11. 11
  12. 12
  13. 13
  14. 14
  15. 15
  16. 16
  17. 17
  18. 18
  19. 19
  20. 20
  21. 21
  22. 22
  23. 23
  24. 24
  25. 25
  26. 26
  27. 27
  28. 28
  29. 29
  30. 30
  31. 31
  32. 32
  33. 33
  34. 34
  35. 35
  36. 36
  37. 37
  38. 38
  39. 39
  40. 40
  41. 41
  42. 42
  43. 43
  44. 44
  45. 45
  46. 46
  47. 47
  48. 48
  49. 49
  50. 50
  51. 51
  52. 52
  53. 53
  54. 54
  55. 55
// https://github.com/flipperdevices/flipperzero-firmware/blob/2a6a3a1bf7ba1ecb42b8cbfc1b1856a54f2878b7/applications/plugins/music_player/music_player.c#L74

static bool is_white_note(uint8_t semitone, uint8_t id) {
    switch(semitone) {
    case 0:
        if(id == 0) return true;
        break;
    case 2:
        if(id == 1) return true;
        break;
    case 4:
        if(id == 2) return true;
        break;
    case 5:
        if(id == 3) return true;
        break;
    case 7:
        if(id == 4) return true;
        break;
    case 9:
        if(id == 5) return true;
        break;
    case 11:
        if(id == 6) return true;
        break;
    default:
        break;
    }

    return false;
}

static bool is_black_note(uint8_t semitone, uint8_t id) {
    switch(semitone) {
    case 1:
        if(id == 0) return true;
        break;
    case 3:
        if(id == 1) return true;
        break;
    case 6:
        if(id == 3) return true;
        break;
    case 8:
        if(id == 4) return true;
        break;
    case 10:
        if(id == 5) return true;
        break;
    default:
        break;
    }

    return false;
}

Хуйня какая-то. То ли дело "паттерн матчинг".

j123123 j123123, (Updated )

Комментарии (38, +38)

Няшная / Говнокод #28320 Ссылка на оригинал

0

  1. 1
  2. 2
  3. 3
  4. 4
  5. 5
  6. 6
  7. 7
  8. 8
  9. 9
  10. 10
  11. 11
  12. 12
  13. 13
  14. 14
  15. 15
  16. 16
  17. 17
  18. 18
  19. 19
  20. 20
  21. 21
  22. 22
  23. 23
  24. 24
  25. 25
  26. 26
  27. 27
// Heap memory allocate function (must not be used!)
caddr_t _sbrk(int incr) {
    <...>
    void some_bastard_called_sbrk();
    some_bastard_called_sbrk(); // Produce linker error in case it is used
}

_ATTRIBUTE ((__format__ (__printf__, 1, 2)))
int	printf (const char *__restrict format, ...)
{
    <маленький трехколесный велосипед>
}

int	putchar(int c) 
{
    <...> 
}
int	puts(const char *s) 
{
    <...> 
}

_ATTRIBUTE ((__format__ (__printf__, 2, 3)))
int	sprintf (char *__restrict s, const char *__restrict format, ...)
{
    <...> 
}

STM32. Я просто хочу использовать printf для вывода в последовательный порт и не течь. Ведь для этого нужно только реализовать int _write(int file, char *data, int len) и всё. Ой, а почему иногда программа падает где-то в кишках рантайма?

Может, стек переполняется? Да нет, проверил, значения в норме...

Просто стандартная библиотека от ST - это не курсовая ардуинщика, тут все системно, хендлы потоков, дескрипторы устройств и управляющие структуры. При первом обращении printf (и sprintf тоже!) выделяет себе в куче около 400 байт. Замечательное решение, помогающее сэкономить память, если мы не используем стандартный вывод! А куча тут - это просто последовательно заполняемая область памяти, размеры которой задаются в linker script (я вообще 0 указал, я ведь не использую malloc). Проверять выход за пределы кучи мы, конечно, не будем - зачем, когда рядом такая замечательная, никому не нужная область стека.
Да, и если забыть отключить буферизацию setvbuf(stdin/stdout/stderr, NULL, _IONBF, 0); , то он выделит не 400 байт, а килобайт (на контроллере с 8K RAM).

В общем, ах, оставьте меня, сам все напишу.
Только надо еще putchar и puts реализовать, а то компилятор любит printf'ы оптимизировать. И не забыть, что puts добавляет перевод строки. Уф, вроде все.

Steve_Brown Steve_Brown, (Updated )

Комментарии (21, +21)