我正在尝试在Micrium UC-OS / II下在我的动态C中运行2个任务。一个任务是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线程更高,而且这个生成的icetagcode并没有放弃所有(通过世代古典etagcode,或世代odicetagcode或其他例程)。

尝试使串行线程成为系统中的最低优先级线程,或将某些东西放入其代码中以允许其放弃对CPU的控制。(例如,在没有可用的字符时等待信号量,您可以从数据可用中断中发布哪个信号量。)应该工作。

其他提示

UC / OS-II仅支持独特的优先级。您还需要一些如ostimimed(x)或任务中的其他一些项目,以放弃对调度程序的控制。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top