abutorin 0 11 сентября, 2012 Опубликовано 11 сентября, 2012 · Жалоба Добрый вечер. Требуется ваша помощь. Смог запустить scmRTOS на контроллере STM32F103xx с использованием инициализационных файлов (sysinit.cpp и startup.c) которые шли с примерами. Как я понял там устанавливается одна частота процессора и ее особо не поменаешь. Теперь есть желание запустить тот же проект с использованием инициалиационных файлов поставляемых от ST (startup_stm32f10x_md.S и system_stm32f10x.c). Для начала как я понял нужно переименовать обработчики прерываний (названия из файлов поставляемых с scmRTOS): PendSVC_ISR и SystemTimer_ISR. Это сделал в startup файле. Проект компилируется но результата нет. Долгими поисками и выяснениями склонился к мысли что просто не выключены эти самые прерывания. В документации так и не смог найти как же все это включить. Прошу сильно не пинать, опыта пока в данной теме маловато. Подскажите в каком направлении копать. К топику приложил все файлы в исходном состоянии. P.S. Файлы смог прикрепить только в архиве все вместе. system_init.tar.gz Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
AHTOXA 14 12 сентября, 2012 Опубликовано 12 сентября, 2012 · Жалоба startup_stm32f10x_md.S не пойдёт, он не вызывает конструкторы. Можете сделать так - добавьте в проект system_stm32f10x.c, а в sysinit.cpp добавьте #include "system_stm32f10x.h" и исправьте функцию void init_HW(void) { SystemInit(); } Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
abutorin 0 12 сентября, 2012 Опубликовано 12 сентября, 2012 · Жалоба Спасибо за быстрый ответ. Попробую вечером сделать. Но в данном случае получится что сначала инициализируется тактовая частота из файла sysinit.cpp а потом она переопределяется вызовом SystemInit(); ? Я догадываюсь что это будет занимат микросекунда, но всеже хочется не заставлять контроллер делать лишнюю работу. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
AHTOXA 14 12 сентября, 2012 Опубликовано 12 сентября, 2012 · Жалоба Нет, вы же удалите весь код инициализации из sysinit.cpp. Там останется только вызов SystemInit(). Или сделайте ещё проще - совсем удалите из проекта sysinit.cpp, а в startup.c замените init_HW() на SystemInit(). Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
abutorin 0 12 сентября, 2012 Опубликовано 12 сентября, 2012 · Жалоба Понял, спасибо за совет. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться