-
感谢
-
对于串口接收指定数量的字符,可以采用串口DMA环形接收数据模式,触发接收数据中断,利用队列来处理数据。综合了各项的优点,可处理大量数据,就是代码复杂一些
-
根据官方教程
portYIELD_FROM_ISR()是用于ISR请求任务切换的宏,在较新的端口中还提供了portEND_SWITCHING_ISR()。
如果这个宏的参数位pdFALSE(zero),那么任务切换将不被请求,如果为pdTURE则请求任务切换,并且处于运行状态的任务可能切换,中断将总会返回到这个运行状态的任务,即使处于中断执行时运行状态的任务也会切换。
-
running task 在使用xTaskDelay()会发生任务切换,原任务变为 blocked task,系统会切换到ready task中最高优先级来执行,那么我觉得引起延时的原因有以下几个方面
没有抢占式调度时可能是因为存在硬件中断处理时间过长抢占式调度则可能是被更高优先级的任务抢占,使得CPU被占用,延时超时。
另一方面是由于采用时间片轮流调度,被同优先级的抢占,但是需要到时间片末尾切换,当然还有可能是因为中断
-
以巡检机器人为例,软件系统主要由以下系统组成:运动控制系统,通信系统,传感器系统和供电系统,不同系统之间也存在着联系,如何合理分配系统资源需要借助实时系统,不然很可能像一团乱麻。其中远程通信控制机器人运动,需要传感器系统获得数据经过通信系统上传,这个通信过程需要等待,处理器就不能处理其他事情,特别容易出错,需要借助实时系统控制