EDA365电子论坛网

标题: 在学习使用 SMALL RTOS 时发现一个 BUG [打印本页]

作者: Maskman    时间: 2023-1-9 09:59
标题: 在学习使用 SMALL RTOS 时发现一个 BUG
最近在学习使用 SMALL RTOS 时发现一个 BUG。任务在调用系统等待函数 OSWait(K_TMO | K_SIG,x) 后,不能在延时 x 个 ticks 后被唤醒。分析了一下原因如下: * E1 e. L' r- l) T" ^# {
在 OS_CORE.C uint8 OSWait(uint8 typ, uint8 ticks) small 中,
" m4 V) e" y) hcase (K_TMO | K_SIG): 中执行了函数 OSTaskSuspend(OSTaskID);
0 Z4 T, U! l+ b! H5 J1 ?5 l( OS_CORE.C 第 549 行)而此函数将延时值改为了 0! $ Y! Z7 m  E5 o0 B$ N" R7 A

. V: r1 s$ G# S6 Z: E+ n, m# b
作者: Ele_insect    时间: 2023-1-9 10:52
将此函数改用另一个函数 OS_TaskSuspend(TaskID); 并在其后加入任务切换函数 OSSched(); 便能工作正常。
作者: 风吹过后    时间: 2023-1-9 13:24
假设编一个串行通信程序,通信协议为:数据包长度为 NBYTE,起始字节为 STARTBYTE1、STARTBYTE2,最后一个字节为校验和,中间不可能连续出现 STARTBYTE1、STARTBYTE2。




欢迎光临 EDA365电子论坛网 (https://bbs.eda365.com/) Powered by Discuz! X3.2