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

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
  56. 56
  57. 57
  58. 58
  59. 59
  60. 60
  61. 61
  62. 62
  63. 63
  64. 64
  65. 65
  66. 66
  67. 67
  68. 68
  69. 69
// https://jaycarlson.net/2019/09/06/whats-up-with-these-3-cent-microcontrollers/
// The C code I used for those original MCU tests looked something like this:

volatile int16_t in[25];
volatile int16_t out[25];
const int16_t a0 = 16384;
const int16_t a1 = -32768;
const int16_t a2 = 16384;
const int16_t b1 = -25576;
const int16_t b2 = 10508;
int16_t z1, z2;
int16_t outTemp;
int16_t inTemp;
void main()
{
  while(1) {
    _pa = 2;
    for(i=0;i<25;i++)
    {
      inTemp = in[i];
      outTemp = inTemp * a0 + z1;
      z1 = inTemp * a1 + z2 - b1 * outTemp;
      z2 = inTemp * a2 - b2 * outTemp;
      out[i] = outTemp;
    }
    _pa = 0;
  }
}

// The Padauk code looks like this:

WORD in[11];
WORD out[11];
WORD z1, z2;
WORD pOut, pIn; // these are pointers, but aren't typed as such
int i;
void  FPPA0 (void)
{
  .ADJUST_IC  SYSCLK=IHRC/2    //  SYSCLK=IHRC/2
  PAC.6 = 1; // make PA6 an output
  while(1) {
    PA.6 = 1;
    pOut = out;
    pIn = in;
    i = 0;
    do {
      *pOut = (*pIn << 14) + z1;
      z1 = -(*pIn << 15) + z2
        + (*pOut << 14)
        + (*pOut << 13)
        + (*pOut << 9)
        + (*pOut << 8)
        + (*pOut << 7)
        + (*pOut << 6)
        + (*pOut << 5)
        + (*pOut << 3);
      z2 = (*pIn << 14)
        - (*pOut << 13)
        - (*pOut << 11)
        - (*pOut << 8)
        - (*pOut << 3)
        - (*pOut << 2);
      i++;
      pOut++;
      pIn++;
    } while(i < 11);
    PA.6 = 0;
  }
}

> As for the filter function itself, you’ll see that all the multiplies have been replaced with shift-adds. The Padauk part does not recognize the * operator for multiplication; trying to use it to multiply two variables together results in a syntax error. No, I’m not joking.

Запостил: j123123 j123123, (Updated )

Комментарии (58) RSS

  • I discovered this while working on my SPI-to-WS2812 converter. When I first need a for() loop, I wrote:

    int i = 7; 
    while(i >= 0) {
       ...
       i--;
    }


    This works, but it’s not nearly as cycle-efficient as using one of Padauk’s handy macros:

    .FOR i, <7,6,5,4,3,2,1,0>
      ...
    .ENDM


    When the compiler encounters these macros, it does a source-level replacement of “i” in the content of the block with each value — copying-and-pasting the entire block.


    Царский анролл
    Ответить
    • You’ll get a compilation error if you try to write a line of code like this:

      int b = *(ptr + i);


      Why? Because your MCU does not have the ability to do indirect addressing with offsets (constant or otherwise). The compiler wants you to tell it precisely what you want to do. Maybe you want to do this:

      ptr += i; // wipes out the old value of ptr, but it's fast
      int b = *ptr;


      Or maybe this:

      int newPtr = ptr + i; // uses a new memory allocation and is slower
      int b = *newPtr;


      Both of these have trade-offs.

      Именно поэтому я за ассемблер
      Ответить
      • лолшто? Если стандарт это разрешает, то почему меня ебет что там и где как это реализует?
        Ответить
        • Тебе это может быть важно на очень дохлых микроконтроллерах, где мало памяти и нет косвенной адресации. Это нахер не надо на более человеческих процессорах/контроллерах, где не надо каждый байтик и такт процессора дрочить и есть косвенная адресация
          Ответить
          • Ты серьезно сейчас? Как это относится к ЯВУ вообще? Задача копулятора для какой-то там платформы состоит в том, чтобы высрать трехадресный кот с прямой адресацией или что там поддерживается на этой платформе, а не отвергать валидное выражение. Поехавшие эмбеддеры превращают Цє в какойто сраный приколоченный гвоздями к платформе трубо пассаль...

            Если так беспокоит предварительная оптимизация, то можно хинт высрать по этому поводу.
            Ответить
            • > Поехавшие эмбеддеры превращают Цє в какойто сраный приколоченный гвоздями к платформе трубо пассаль...
              Та херня, которая описывается в той статье https://jaycarlson.net/2019/09/06/whats-up-with-these-3-cent-microcontrollers/ это вообще не Си, а какая-то ебанутай поебень, похожая чем-то на Си. Там например даже цикла for нет
              Ответить
              • Нахуй ты читаешь высеры уёбка, и тем более отвечаешь ему?
                Ответить
                • Читаешь-нечитаешь, игнорируй-неигнорируй, хрен ли ты вообще указываешь мне? Захочу - буду хоть со стертором пиздеть. Я совершенно не слежу за тем, кто тут уебок, а кто нет
                  Ответить
                  • Это и есть стертор. Чем больше ты с ним пиздишь -- тем больше он распаляется, и засирает наш общий форум своей педогомохуитой и ламерскими бреднями
                    Ответить
                  • Я не указываю, я спрашиваю нахуя ты это делаешь.
                    Ответить
                    • Мне лень тратить время на выяснение того, достоин ли кто-то того, чтоб я ему что-то отвечал. Да и написал он по теме, а не какой-то бред типа "рашка говняшка русичи пидорашки".
                      Ответить
                      • 
                                    :8D8ZO 
                                  O8      D 
                                88      DD8, 
                               O      788:7 
                             O8       $D8+7? 
                            O       D   D?ZDO 
                           OZ      D     ID88$ 
                           8       $      OD88O 
                           Z      7        ZD8,8 
                            O    $          ID88D 
                                             ZD=8O 
                                              $DD8? 
                                               DN88Z 
                                                ZD88O 
                                                 7?888 
                                                  IDD:8 
                                                   OD88O 
                                                    ZDDZ8 
                                                     ZD88+ 
                                                      DD+88         77OOO? 
                                                       $D88Z     :777O,=:,I 
                                                        $+DOO  7$$77$$ +~+ ? 
                                                         OD?:77$7?$$$$7 7$I~? 
                                                          Z7$7I77$$$$$$$,7~?,+ 
                                                        $77I$7$$$$$$$7$$$:=I7~I 
                                                     ~I77?77Z$Z$ZZZZZ$$$$$,?II~? 
                                                   77777DO$$$$Z$ZZZ$$$$$$$$=?$7Z 
                                                  77 $$$$$$Z$Z$ZZZZZ$$$$$$$7~,7 
                                                 OZ$$$$$Z$$$$ZZ$$$$$$$$$$$7$I7~
                                                 788$$$$$$$$$$$$$$$$$$$$77$$7 
                                                 ?$O7Z$7Z$$$$$$$$$$$$$7?$7I
                                                  :8O8$$$7$777$$$$77$$$$=
                                                   ?887777777$7$777$$7
                                                    ~DIZ77$$777$$$$7 
                                                  ,,::8DOI777$Z$=~~~~::, 
                                                 ,:=+?I787I7$$O$77I?+=:, 
                                                 ,,:~==+++++++++==~::, 
                                                         ,
                        Ответить
                      • У пидорашек кругом враги.
                        В СССР власть считала, что антисоветчиком может быть либо шпион либо безумец. Поскольку не может же нормальный советский человек быть против советской власти и не понимать, что учение Маркса всесильно, потому что оно верно.

                        В путинской России нет никакой идеологии как внятного образа будущего, но есть идея, что "Россия – это Путин, а Путин – это Россия". Поэтому в 20-му году своего существования путинизм пришел к старой советской формуле: кто против Путина, тот либо на госдеп работает, либо с ума сошел.


                        Кстати, есть слух, что пригожин сдох
                        https://censoru.net/uploads/posts/2019-10/1570996995_44bed50be1a79a12e5a98570a56ad c14.jpg
                        Ответить
              • дружище, игнорируй пожалуйста ёбаного рака
                не отвечай ему
                Ответить
              • Там говно начинается с самого начала, когда они прислали на халяву, но объебали со стоимостью доставки, как китайцы на стероидах.

                > I noticed that Padauk’s “Mini C” compiler didn’t support function arguments, return values, for() loops, and many other common C expressions, I became really nervous
                Хах, причем еще и проприетарное.

                В общем, finicky to implement
                Ответить
  • джейраздватри, ты слыхал про мудули в С++20?
    Ответить
  • Напоминает язык программирования «Sphinx C--». Правда, у того цикл for был.
    Ответить
    • Циклы и switch можно вообще все убрать, оставив только метки, goto и if. При желании все эти циклы и switch реализовать через какое-нибудь макроговно можно
      Ответить
      • Царь просил передать, что кроме массива и гоуту вообще больше ничего не надо.

        Кстати, в масме вроде были и ифы и циклы и все это через макросы
        Ответить
  • Ударим киянкой (молоток для укладки плитки) по головам спамеров и нарушителей, вроде белой шпаны - guest8
    Ответить

Добавить комментарий

Где здесь C++, guest?!

    А не использовать ли нам bbcode?


    8