【 在 Oriphia 的大作中提到: 】
: 这说法有问题,xsemaphoregive是立即调度,但xsemaphoretake不一定是,而且大部分应用都不是立即调度。
: 比如串口通信中信号量的timeout绝大多数情况是portmaxdelay,这就一定是在tick调度中被唤醒的。
: 所有的数据通信函数默认都是阻塞函数,阻塞链表进出肯定在tick任务调度里完成的。
: ...................
串口通信线程(任务),以接收为例,一般都是semTake,处于阻塞状态。
来了串口接收中断,中断程序里会semGive。退出中断的时候,系统会执行reschedule,如果串口接收任务优先级最高,那立马就执行开始读接收到的字符,和系统tick调度无关。
--
FROM 123.123.253.*