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)
两个线程都设置为相同的默认优先级.
uC/OS-II是抢占式的,但只能在一个方向上 - 它将抢占一个低优先级的线程,以允许更高优先级的线程运行,但不会反过来.也就是说,优先级较高的线程需要明确放弃对CPU的控制,以便允许较低优先级的线程运行.我打赌你的串行线程优先于HTTP线程,并且serFgetc()根本不放弃控制(通过OSMboxPend,或者OSTimeDly或其他一些例程).
尝试将串行线程作为系统中最低优先级的线程,或者将某些东西放入其代码中以允许它放弃对CPU的控制.(例如,当没有可用的字符时,等待信号量,你可以从数据可用的中断发布信号量.)要么应该工作.