FreeRTOS滴答
FreeRTOS需要有一个时钟参照,并且这个时钟不会被轻易打断,所以最好选择systick
为什么需要时间参照
就是在高优先级任务进入阻塞态后,也可以理解为进入delay()函数后,需要有一个时间参照,就是需要计时,看是否delay函数结束,这就是为什么需要systick。
上下文切换
上下文就是代码的执行状态(就是这段代码有没有执行过)
还有一些变量数据,比如a=1;这种变量。
任务的切换
当任务A需要切换时,就需要此刻保存任务A的上下文,就是数据,执行到哪一行等
那么,怎样进行保存任务的这些数据呢?
我们都知道,任务都是在CPU中运行,而CPU中有许多寄存器,而在任务A执行的情况中,CPU中所有的值都为任务A的,
而每个任务都有一个属于自己的任务栈。
所以,任务A在切换的途中,就会将自己所有在CPU中的数据都拷贝到任务栈中。
任务切换时,CPU中只保存任务的指针,而数据都拷贝在任务对应的栈中。
当任务被恢复时,CPU直接利用指针来查找相应的数据栈
后将数据恢复到CPU中。