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

 
 
> Вопросы по RTOS TNKernel 2.6
yurmala
сообщение May 13 2011, 03:55
Сообщение #1


Участник
*

Группа: Свой
Сообщений: 65
Регистрация: 9-02-11
Из: Трехгорный
Пользователь №: 62 814



Здравствуйте! Есть Keil-овский проект на базе TNKernel. Через неопределенное время проект подвисает (причем не всегда), поэтому стал погружаться глубже в эту систему в поисках ответов.
Подскажите пожалуйста:
1) Проект построил на основе примеров входящих в дистрибутив TNKernel. Там везде проекты работают в режиме Supervisor. И мой проект соответственно тоже. Для чего? Правильно ли, что все происходит в этом режиме? Это обязательное условие для TNKernel?
2) Как можно программно отследить состояние стека? Или размер свободного ОЗУ. Хотелось бы в режиме #define DEBUG периодически выводить на терминал состояние памяти/стека...
Заранее спасибо за помощь.

p.s. проект в начальной стадии. пока просто :
-мигает светодиодами
-ведет свой календарь (время)
-выводит на ЖК это время (HH:MM:SS)
-опрос через АЦП одного датчика.
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов (1 - 3)
yurmala
сообщение May 16 2011, 05:25
Сообщение #2


Участник
*

Группа: Свой
Сообщений: 65
Регистрация: 9-02-11
Из: Трехгорный
Пользователь №: 62 814



и еще в догонку вопрос:

есть флаг
Код
program_event.id_event = 0; tn_event_create(&program_event, TN_EVENT_ATTR_MULTI,_PE_FLAG_RUN_|_PE_ALLOW_LEDS_|_PE_ALLOW_TIME_);

сбрасываю в прерывании флаг через битовую маску:
Код
tn_event_iset(&program_event,(_PE_FLAG_MENU_REFRESH_|_PE_FLAG_RUN_|_PE_ALLOW_LEDS_));

где
Код
#define _PE_FLAG_RUN_                (  1 <<  0)
#define _PE_FLAG_MENU_REFRESH_        (  1 <<  2)
#define _PE_ALLOW_LEDS_            (  1 <<  4)

при пошаговом исполнении вижу что биты во флаге сбрасываются, но задачи, которые должны были бы остановиться - продолжают работать. Вернее останавливается только задача, ожидающая один флаг/бит (_PE_FLAG_MENU_REFRESH_).

Все бы ничего, но при варианте со сбросом отдельных битов во флаге:
Код
tn_event_iset(&program_event,_PE_FLAG_MENU_REFRESH_);
tn_event_iset(&program_event,_PE_FLAG_RUN_);
tn_event_iset(&program_event,_PE_ALLOW_LEDS_);

работает четко. Задачи "останавливаются" - а именно переходят в режим ожидания флага....

получается что TNKernel не реагирует на "групповую" сброску битов во флаге?
Go to the top of the page
 
+Quote Post
Vlad27
сообщение May 16 2011, 05:49
Сообщение #3


Частый гость
**

Группа: Свой
Сообщений: 95
Регистрация: 31-07-05
Из: Полоцк Беларусь
Пользователь №: 7 227



Вроде бы для сброса флагов в прерывании предназначен сервис tn_event_iclear().
Go to the top of the page
 
+Quote Post
yurmala
сообщение May 16 2011, 09:51
Сообщение #4


Участник
*

Группа: Свой
Сообщений: 65
Регистрация: 9-02-11
Из: Трехгорный
Пользователь №: 62 814



Цитата(Vlad27 @ May 16 2011, 11:49) *
Вроде бы для сброса флагов в прерывании предназначен сервис tn_event_iclear().

пардон. моя ошибка. конечно, речь идет про установку флага. Но суть вопроса остается.
т.е. Задачи, ожидающие установку флага - запускаются не все, если флаг устанавливается "группой битов"
Код
tn_event_iset(&program_event,(_PE_FLAG_MENU_REFRESH_|_PE_FLAG_RUN_|_PE_ALLOW_LEDS_));

в этом случае запускается задача ожидающая флаг _PE_FLAG_MENU_REFRESH_ - и только она

в то время как установка флага побитно срабатывает корректно - все задачи запускаются.
Код
tn_event_iset(&program_event,_PE_FLAG_MENU_REFRESH_);
tn_event_iset(&program_event,_PE_FLAG_RUN_);
tn_event_iset(&program_event,_PE_ALLOW_LEDS_)
Go to the top of the page
 
+Quote Post

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

 


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


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