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

 
 
> Как из обработчика прерывания(вынесен в отдельный файл) вызвать xTaskResumeFromISR
Neo_Matrix
сообщение Feb 25 2016, 15:58
Сообщение #1


Участник
*

Группа: Участник
Сообщений: 27
Регистрация: 11-04-06
Пользователь №: 16 029



Такая проблема:
Есть файл main.c в нем имеется задача РТОС, которая объявлена как void vDeleteSTR(void const * argument); сама функция такая
Код
void vDeleteUart(void const * argument)
{
//Здесь удаляем строку
vTaskSuspend(NULL); // Здесь засыпаем, пока прерывание не разбудит...
}

Сам обработчик прерывания вынесен в отдельный файл допустим irq.c
Код
void USART3_IRQHandler(void)
{
xTaskResumeFromISR(vDeleteUart);// Пробовал писать так
}

Но чего и следовало ожидать, vDeleteUart не объявлена в irq.c, соответственно при компиляции ошибка. Как правильно сделать?
extern void vDeleteSTR(void const * argument); - пробовал - не работает.
Спасибо всем.
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
esaulenka
сообщение Feb 29 2016, 07:31
Сообщение #2


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

Группа: Свой
Сообщений: 1 032
Регистрация: 13-03-08
Из: Маськва
Пользователь №: 35 877



Цитата(Neo_Matrix @ Feb 25 2016, 18:58) *
Но чего и следовало ожидать, vDeleteUart не объявлена в irq.c, соответственно при компиляции ошибка. Как правильно сделать?


Для решения этой задачи надо объявить хэндлер (который присваивается в CreateTask() глобальным. Заодно осознать, что хэндлер - это просто переменная (пусть и "хитрого" типа). Как использовать переменную в двух модулях одновременно, написано во всех букварях (первая же ссылка - http://www.c-cpp.ru/books/extern ).

А "как правильно" написано в статьях Курница (гуглится "Курниц FreeRTOS"). Очень рекомендую.
Ещё очень рекомендую инструкцию от scmRTOS - просто и понятно расписаны все принципы микро-операционки.

Цитата(zltigo @ Feb 26 2016, 15:40) *
C этим вообще просто - подсовывание при вызове адреса функции вместо хандлера процесса есть 100% причина ругаться.

Вот кстати необязательно. Авторы FreeRTOS очень любят указатели на void. Соответственно, можно наворотить всякой фигни, и оно успешно соберётся. Работать, конечно же, это не станет.


--------------------
Тут обсуждается творческий порыв, а не соответствие каким-либо стандартам ©
Go to the top of the page
 
+Quote Post
zltigo
сообщение Feb 29 2016, 19:10
Сообщение #3


Гуру
******

Группа: Свой
Сообщений: 13 372
Регистрация: 27-11-04
Из: Riga, Latvia
Пользователь №: 1 244



QUOTE (esaulenka @ Feb 29 2016, 09:31) *
Вот кстати необязательно. Авторы FreeRTOS очень любят указатели на void. Соответственно, можно наворотить всякой фигни, и оно успешно соберётся. Работать, конечно же, это не станет.

В данном случае все совершенно однозначно - даже вместо:
* void
подсунуть что-то типа функции:
void (*)(void)
без реальных издевательств нереально.


--------------------
Feci, quod potui, faciant meliora potentes
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- Neo_Matrix   Как из обработчика прерывания(вынесен в отдельный файл) вызвать xTaskResumeFromISR   Feb 25 2016, 15:58
- - x893   void vDeleteUart(void const * argument);   Feb 25 2016, 17:39
- - zltigo   QUOTE (Neo_Matrix @ Feb 25 2016, 17:58) Т...   Feb 25 2016, 19:36
- - Neo_Matrix   В первом сообщении закралась ошибка, vDeleteUart н...   Feb 25 2016, 20:50
|- - zltigo   QUOTE (Neo_Matrix @ Feb 25 2016, 22:50) к...   Feb 25 2016, 20:52
- - Neo_Matrix   Хорошо допустим есть main.c c с содержимым: Код#in...   Feb 25 2016, 21:44
- - x893   И описание и пример кода http://www.freertos.org/t...   Feb 25 2016, 21:52
- - Neo_Matrix   x893 Спасибо, но если бы все было в одном main.c в...   Feb 25 2016, 22:19
|- - zltigo   QUOTE (Neo_Matrix @ Feb 26 2016, 00:19) С...   Feb 26 2016, 05:51
|- - Ruslan1   Цитата(zltigo @ Feb 26 2016, 08:51) Разум...   Feb 26 2016, 07:25
- - x893   В другом файле написать extern TaskHandle_t xHand...   Feb 25 2016, 23:01
- - Neo_Matrix   ЦитатаВ другом файле написатьextern TaskHandle_t x...   Feb 26 2016, 08:18
|- - jcxz   Цитата(Neo_Matrix @ Feb 26 2016, 14:18) О...   Feb 26 2016, 08:38
|- - zltigo   QUOTE (Neo_Matrix @ Feb 26 2016, 10:18) М...   Feb 26 2016, 10:03
- - Neo_Matrix   Цитата(jcxz @ Feb 26 2016, 10:38) Чтобы с...   Feb 26 2016, 08:55
|- - jcxz   Цитата(Neo_Matrix @ Feb 26 2016, 14:55) Н...   Feb 26 2016, 09:04
- - Neo_Matrix   Цитата(jcxz @ Feb 26 2016, 11:04) Вопрос ...   Feb 26 2016, 10:14
|- - zltigo   QUOTE (Neo_Matrix @ Feb 26 2016, 12:14) С...   Feb 26 2016, 12:40


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

 


RSS Текстовая версия Сейчас: 23rd July 2025 - 23:41
Рейтинг@Mail.ru


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