01-中断API与任务API
包括中断版本和任务版本,如下
各自独立出来的原因:任务可以阻塞,但是在中断不能有太多延时,必须尽快完成
特殊之处在于:中断版函数后还有一位参数,即此函数是否会调度更高优先级的任务(任务和中断有优先级划分吗),若是有,则将其记录下来,在函数执行完毕后再调度此高优先级任务。而再任务版函数中,则是直接调度,一方面可能占用性能,另一方面,高优先级任务可能导致卡死,不能接着进行下去。
02-实时性优化
在任务执行过程中,若发生中断,则立刻执行中断。若是在中断中写队列且队列唤醒了更高优先级的任务,则系统仍然运行之前的任务,直到运行到下一次tick,系统重新调度到更高优先级的任务。这里产生了高优先级任务的一定延迟,可以通过以下方法优化
调度后,高优先级任务立刻执行,不会有任何延迟。
03-互斥量等安全的本质
相比于全局变量,互斥量更加的安全,其主要原因就在于,freertos系统中,全局变量计算容易被打断,而互斥量计算则不会被打断。不会被打断是因为,在调度过程中,他首先关闭了所有中断和任务调度,在完成计算后才会恢复调度,所以,IIC等过程并不唯一需要互斥量,可以用关闭调度器的方式来代替。
04-逐个优化栈空间的大小
05-统计所有栈空闲情况
打印出的效果如图
只需要
其中,函数的参数负责存放系统任务的信息
06-统计所有任务占用cpu资源的情况
将 02 的函数换成下面这一个就行了
效果如图