首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Dynamic C/Rabbit上的Micrium uC-OS/II -可能任务不足

Dynamic C/Rabbit上的Micrium uC-OS/II -可能任务不足
EN

Stack Overflow用户
提问于 2010-07-11 02:08:27
回答 2查看 1.1K关注 0票数 4

我正在尝试让两个任务在Micrium uC-OS/II下的动态C中运行,一个任务是http处理程序,另一个是从串口读取。串口任务似乎阻止了http任务的运行。你知道为什么会这样吗?我以为uC-OS/II是先发制人的。

代码语言:javascript
复制
void httptask(void* ptr)
{
 http_init();

 while(1) {
  http_handler();
 }
}

void gpstask(void* ptr) {

 int c;

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

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

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2010-07-11 02:19:11

uC/OS-II是抢占的,但只有一个方向-它将抢占较低优先级的线程,以允许较高优先级的线程运行,但不会相反。也就是说,高优先级线程需要显式地放弃对CPU的控制,以便允许低优先级线程运行。我敢打赌,您的串行线程比HTTP线程具有更高的优先级,而且serFgetc()根本不会放弃控制权(通过OSMboxPendOSTimeDly或其他一些例程)。

尝试使串行线程成为系统中优先级最低的线程,或者在其代码中添加一些东西以允许其放弃对CPU的控制。(例如,在没有字符可用时等待信号量,您可以从数据可用中断发送该信号量。)这两个都应该行得通。

票数 7
EN

Stack Overflow用户

发布于 2010-08-16 02:48:56

uC/OS-II仅支持唯一优先级。此外,您还需要在任务循环中使用OSTimeDLY(x)或其他项目,以便将控制权交给调度器。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3220324

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档