реклама на сайте
подробности

 
 
> AVR+FREERTOS и прерывания
juvf
сообщение Apr 27 2012, 02:41
Сообщение #1


Профессионал
*****

Группа: Свой
Сообщений: 1 261
Регистрация: 14-05-09
Из: Челябинск
Пользователь №: 49 045



FreeRTOS использует таймер1. Таймер 3 использую для своих нужд. Написал обработчик прерываний
Код
ISR(TIMER3_COMPA_vect)
{
   //code
}
Внутри прерывания поставил брейкпоинты. Гружу дебаг.... выскакивает "ахтунг" с сообщением что брейкпоинта не будет. Ну и в прерывание не попадаю ни когда. посмотрел вектора прерываний - напротив TIMER3_COMPA_vect (0х38) пусто. поискал по ассемблеру мой обработчек - нету, в *.map тоже нету. Как будь-то компилятор его выпилил. Без фрииртос этот код работает нормально, а с фряхой обработчики исчезают. Куда девается обработчик прерывания? Может ос перекрыть макрос ISR(TIMER3_COMPA_vect) каким то своим?

ps на таймерах 0 и 2 тоже самое: обработчики в рабочем коде выпилены (((
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
juvf
сообщение Apr 27 2012, 09:12
Сообщение #2


Профессионал
*****

Группа: Свой
Сообщений: 1 261
Регистрация: 14-05-09
Из: Челябинск
Пользователь №: 49 045



AT90CAN128, AVR Studio 4, компилятор gcc (winavr)

У меня был проект тяжёлый, без оси. нужно добавить функционал... без оси - чем дальше тем хуже. Переписывать весь проект на ос - нереально долго/дорого, да и отладку по стыковке с др устройствами нет возможности сделать.

поставил голую ось, сделал одну задачу и в эту задачу сунул из старого проекта main. РАБОТАЕТ!!! Тока косяк с аппаратными прерываниями. в векторах прерывания остались вектора ресета, системного таймера и INT0. А вектора остальных таймеров, вектора обоих уартов - выпилены. (((

Цитата
Очень странно. У меня не "выпиливает".
блинннн..... пойду к гадалке.

там есть ещё всякие заусенцы, от которых надо будет избавляца, например в обработчиках прерывания вызывались функции паузы.... pauseMs(int ms); Эта функция блокировала процессор с одним потоком на ms миллисекунд. Во фриртос паузы заменил на vTaskDelay(). Возможно получилось так, что в коде, в обработчиках аппаратных прерываний есть вызовы vTaskDelay(). Может на этапе компиляции обработчики с вызовами vTaskDelay() выпиливаются? вечером поисследую..
Go to the top of the page
 
+Quote Post



Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 22nd August 2025 - 08:47
Рейтинг@Mail.ru


Страница сгенерированна за 0.01353 секунд с 7
ELECTRONIX ©2004-2016