动态C/Rabbit上的Micrium uC-OS/II - 可能会导致任务缺乏

fre*_*set 4 c embedded rtos multitasking micrium

我想在Micrium uC-OS/II下的Dynamic 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();
    }
}
Run Code Online (Sandbox Code Playgroud)

两个线程都设置为相同的默认优先级.

Aid*_*lly 7

uC/OS-II是抢占式的,但只能在一个方向上 - 它将抢占一个低优先级的线程,以允许更高优先级的线程运行,但不会反过来.也就是说,优先级较高的线程需要明确放弃对CPU的控制,以便允许较低优先级的线程运行.我打赌你的串行线程优先于HTTP线程,并且serFgetc()根本不放弃控制(通过OSMboxPend,或者OSTimeDly或其他一些例程).

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