rt_thread的事件收到后的解析有两处不清楚的地方,验证了一下:
1、有两个事件同时触发,事件解析能用switch吗?
触发了一个事件就直接去处理(事件处理线程(优先级3)的优先级比当前线程(优先级5)优先级高,所以跳出去了),处理完了再回来,那在中断中触发事件会跳去处理吗?硬件中断的优先级比线程高。用switch有风险,当两事件频繁触发时可能同时到,就分不开了,还是要用ifelse。
2、一个事件没处理完,不响应另一个事件?
是的。
触发事件:
事件解析:用的switch
结果:
此时是在执行此函数时加了个延时,所以跳去触发线程继续往下走往串口发送了send flag,然后又去下发CAN指令。
将事件解析线程优先级改为5,触发事件线程改为3,看下图说明是先执行两个触发事件后,再去解析线程。说明线程优先级会影响事件的响应。
1)分别触发,在解析时是依次解析
2)同时触发,在解析时收到的是两个标志位同时置1,此时就不能用switch了。因为收到的是30000,case 1000肯定不执行。
3)当触发线程优先级比解析事件线程优先级高时,在触发线程执行到延时时才跳出去。