acvarif 0 December 27, 2011 Posted December 27, 2011 · Report post Установил scmRTOS на STM32F217 (платка от stаrterkit). Проект для IAR6.21 прилагается. Порт для stm32f2xx взял от stm32f10x (особо и переделыватьл ничего не пришлось) Вроде все работает. Наблюдаются холостой ход, прерывания системного таймера, даже USART1 работает по прерываниям. Но всеравно возникают вопросы. 1. В файле scmRTOS_TARGET_CFG.h Как правильно выставить параметры если системная частота 120 мГц // Define SysTick clock frequency and its interrupt rate in Hz. #define SYSTICKFREQ 8000000 #define SYSTICKINTRATE 500 2.Прерывания работают без участия ОС Подключение (отключение) к проекту файла stm32f10x_vector.c никак на работе прерываний не сказывается Похоже, что операционка вообще в этом не учавствует. Правда для работы прерываний пришлось к проекту подключить startup_stm32f2xx.s Вобщем основная непонятка с прерываниями. Ведь они должны пропускаться через ОС. Или все не так? GnrScmRtos310IarArmv6Prj.rar Quote Share this post Link to post Share on other sites More sharing options...
sonycman 2 December 27, 2011 Posted December 27, 2011 · Report post 1. В файле scmRTOS_TARGET_CFG.h Как правильно выставить параметры если системная частота 120 мГц // Define SysTick clock frequency and its interrupt rate in Hz. #define SYSTICKFREQ 8000000 #define SYSTICKINTRATE 500 2.Прерывания работают без участия ОС Подключение (отключение) к проекту файла stm32f10x_vector.c никак на работе прерываний не сказывается Похоже, что операционка вообще в этом не учавствует. Правда для работы прерываний пришлось к проекту подключить startup_stm32f2xx.s Вобщем основная непонятка с прерываниями. Ведь они должны пропускаться через ОС. Или все не так? 1. По аналогии - указываете частоту процессора в герцах и желаемую частоту прерываний таймера, к примеру: #define SYSTICKFREQ 120000000 #define SYSTICKINTRATE 200 где частота процессора 120 МГц, частота прерывания системного таймера - 200 Гц. 2. С прерываниями, скорее, наоборот - ОС "пропускается" через нужные прерывания, точнее её сервисы. Необходимо только одно прерывание - системного таймера, чтобы ОС могла отсчитывать временные промежутки и переключать процессы. Для использования сервисов ОС в любых других прерываниях - нужно включить в код обработчика "обёртку" TISRW: void DMAC_IrqHandler(void) { OS::TISRW isr; ... code ... dmac_cbtc_mci.signal_isr(); ... code ... } Почитайте лучше мануал к ОС, там всё разжёвано. Quote Share this post Link to post Share on other sites More sharing options...
acvarif 0 December 28, 2011 Posted December 28, 2011 (edited) · Report post Спасибо. Мануал прочитал. В общих чертах все понятно. Сделал новый проектик. Все работает без startup_stm32f2xx.s Но один вопрос так и непонимаю. Как запускается система тактирования stm32 в ОС? Получается, что по умолчанию все рабртает от внутреннего генератора (вроде на частоте 8 мГц). ST для управления системой тактирования предлагает файл system_stm32f2xx.c, где можно управлять разными клоками и их частотой. Но для его запуска нужен также startup_stm32f2xx.s где какраз вызывается инициализация клоков. Но там есть еще и установка стеков, прописка векторов прерываний. Не помешает ли это правильной работе прерываний в ОС? Ведь порт имеет свой файл со списком векторов stm32f10x_vector.c. Подключил пока только system_stm32f2xx.c и перед запуском ОС вызвал SystemInit(); Клок изменился. Сомневаюсь все ли я правильно сделал... Edited December 28, 2011 by Acvarif Quote Share this post Link to post Share on other sites More sharing options...
dxp 213 December 29, 2011 Posted December 29, 2011 · Report post Как запускается система тактирования stm32 в ОС? Вообще-то, тактирование процессора - есть вещь ортогональная к ОС. Настройка аппаратуры процессора - это зона ответственности прикладного проекта, а не кода системы. Инициализация объектов системы происходит в конструкторах оных объектов. Конструкторы по стандарту вызываются после статической инициализации (которая отвечает за инициализацию объектов встроенных типов) до вызова main(). Как я понимаю, там же должен быть рабочий пример (и не один, а целых три), почему не посмотреть, как там люди сделали? Quote Share this post Link to post Share on other sites More sharing options...