Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: scmRTOSv310 на STM32F217
Форум разработчиков электроники ELECTRONIX.ru > Cистемный уровень проектирования > Операционные системы > scmRTOS
Acvarif
Установил 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

Вобщем основная непонятка с прерываниями.
Ведь они должны пропускаться через ОС. Или все не так?
sonycman
Цитата(Acvarif @ Dec 27 2011, 16:35) *
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 ...
}

Почитайте лучше мануал к ОС, там всё разжёвано.
Acvarif
Спасибо.
Мануал прочитал. В общих чертах все понятно.
Сделал новый проектик. Все работает без startup_stm32f2xx.s

Но один вопрос так и непонимаю.

Как запускается система тактирования stm32 в ОС?

Получается, что по умолчанию все рабртает от внутреннего генератора (вроде на частоте 8 мГц).
ST для управления системой тактирования предлагает файл system_stm32f2xx.c, где можно управлять разными клоками и их частотой. Но для его запуска нужен также startup_stm32f2xx.s
где какраз вызывается инициализация клоков. Но там есть еще и установка стеков, прописка векторов прерываний. Не помешает ли это правильной работе прерываний в ОС? Ведь порт имеет свой файл со списком векторов stm32f10x_vector.c.

Подключил пока только system_stm32f2xx.c и перед запуском ОС вызвал SystemInit();
Клок изменился. Сомневаюсь все ли я правильно сделал...
dxp
QUOTE (Acvarif @ Dec 28 2011, 16:06) *
Как запускается система тактирования stm32 в ОС?

Вообще-то, тактирование процессора - есть вещь ортогональная к ОС. Настройка аппаратуры процессора - это зона ответственности прикладного проекта, а не кода системы. Инициализация объектов системы происходит в конструкторах оных объектов. Конструкторы по стандарту вызываются после статической инициализации (которая отвечает за инициализацию объектов встроенных типов) до вызова main(). Как я понимаю, там же должен быть рабочий пример (и не один, а целых три), почему не посмотреть, как там люди сделали?
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.