yurmala 0 13 мая, 2011 Опубликовано 13 мая, 2011 · Жалоба Здравствуйте! Есть Keil-овский проект на базе TNKernel. Через неопределенное время проект подвисает (причем не всегда), поэтому стал погружаться глубже в эту систему в поисках ответов. Подскажите пожалуйста: 1) Проект построил на основе примеров входящих в дистрибутив TNKernel. Там везде проекты работают в режиме Supervisor. И мой проект соответственно тоже. Для чего? Правильно ли, что все происходит в этом режиме? Это обязательное условие для TNKernel? 2) Как можно программно отследить состояние стека? Или размер свободного ОЗУ. Хотелось бы в режиме #define DEBUG периодически выводить на терминал состояние памяти/стека... Заранее спасибо за помощь. p.s. проект в начальной стадии. пока просто : -мигает светодиодами -ведет свой календарь (время) -выводит на ЖК это время (HH:MM:SS) -опрос через АЦП одного датчика. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
yurmala 0 16 мая, 2011 Опубликовано 16 мая, 2011 · Жалоба и еще в догонку вопрос: есть флаг 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 не реагирует на "групповую" сброску битов во флаге? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Vlad27 0 16 мая, 2011 Опубликовано 16 мая, 2011 · Жалоба Вроде бы для сброса флагов в прерывании предназначен сервис tn_event_iclear(). Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
yurmala 0 16 мая, 2011 Опубликовано 16 мая, 2011 · Жалоба Вроде бы для сброса флагов в прерывании предназначен сервис 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_) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться