总述
对于较为复杂的应用开发,还是使用RTOS比较好。RTOS一般都集成了线程管理、线程同步、共享资源保护等功能模块。使用RTOS能够方便的管理多个功能模块,并且发挥CPU的最大资源使用(无时无刻的进行着任务的切换与运行)。
RTOS对比
名称 | 简述 |
---|---|
RT-Thread | 国产开源RTOS,生态组件很多(GUI、IDE等),文档丰富,对于国内开发者比较友好,支持POSIX接口 官网 |
FreeRTOS | 比较经典开源的RTOS,使用很广泛,组件较少 |
UCOS | 早期的商用付费RTOS |
RTOS基础讲解
RTOS绝大部分的代码实现主要围绕在任务的切换以及最高等级任务的查找,任务的切换主要实对任务上下文(一些不能自动保存的寄存器)的保存与恢复,保存的位置就是创建任务时的堆栈。而任务切换的时间就是由内核的心跳——定时器确定的,每次心跳来临时,内核就会查找有没有高优先级任务就绪(一般任务是由一个链表串起来的),如果有则进行切换。对于同等级的任务,会进行同等时间片运行切换,也就是说A运行一段时间B运行一段时间(一般同等级的任务位于同一个表)。
使用RTOS注意防止死锁,对于多个任务使用同一个锁时要即时释放锁
优先级反转是高优先级任务等待资源时产生的
任务创建时要考虑内存资源的分配,任务里一定要有释放运行权操作
互斥锁用于资源共享,一般具有优先级继承功能
信号线用于任务间资源同步
总结
RTOS具体使用要考虑实际开发是否需要,毕竟RTOS对资源具有一定的占用,简单的程序开发使用状态机足矣。没有最好的,只有最合适的,不然Linux早就全部占领嵌入式开发了。