ВходНаше всё Теги codebook 无线电组件 Поиск Опросы Закон Четверг
28 марта
1046044 Топик полностью
evgeniy1294 (22.10.2020 10:18, просмотров: 380) ответил VladislavS. на 1. Проверка if (dl != ds) не нужна. На этапе компиляции значения dl и ds неизвестны, их линкер подставляет. Поэтому оптимизация тут не сработает. А дальше while и без этой проверки всё правильно сделает.
1. "Проверка if (dl != ds) не нужна" - да, действительно не нужна, выпилю. 

2. "Можно __libc_init_array(); написать самому и компилировать с ключом -nostartfiles." - можно, ваша функция почти полная копия таковой из libc. В коде есть некоторые ненужные вещи:

080004a1   196 FUNC    GLOBAL DEFAULT    2 __register_exitproc

Это как пример, надо будет их повыпиливать, пока руки не дошли. Просто выпиливанием __libc_init_array() тут не обойтись.

3. Я пишу библиотеки, не могу гарантировать, что кто-нибудь не вернется из main. Это ловушка, в идеале она должна приводить систему к безопасному состоянию и делать сброс.

4. "__set_MSP нужен только при отладке" - кроилово ведет к попадалову, не вижу смысла в экономии максимум 3-х тактов на всё время жизни программы.

5. Инициализация у меня дробится на две части: в первой настраивается pll и память (ResetHandler), во второй всякие Eth'ты/USB и прочее - это уже можно где-угодно позвать. В данном случае пример - программа-мигалка, в ней нет настройки pll.