|
|
 |
Ответов
|
Feb 1 2016, 15:43
|

Гуру
     
Группа: Свой
Сообщений: 2 720
Регистрация: 24-03-05
Пользователь №: 3 659

|
Доброго времени суток. Не стал открывать новую тему, так как вопрос про препроцессор ассемблера...Но для IAR. Тема такая: Обкатываю собственную библиотеку. Есть несколько плат с предустановленными процессорами STM32F. В опциях компилятора, во вкладке препроцессора задаю тип платы, например OPEN407Z. Есть файл "board.h" в котором подключаю нужный хидер для целевого варианта проекта. Начало выглядит так: CODE /******************************************************************************* MCU configs *******************************************************************************/ #if defined OPEN107V /* Defined WaveShare Open107V board */ #define STM32F10X_CL 1 /* Open107V on board target MCU */ #include "stm32f10x.h" /* Link MCU definitions */
#define BOARD_CFG_MCU_HSE_OSC_CLOCK 25000000U /* External quartz clock */
#elif defined OPEN407Z /* Defined WaveShare Open407Z board */ #define STM32F40XX 1 /* Open407Z on board target MCU */ #include "stm32f4xx.h" /* Link MCU definitions */
#define BOARD_CFG_MCU_HSE_OSC_CLOCK 8000000U /* External quartz clock */
#endif
#ifndef __ASSEMBLER__
#include "stdafx.h"
..........
Тут все прекрасно работает. Все драйверы периферии для разных типов МК подключают нужные хедеры и все компилится без ошибок. Теперь для каждого варианта МК мне нужно подключить ассемблерный стартап. Вот тут затык. В начале *.s фала вставляю вот такой код препроцессора: CODE #define __ASSEMBLER__ #include "board.h"
#if defined STM32F40XX
MODULE ?cstartup
............................
Но! После строчки "#if defined STM32F40XX" тело стартапа нифига не компилится! В чем я ошибаюсь? Спасибо!
--------------------
|
|
|
|
|
Feb 3 2016, 14:02
|
Группа: Участник
Сообщений: 5
Регистрация: 23-11-14
Пользователь №: 83 800

|
Цитата(prottoss @ Feb 1 2016, 17:43)  для каждого варианта МК мне нужно подключить ассемблерный стартап. Вот тут затык. В начале *.s фала вставляю вот такой код препроцессора: Мне тоже пришлось повозиться с ассемблерным стартапом в IAR. Но я вышел из положения другим путём: избавился от ассемблерного стартапа совсем. Добавил описание таблицы прерываний в *_it.c файл. Пример для STM32F446 по ссылке: http://forum.easyelectronics.ru/viewtopic....=428768#p428768После такого преобразрвания нетрудно написать любые сишные команды препроцессора.
Сообщение отредактировал Garmin - Feb 3 2016, 14:03
|
|
|
|
|
Feb 6 2016, 13:31
|

Гуру
     
Группа: Свой
Сообщений: 2 720
Регистрация: 24-03-05
Пользователь №: 3 659

|
Цитата(Garmin @ Feb 3 2016, 20:02)  Мне тоже пришлось повозиться с ассемблерным стартапом в IAR.... Спасибо больше! Идея мне очень понравилась! Очень быстро перевел все проекты с STM32 на "безассемблерную" структуру векторов прерываний. Избавился от кучи файлов. Ушли варнинги (которые немного раздражали) по поводу pubweak - ругался асссемблер. Знаете ли, привык чтобы проект, после компиляции, не выдавал ни каких предупреждений, кроме ОК. Выкладываю свой вариант стартапа для STM32F10x и STM32F40x. Может кому пригодится. Интересно - можно ли такое сварганить для других компиляторов? Попробовал сегодня в Keil - но я его не использую и по этому с наскоку не получилось.
--------------------
|
|
|
|
|
Feb 8 2016, 09:55
|

неотягощённый злом
     
Группа: Свой
Сообщений: 2 746
Регистрация: 31-01-08
Из: Санкт-Петербург
Пользователь №: 34 643

|
Цитата(prottoss @ Feb 6 2016, 16:31)  Код 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? Цитата(prottoss @ Feb 6 2016, 16:31)  Интересно - можно ли такое сварганить для других компиляторов? Конечно можно. Я раньше одновременно использовал и KEIL и GCC. Потом понял, что GCC меня полностью устраивает...
--------------------
“Будьте внимательны к своим мыслям - они начало поступков” (Лао-Цзы)
|
|
|
|
Сообщений в этой теме
grisha_scorpion директивы препроцессора для *.s(asm) файлов в Keil Dec 22 2015, 12:53 scifi Препроцессор - это для Си. В ассемблере есть анало... Dec 22 2015, 14:01 grisha_scorpion Цитата(scifi @ Dec 22 2015, 17:01) Препро... Dec 22 2015, 17:22  aaarrr Цитата(grisha_scorpion @ Dec 22 2015, 20... Dec 22 2015, 17:30   grisha_scorpion Цитата(aaarrr @ Dec 22 2015, 20:30) Как и... Dec 22 2015, 17:37    aaarrr Цитата(grisha_scorpion @ Dec 22 2015, 20... Dec 22 2015, 17:41     grisha_scorpion Цитата(aaarrr @ Dec 22 2015, 20:41) Надо ... Dec 23 2015, 08:35      KRS Цитата(grisha_scorpion @ Dec 23 2015, 11... Dec 23 2015, 10:00       grisha_scorpion Цитата(KRS @ Dec 23 2015, 13:00) Собствен... Dec 23 2015, 11:29     grisha_scorpion Цитата(aaarrr @ Dec 22 2015, 20:41) Надо ... Dec 23 2015, 14:32      Непомнящий Евгений Цитата(grisha_scorpion @ Dec 23 2015, 17... Dec 24 2015, 06:32  demiurg_spb Всё это можно через Makefile разрулить... Feb 3 2016, 14:09  drozel Цитата(Garmin @ Feb 3 2016, 20:02) Но я в... Feb 5 2016, 10:45   scifi Цитата(drozel @ Feb 5 2016, 13:45) Вот и ... Feb 5 2016, 10:47     demiurg_spb Цитата(prottoss @ Feb 8 2016, 13:05) А фи... Feb 8 2016, 10:13 KRS Цитата(prottoss @ Feb 1 2016, 18:43) В оп... Feb 9 2016, 06:41  prottoss Цитата(KRS @ Feb 9 2016, 12:41) А в опция... Feb 9 2016, 07:35 prottoss Спасибо за ответыю
Все что сказано выше - понятно.... Feb 3 2016, 15:37
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|