Преобразование BIN -->BCD

Когда-то в начале темы я спрашивал у @dedivan

теперь, похоже, пришла пора спросить “видел ли он загрузчик?”.

Видимо, следующим вопросом будет “о каких директивах ассемблера слышал” :slight_smile:

видимо, если не совсем …иЛ, будет так выкручиваться

void pre_main (void) {
  // Allow convenient way of calling do_spm function - jump table,
  //   so entry to this function will always be here, independent
  //    of compilation, features, etc
  __asm__ __volatile__ (
    "  rjmp 1f\n"
#ifndef APP_NOSPM
    "  rjmp do_nvmctrl\n"
#else
    "  ret\n"   // if do_spm isn't include, return without doing anything
#endif
    "1:\n"
    );
}

это С или ASM ?

С тут обёртка выходит )))

Я тут про вачдог распинался, теперь оказывается все МК могут…если использовать не сторожевой🤣
Погоди, не уходи, дождись пятницы)
Тем и прекрасен Си, что он универсален. Можно смело писать код, неотличимый по скорости и размеру от Асма. И вероятность ошибок кратно меньше.
Напиши на Асме какой-нибудь простецкий трёхфазный драйвер bldc мотора. Да чтоб можно было легко менять различные коэффициенты, углы, частоты.

да он на перемножении 2-х float уже сдуецца, пойдёт плакать и звать маму.

Да, ты чё! Это ж крутой асм’щик! Он седлает так, что памяти у МК ещё и прибавится, т.к. размер программы умножения будет отрицательным. Вот помяни моё слово! Крутые асм’щики - они такие!

Ну и что это обозначает?
По моему- это значит, что не всё можно запрограммировать на Си. Есть моменты, где нужно переходить на асм. Хочешь, не хочешь… Ну не предусмотрели разработчики Си разницу между коротким и длинным переходом, им все равно, а контроллеру нет.
И чего тут зубоскалить? Вообще работа с регистрами не Сишный конек. Он предназначен работать с ячейками памяти.

как говорит Дракула, это надо отбивать в граните.

dedivan про загрузчик, что нибудь скажешь/добавишь?

А это что- не про загрузчик?
Загрузчик работает в маленькой тесной ограниченной части памяти. Там не все можно делать через функции или процедуры Си, часто это простой конечный автомат .

точно, и факт, что через него таракан не пролезет.

не… про загрузчик вот это

есть где посмотреть на него?

А можно с этого места поподробнее?

  1. что такое “простой конечный автомат”?
  2. почему его нельзя делать “через функции или процедуры Си”?

И, да, я присоединяюсь к просьбе @xDriver, покажите нам, пожалуйста

чтобы мы могли посмотреть

и выяснить

А то Вы написали

а где посмотреть-то? Кто ж нам, кроме Вас его покажет-то? :slight_smile:

Вот вроде и слова все правильные, а выглядит, кабутто их говорит дебил.

Прямо в нем и смотрим


+00003FCA:   CF65        RJMP      PC-0x009A      Relative jump

+00003FCB:   2F98        MOV       R25,R24        Copy register

+00003FCC:   918000C0    LDS       R24,0x00C0     Load direct from data space

+00003FCE:   FF85        SBRS      R24,5          Skip if bit in register set

+00003FCF:   CFFC        RJMP      PC-0x0003      Relative jump

+00003FD0:   939000C6    STS       0x00C6,R25     Store direct to data space
+00003FD2:   9508        RET                      Subroutine return

+00003FD3:   918000C0    LDS       R24,0x00C0     Load direct from data space

+00003FD5:   FF87        SBRS      R24,7          Skip if bit in register set

+00003FD6:   CFFC        RJMP      PC-0x0003      Relative jump

+00003FD7:   918000C0    LDS       R24,0x00C0     Load direct from data space

+00003FD9:   FD84        SBRC      R24,4          Skip if bit in register cleared

+00003FDA:   C001        RJMP      PC+0x0002      Relative jump

+00003FDB:   95A8        WDR                      Watchdog reset

+00003FDC:   918000C6    LDS       R24,0x00C6     Load direct from data space

И где тут Си?
Найди в Си команду- WDR Watchdog reset

тут и паскаля нет, и даже питона.
скажи мне, ты действительно здоров?
так выглядит дизасм листинг ЛЮБОГО кода, написанного на ЛЮБОМ языке!

А ты не иудей случаем?

Нет. Зато я знаю, что в wdt.h есть макрос wdt(), транслирующийся 1 в 1 как раз в эту команду.

Почему-то я думаю, что этот поцыэнт неизлечим.

Грамотному человеку видно, что нестандартная для Си функция написана без вызова библиотеки или процедуры, а напрямую в асме.
Вызов процедуры или функции как в коде должен выглядеть?