第33章 收集第二颗龙珠
RT,对应real time。
顾名思义,RT就是实时。
当一个人同时干几件事的时候,光保证每一件事都会被执行那还不行。
陈星看到此处已经意识到:如果小车的差速控制任务执行的慢一些,而让无关紧要的日志记录任务霸占位置,那这显然不合理。
自然而然,他就看明白了“任务抢占”的概念。
一句话:事有轻重缓急。不可能所有的事情都同样对待,肯定是哪件事情急迫先做哪件。
假如当小车前方一米距离突然出现障碍物,这个时候如果自动避障任务执行不及时,显然就会一头撞过去。
所以,任务天生就有优先级之分。
而保证任务能被及时执行,这就是RT的概念。
概念很好理解,而实际掌握却还有一段路要走。
AR适时列出了RTOS的核心特性。
【任务管理、时间管理、内存管理、通信机制、中断管理、可扩展性。】
单片机终究不是人,而是只会执行指令的冰冷芯片。所以不可能通过它的自觉来完成任务。
光有【任务调度】功能还不信。单片机又没带手表,自然需要【时间管理】来为其提供时间参考。
而每个任务其实都是一段程序,而每一段程序都需要运行在内存之中。但内存是有限的,所以就需要把有限的内存分配给需要的任务。在该任务用完之后,还要把任务用完的内存回收过来。因而【内存管理】不可或缺。
单片机不像人一样有眼睛,任务执行完成没有,它没法自己发现,这时候就需要任务与操作系统交互,【通信机制】就应运而生。且不同任务之间还需要交互,比如自动避障任务检测到障碍之后,肯定要通知控制方向的差速任务。这时候也会用到【通信机制】。
【中断管理】则是贯穿于RTOS的始终,比如:测距模块反馈距离数值,单片机不可能一直等着测距模块告诉自己。就好比老板不会一直守在员工身边要工作成果。而是得员工完成以后主动上报。
而这个主动上报的行为就可以理解为【中断】,顾名思义:单片机收到了一个新的事件,当前执行的任务被中断。进而再根据实际情况调整任务执行策略。
好在陈星眼下只需要考虑智能小车这一个项目,他还不是真正的开发人员,不需要考虑到今后还会不会要开发其它的作品。所以【可扩展性】这一块内容他不需要关心。
眼下他根本不需要考虑将RTOS适配多个硬件平台,也不需要掌握RTOS的功能裁剪。他只需要关心一点--让RTOS跑起来。
看到这里,RTOS的所有核心概念,陈星已然掌握。但接下来马上又面临新的问题。
RTOS其实是一个统称,就好比汽车一样。决定要开汽车,接下来就是选择具体某个品牌和型号的汽车。
RTOS的核心概念就和汽车的核心三大件一样,原理都是共通的。
2007年的当下,所有的汽车都离不开底盘、发动机、变速箱。
但是,就如同买汽车一样。并非是了解了底盘、发动机、变速箱这三大件就知道选哪个牌子的汽车。总还得考虑自己的使用场景,和自己的钱包。
选RTOS也是一样。适用,才是第一位的。
摆在陈星眼前的选择有以下几个:
VxWorks。NASA火星车同款RTOS,用过的都说好。奈何,贵。还不是一丁点的贵。用盗版?这显然风险太大。
虽然陈星认为软件用于教育就该免费,世界IT领域的共识也是如此。但是这竞赛官方都能把一个代码调试器卖到500块,鬼知道到时候会不会拿盗版说事。
保险起见,陈星哪怕是用盗版的代码调试器,但也不能用盗版的RTOS。因为RTOS是整个智能小车项目的一部分,但调试工具不是。调试工具好比菜刀,而RTOS是一道菜的佐料,是要跟着菜品一块上桌的。
当然,此时陈星使用的代码调试器是ST官方提供的,其实并不存在盗版问题。
排除VxWorks,ST官方推荐的是ucos。而陈星自己还查到了一款刚出的国产RTOS--RTthread。
IT领域国产的东西可不多,毕竟近代工业革命就没有海棠国什么事。从几次工业革命一直延伸到信息革命,海棠国的话语权一直都很小。以至于IT领域的各种产物,从编程语言到开发环境,再到芯片,眼下几乎都被国外垄断。
因而陈星对于这个国产的独苗很是好奇,他特地去RTthread官网看了下。
作者说创作RTthread的初衷,是因为对眼下的小型RTOS现状的诸多不满。要么不好用,要么商业收费还死贵。所以怒而自己开发了一个。
这让陈星非常佩服,但佩服归佩服。陈星仔细考虑后,还是放弃了采用RTthread。因为RTOS大量的移植和适配问题,他此刻还没信心能够解决。
所以陈星只是在RTthread官网留言:“来自一个高三学生的敬仰,加油。”他只能从精神上支持下了。
理想总得向现实低头。这是没有办法的事情,连海棠国都这样。国家尚且如此,更何谈个人。
陈星随后总算查到了一个完全免费又成熟的RTOS--FreeRTOS,这名字中带free,一看就是免费。
但尴尬的是,兴许是因为ST的32位单片机刚刚推出市场,陈星找了一圈也没找到FreeRTOS针对ST单片机的移植版本。最终还是因为移植的问题搁浅。
陈星最后选择了ST官方推荐的ucos。只因为这是ST官方已经移植好的。
陈星仔细评估了移植一款RTOS的工作量,为此甚至把AR都召唤了出来。AR给出建议也是不要自己去移植。
最终,陈星选择了ST官方移植好的ucos-II。
陈星看着AR给出的扫描结果。
【ucos-II。教育用途免费,商用收费。项目地址:
最终他还是无法完全绕开版权问题,陈星当即把AR给出的ucos项目地址输入进游览器,找到ucos的开源协议并仔细查看。
好在ucos采用的是“伯克利软件分发协议(BSD协议)”,明确写明了:教育用途免费,商用才收费。
陈星当即下载了一份协议作为备份,有备无患。
之后陈星又跑了几个例程,把RTOS的几个核心概念都测试了一遍。
最终,AR给出了结果:【8,掌握RTOS(已完成)】
依然是没有任何积分奖励,也没有奖励许愿机会。但好歹陈星完成了第二个知识点,相当于拿到了第二颗龙珠。