Myiume UC-OS / II на динамическом C / кролика - может возникнуть голодание задачи

StackOverflow https://stackoverflow.com/questions/3220324

Вопрос

Я пытаюсь получить 2 задания, чтобы запустить в моем динамике C под микроэлектрием UC-OS / II.Одна задача - это HTTP-обработчик, другой читает из последовательного порта.Задача последовательного порта, похоже, ингибирует задачу HTTP.Есть идеи, почему это?Я думал, что UC-OS / II добычаю.

void httptask(void* ptr)
{
 http_init();

 while(1) {
  http_handler();
 }
}

void gpstask(void* ptr) {

 int c;

 while (1) {
        c = serFgetc();
    }
}
.

Оба потока устанавливаются на один и тот же приоритет по умолчанию.

Это было полезно?

Решение

UC / OS-II представляет собой упреждающую, но только в одном направлении - он предотвращает более низкую приоритетную нить, чтобы позволить запустить более высокую приоритетную нить, но не будет выполнять обратное.То есть, то есть более высокие приоритетные потоки должны явно отказаться от контроля CPU, чтобы разрешить бегать более низких приоритетных нитей.Я делаю ставку, что ваша последовательная поток является более высоким приоритетом, чем поток HTTP, и что serFgetc() не отказывается от контроля вообще (через OSMboxPend или OSTimeDly или какой-либо другой рутины).

Попробуйте либо сделать серийный поток наименьшей приоритетной нити в системе, или вставлять что-то в свой код, чтобы позволить ему отказаться от контроля CPU.(Например, ожидание в семафоре, когда символы не доступны, какой семафон вы можете опубликовать из доступных данных прерывания.) Либо должен работать.

Другие советы

UC / OS-II поддерживает только уникальные приоритеты.Также вам нужно что-то вроде ostymally (x) или другой пункт в ваших циклах задачи, чтобы отказаться от управления планировщиком.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top