gpt4 book ai didi

c - Dynamic C/Rabbit 上的 Micrium uC-OS/II - 可能有任务饥饿

转载 作者:太空狗 更新时间:2023-10-29 15:20:54 25 4
gpt4 key购买 nike

我正在尝试让 2 个任务在我的 Micrium uC-OS/II 下的 Dynamic 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();
}
}

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

最佳答案

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

要么尝试让串行线程成为系统中优先级最低的线程,要么在它的代码中加入一些东西,让它放弃对 CPU 的控制。 (例如,当没有字符可用时等待信号量,您可以从数据可用中断中发布哪个信号量。)两者都应该有效。

关于c - Dynamic C/Rabbit 上的 Micrium uC-OS/II - 可能有任务饥饿,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3220324/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com