Когда-то в начале темы я спрашивал у @dedivan
теперь, похоже, пришла пора спросить “видел ли он загрузчик?”.
Видимо, следующим вопросом будет “о каких директивах ассемблера слышал” ![]()
Когда-то в начале темы я спрашивал у @dedivan
теперь, похоже, пришла пора спросить “видел ли он загрузчик?”.
Видимо, следующим вопросом будет “о каких директивах ассемблера слышал” ![]()
видимо, если не совсем …иЛ, будет так выкручиваться
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 про загрузчик, что нибудь скажешь/добавишь?
А это что- не про загрузчик?
Загрузчик работает в маленькой тесной ограниченной части памяти. Там не все можно делать через функции или процедуры Си, часто это простой конечный автомат .
точно, и факт, что через него таракан не пролезет.
не… про загрузчик вот это
есть где посмотреть на него?
А можно с этого места поподробнее?
И, да, я присоединяюсь к просьбе @xDriver, покажите нам, пожалуйста
чтобы мы могли посмотреть
и выяснить
А то Вы написали
а где посмотреть-то? Кто ж нам, кроме Вас его покажет-то? ![]()
Вот вроде и слова все правильные, а выглядит, кабутто их говорит дебил.
Прямо в нем и смотрим
+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 как раз в эту команду.
Почему-то я думаю, что этот поцыэнт неизлечим.
Грамотному человеку видно, что нестандартная для Си функция написана без вызова библиотеки или процедуры, а напрямую в асме.
Вызов процедуры или функции как в коде должен выглядеть?