关于系统定时器超时处理函数rt_
timer_check,V5.1.0版本和原来v4.1.1版本有个区别在于,进入超时回调函数t->timeout_func(t->parameter);之前,是否要开启系统中断,V4.1.1版本保持关闭,v5.1.0版本开启了中断:
v5.1.0

v4.1.1

我在某个串口任务实现当中,使用了信号量的机制,在串口接收中断当中,释放了信号量,激活任务。由于串口接收中断优先级高于系统定时器中断优先级,如果按照v5.1.0版本,执行t->timeout_func(t->parameter);之前,先开启系统中断,就会遇到任务调度上的相互竞争问题:串口接收中断先释放了信号量,激活了任务,后续立刻执行t->timeout_func(t->parameter);触发了定时器超时回调函数里的断言。请问大家,这个问题有何解法?
RT_ASSERT((thread->stat & RT_THREAD_STAT_MASK) == RT_THREAD_SUSPEND);

以下是我的测试过程
1.串口中断触发,IO1输出高电平,退出中断,输出低电平
2.进入超时函数t->timeout_func(t->parameter)前,IO2输出高电平,函数执行后,输出低电平
3.从下边图片看出,IO2拉高后,电平一直为高,是因为进入了断言,原因是任务以及激活