Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: RTX-Kernel от Keil
Форум разработчиков электроники ELECTRONIX.ru > Cистемный уровень проектирования > Операционные системы
alt3857
Привет! Если запускаю главную задачу ОС, в которой нет бесконечного цикла, например так:

__task void MainTask (void)
{
putchar(100);//функция записи в посл. порт
};

int main (void)
{
SystemInit();
os_sys_init_prio (MainTask, 10);
return 0;
}

задача выполняется какое-то время - вижу это по данным, которые приходят в UART, а потом останавливается. Почему так происходит? Причем, когда останавливаю дебаг, то нахожусь в startup.s здесь:

HardFault_Handler\
PROC
EXPORT HardFault_Handler [WEAK]
B .
ENDP
jasper
Я думаю, так делать не стоит. Либо вставьте бесконечный цикл, либо убивайте задачу при выходе из нее.
alt3857
Создал две задачи. Одну запустил из main, вторую запустил из первой. У задач разный приоритет. Как переключаться между ними? Запускаю в дебаге - одна с высоким приоритетом имеет статус running, а та что с меньшим - ready. Задача с меньшим приоритетом никогда не выполняется.
Shein
Цитата(alt3857 @ Oct 11 2010, 12:09) *
Создал две задачи. Одну запустил из main, вторую запустил из первой. У задач разный приоритет. Как переключаться между ними? Запускаю в дебаге - одна с высоким приоритетом имеет статус running, а та что с меньшим - ready. Задача с меньшим приоритетом никогда не выполняется.

Я так понимаю, что втораязадача и не сможет запуститься пока первая не отдаст управление вызовом одной из функций os_xxx_wait(). Задача с меньшим приоритетом может ыполниться только тогда, когда ни одной задачи с высшим приоритетом нечего делать. Т.е. пока первая ждет наступления какого-либо события, и система свободна, запустится вторая задача. Как только событие, которого ждет первая наступит, то вторая задача будет прервана и запущена первая.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.