Jump to content

    
Sign in to follow this  
juvf

AVR+FREERTOS и прерывания

Recommended Posts

FreeRTOS использует таймер1. Таймер 3 использую для своих нужд. Написал обработчик прерываний

ISR(TIMER3_COMPA_vect)
{
   //code
}

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

 

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

Share this post


Link to post
Share on other sites
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

Edited by Volldemar

Share this post


Link to post
Share on other sites

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

 

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

 

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

 

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

 

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

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Sign in to follow this