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

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

ps на таймерах 0 и 2 тоже самое: обработчики в рабочем коде выпилены (((

Очень странно. У меня не "выпиливает". Какой компилятор? Какой отладчик? Какая мега?
На сколько я разобрался, тоже только осваиваю фриртос, то она ни каким боком к аппаратным прерываниям не примазывается.
только что вставил в свой исходник:
Код
ISR(TIMER1_COMPA_vect)
{
  ;//code
}

в мапе появилась строка: 0x0000013a __vector_13
juvf
AT90CAN128, AVR Studio 4, компилятор gcc (winavr)

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

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

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

там есть ещё всякие заусенцы, от которых надо будет избавляца, например в обработчиках прерывания вызывались функции паузы.... pauseMs(int ms); Эта функция блокировала процессор с одним потоком на ms миллисекунд. Во фриртос паузы заменил на vTaskDelay(). Возможно получилось так, что в коде, в обработчиках аппаратных прерываний есть вызовы vTaskDelay(). Может на этапе компиляции обработчики с вызовами vTaskDelay() выпиливаются? вечером поисследую..
Volldemar
Добавил себе в проект
Код
ISR(TIMER1_COMPA_vect)
{

    vTaskDelay(10/portTICK_RATE_MS);
}

есть и в мапе и в lss.
Использую эклипс+винавр
juvf
решил проблему...... в мейкфайле не был включён объектник с обработчиками прерываний. laughing.gif
Volldemar
мда, бывает wink.gif
глянь в приват сообщения...
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.