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

 
 
 
Reply to this topicStart new topic
> RTX-Kernel от Keil, task без бесконечного цикла
alt3857
сообщение Oct 6 2010, 05:12
Сообщение #1


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

Группа: Участник
Сообщений: 94
Регистрация: 21-04-10
Пользователь №: 56 794



Привет! Если запускаю главную задачу ОС, в которой нет бесконечного цикла, например так:

__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
Go to the top of the page
 
+Quote Post
jasper
сообщение Oct 7 2010, 08:25
Сообщение #2


Народный чинитель
***

Группа: Участник
Сообщений: 415
Регистрация: 15-07-05
Пользователь №: 6 811



Я думаю, так делать не стоит. Либо вставьте бесконечный цикл, либо убивайте задачу при выходе из нее.
Go to the top of the page
 
+Quote Post
alt3857
сообщение Oct 11 2010, 07:09
Сообщение #3


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

Группа: Участник
Сообщений: 94
Регистрация: 21-04-10
Пользователь №: 56 794



Создал две задачи. Одну запустил из main, вторую запустил из первой. У задач разный приоритет. Как переключаться между ними? Запускаю в дебаге - одна с высоким приоритетом имеет статус running, а та что с меньшим - ready. Задача с меньшим приоритетом никогда не выполняется.
Go to the top of the page
 
+Quote Post
Shein
сообщение Dec 27 2010, 11:55
Сообщение #4


Участник
*

Группа: Участник
Сообщений: 45
Регистрация: 4-03-07
Пользователь №: 25 855



Цитата(alt3857 @ Oct 11 2010, 12:09) *
Создал две задачи. Одну запустил из main, вторую запустил из первой. У задач разный приоритет. Как переключаться между ними? Запускаю в дебаге - одна с высоким приоритетом имеет статус running, а та что с меньшим - ready. Задача с меньшим приоритетом никогда не выполняется.

Я так понимаю, что втораязадача и не сможет запуститься пока первая не отдаст управление вызовом одной из функций os_xxx_wait(). Задача с меньшим приоритетом может ыполниться только тогда, когда ни одной задачи с высшим приоритетом нечего делать. Т.е. пока первая ждет наступления какого-либо события, и система свободна, запустится вторая задача. Как только событие, которого ждет первая наступит, то вторая задача будет прервана и запущена первая.
Go to the top of the page
 
+Quote Post

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

 


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


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