drozel 0 5 февраля, 2016 Опубликовано 5 февраля, 2016 · Жалоба Но я вышел из положения другим путём: избавился от ассемблерного стартапа совсем. Вот и именно. Вообще не понимаю, откуда растут ноги у ассемблерного стартапа: вроде даже сам ARM поставляет сишный стартап для ядра. Даже если нет, написать структуру на сях - делов на 20 минут. Заодно обработчики дефолтные можно накидать, используя прелести __weak Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
scifi 1 5 февраля, 2016 Опубликовано 5 февраля, 2016 · Жалоба Вот и именно. Вообще не понимаю, откуда растут ноги у ассемблерного стартапа: вроде даже сам ARM поставляет сишный стартап для ядра. Люто плюсую. В открытую была заявлена одна из целей создания Cortex-M: чтобы можно было запрограммировать всё без ассемблера. А про ноги можно предположить: ARM7TDMI требовал ассемблера, ну а дальше по инерции продолжилось... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
prottoss 0 6 февраля, 2016 Опубликовано 6 февраля, 2016 · Жалоба Мне тоже пришлось повозиться с ассемблерным стартапом в IAR.... Спасибо больше! Идея мне очень понравилась! Очень быстро перевел все проекты с STM32 на "безассемблерную" структуру векторов прерываний. Избавился от кучи файлов. Ушли варнинги (которые немного раздражали) по поводу pubweak - ругался асссемблер. Знаете ли, привык чтобы проект, после компиляции, не выдавал ни каких предупреждений, кроме ОК. Выкладываю свой вариант стартапа для STM32F10x и STM32F40x. Может кому пригодится. Интересно - можно ли такое сварганить для других компиляторов? Попробовал сегодня в Keil - но я его не использую и по этому с наскоку не получилось. startup.zip Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
demiurg_spb 0 8 февраля, 2016 Опубликовано 8 февраля, 2016 · Жалоба void HardFault_Handler(void) { __asm volatile ( " tst lr, #4 \n" " ite eq \n" " mrseq r0, msp \n" " mrsne r0, psp \n" " ldr r1, [r0, #24] \n" " b GetRegistersFromStack \n" ); } Хочу поинтересоваться, для чего нужна предпоследняя строка в Вашей асмовой вставке, если Вы и так в GetRegistersFromStack читаете PC? Интересно - можно ли такое сварганить для других компиляторов?Конечно можно. Я раньше одновременно использовал и KEIL и GCC. Потом понял, что GCC меня полностью устраивает... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
prottoss 0 8 февраля, 2016 Опубликовано 8 февраля, 2016 · Жалоба Хочу поинтересоваться, для чего нужна предпоследняя строка в Вашей асмовой вставке, если Вы и так в GetRegistersFromStack читаете PC?А фиг знает :rolleyes: Когда то скопипастил откуда то, когда искал ошибку с HardFault, потом, помню, что то переделал. Потом ошибку нашел и забыл про этот код. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
demiurg_spb 0 8 февраля, 2016 Опубликовано 8 февраля, 2016 · Жалоба А фиг знает :rolleyes:Понятно. Тогда можете её удалить. Во вложении мой стартап для GCC (он конечно тоже изначально взят был откуда-то и творчески переработан))) STM32F10X_startup.c.zip Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
KRS 0 9 февраля, 2016 Опубликовано 9 февраля, 2016 · Жалоба В опциях компилятора, во вкладке препроцессора задаю тип платы, например OPEN407Z. А в опциях для ассемблера задаете? У IAR настройки препроцессора для ассемблера и с компилятора раздельные... И препроцессор для asm вроде нормально работает... по крайней мере я с проблемами не сталкивался и #if со сложными условиями и #ifdef без проблем работали.... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
prottoss 0 9 февраля, 2016 Опубликовано 9 февраля, 2016 · Жалоба А в опциях для ассемблера задаете? У IAR настройки препроцессора для ассемблера и с компилятора раздельные... И препроцессор для asm вроде нормально работает... по крайней мере я с проблемами не сталкивался и #if со сложными условиями и #ifdef без проблем работали.... Xe...Так и есть. Нужно было для препроцессора ассемблера тоже задавать тип платы... Вот я недогада... :) Но, тем не менее, все сложилось в лучшую сторону - я вообще избавился от ассемблерного стартапа, кучи предупреждений про неиспользуемые прерывания и кучи фалов. Так что обратно откатывать не буду, хоть и проблема выяснилась. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться