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

 
 
2 страниц V  < 1 2  
Reply to this topicStart new topic
> Как из обработчика прерывания(вынесен в отдельный файл) вызвать xTaskResumeFromISR
zltigo
сообщение Feb 26 2016, 10:03
Сообщение #16


Гуру
******

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



QUOTE (Neo_Matrix @ Feb 26 2016, 10:18) *
Между прочим код компилится без варнингов и без ошибок, если все сгрузить в мейн.

Между прочим, он должен РАБОТАТЬ, а не только компилится с подавленным варнингами. Работать пробуждение написаное Вам НЕ будет ни при каком раскладе.




--------------------
Feci, quod potui, faciant meliora potentes
Go to the top of the page
 
+Quote Post
Neo_Matrix
сообщение Feb 26 2016, 10:14
Сообщение #17


Участник
*

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



Цитата(jcxz @ Feb 26 2016, 11:04) *
Вопрос вроде был "Как правильно разбудить задачу vDeleteSTR с прерывания" если я не ошибаюсь.
Обычно простое засыпание (без привязки к средствам синхронизации ОС) задачи ОС - это засыпание на N тактов сис.таймера. Задача конечно проснётся и обнаружит событие, но не сразу после его его возникновения, как если бы ждала мэйлбокса. Данные не обязательно передавать через мэйлбокс - достаточно факта вызова функции MailboxPost() в ISR.

Да, возможно я не очень точно описал мою проблему. Проблема была в объявлении ХЕНДЛА в отдельном файле не main.c. Собственно уже решено, всем спасибо.

Цитата(zltigo @ Feb 26 2016, 12:03) *
Между прочим, он должен РАБОТАТЬ, а не только компилится с подавленным варнингами. Работать пробуждение написаное Вам НЕ будет ни при каком раскладе.

Спорить не хочу, но это работает на Дискавери 4. Варнинги у меня не подавлены. С чего Вы вообще взяли, что подавлены варнинги?
В любом случае x893 уже дал ответ на поставленный вопрос. Да и выше было сказано о примере кода, а не о конечном варианте.
Go to the top of the page
 
+Quote Post
zltigo
сообщение Feb 26 2016, 12:40
Сообщение #18


Гуру
******

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



QUOTE (Neo_Matrix @ Feb 26 2016, 12:14) *
Спорить не хочу, но это работает на Дискавери 4.

Если работает, то что то другое. Без вариантов.
QUOTE
Варнинги у меня не подавлены. С чего Вы вообще взяли, что подавлены варнинги?

C этим вообще просто - подсовывание при вызове адреса функции вместо хандлера процесса есть 100% причина ругаться.


--------------------
Feci, quod potui, faciant meliora potentes
Go to the top of the page
 
+Quote Post
esaulenka
сообщение Feb 29 2016, 07:31
Сообщение #19


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

Группа: Свой
Сообщений: 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
Сообщение #20


Гуру
******

Группа: Свой
Сообщений: 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

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

 


RSS Текстовая версия Сейчас: 18th July 2025 - 20:12
Рейтинг@Mail.ru


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