我正在尝试让两个任务在Micrium uC-OS/II下的动态C中运行,一个任务是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();
}
}两个线程都设置为相同的默认优先级。
发布于 2010-07-11 02:19:11
uC/OS-II是抢占的,但只有一个方向-它将抢占较低优先级的线程,以允许较高优先级的线程运行,但不会相反。也就是说,高优先级线程需要显式地放弃对CPU的控制,以便允许低优先级线程运行。我敢打赌,您的串行线程比HTTP线程具有更高的优先级,而且serFgetc()根本不会放弃控制权(通过OSMboxPend、OSTimeDly或其他一些例程)。
尝试使串行线程成为系统中优先级最低的线程,或者在其代码中添加一些东西以允许其放弃对CPU的控制。(例如,在没有字符可用时等待信号量,您可以从数据可用中断发送该信号量。)这两个都应该行得通。
发布于 2010-08-16 02:48:56
uC/OS-II仅支持唯一优先级。此外,您还需要在任务循环中使用OSTimeDLY(x)或其他项目,以便将控制权交给调度器。
https://stackoverflow.com/questions/3220324
复制相似问题