开启辅助访问 切换到窄版

楼主
跳转到指定楼层
| 只看该作者 回帖奖励 |倒序浏览 |阅读模式
1 为什么使用RTOS

嵌入式,最开始学习的时候,都用裸机编程,主要是熟悉怎么操作硬件电路。而在商业产品中,裸机程序是很难满足要求。当前的电子设备中,可能涉及到网络模块、蓝牙模块、定位系统(北斗/GPS)、陀螺仪、摄像头等,这些系统都需要实时响应,使用裸机编程,内部进行轮询,随着业务复杂度增加,写出来的程序将会出现各种漏洞,程序没有崩溃,人先崩溃了。使用操作系统后,对于复杂系统,仅需要关注业务实现和业务间的同步和通信。同时,使用操作系统,也有利于进行团队协作。大型的嵌入式项目,有良好的架构设计,和服务器编程(java/C++)类似,有利于代码的可读性和扩展性。
我也写过一些低端的嵌入式程序,曾经做过一个充电管理芯片编程,使用台湾的一款8位芯片,内存和运输速度极小,有部分还需要使用汇编编码。功能就是使用两个ADC管脚,采集电压,充电不同阶段,控制一个二极管以不同颜色和闪烁频率通知。这种嵌入式就只适用裸机编程,功能单一,对芯片成本极为敏感。即使是如此简单的功能,新手和老兵写出的代码可读性和健壮性还是差很多。老兵写出的代码,会带有部分操作系统多任务风格。同时可以充分利用芯片的性能和特性,增加一些辅助功能,比如为每个设备设置唯一电子编码、完成多种警示灯功能等。
使用操作系统的好处就不多说了,现在物联网设备越来越多,对于嵌入式的要求也越来越高,就像智能手机发展过程中的安卓系统。国内主流的系统有AliOS,华为liteOSuCOSRT-ThreadFreeRTOS等。前两者在围绕的自有的生态进行大量扩张,提供了大量的适配自有功能的组件,作为开源免费系统,正在对uCOSFreeRTOS(亚马逊)市场形成很大威胁。


2怎么选择RTOS

使用哪个RTOS,完全就是一个偶然结果。最开始学习的是uCOS- II,不过都是N年前的学习的,对其中的基本盖宁还有印象,当时使用的IAR软件,自己也没有去裁剪内核,都是从老师的工程里直接拷贝的,按照老师的教学过程一步一步编写了几段代码实现最简单的按键、流水灯等,也接触到了一些名词,比如任务、信号量、队列、动态内存、阻塞态、就绪态、抢占式、优先级、时间片、钩子函数、IDLE任务、TICK任务等。有了这些基础,对自学其他操作系统有了很大帮助。
在实际商业工程中选择RTOS需要谨慎选择,当前国内公司对版权越来越重视,所以需要在一开始就要规避一些商业风险,之前在网上看了很多介绍,最后还是选择的FreeRTOS,其实原因就两个,一是免费,二是网上的资料多。uCOS在商业使用上存在风险,国内的RT-Thread在文档资料上要逊色一点,因为用户很多是中国人,英文资料比较少,当时也没有深入了解过,后来深入读了官网的文档,觉得也很不错,有很多实用组件。我使用的是STM32的芯片,这个芯片在官网上对FreeRTOS的支持更多,其中在cubemx中直接集成,这样对推广该系统有很大促进。对于一个初学者,学习uCOS是一个比较好的选择,毕竟该系统发展更成熟,实用案例更多。学习了uCOS,再学其他的系统,基本都是手到擒来。


3 学习RTOS

AliOS和华为LiteOS在行业里发展很快,有专业团队做技术支持,借鉴了uCOSFreeRTOS的成功经验。而个人建议从uCOS或者FreeRTOS学起,毕竟有大量的参考资料和开源示例代码,而前两者多是商业项目采用,社区论坛还有待积累,从成熟系统学起,有利于快速上手。
对于学习RTOS,个人的经验是,要动手操作,不要局限于一些暂时难以理解的概念和名词。
上手一个RTOS,掌握如下几个基础操作,就可以自己上路,去打怪升级了:

  • 多任务
  • 信号量/事件组
  • 队列
  • 通知
  • 任务调度
  • 定时器
  • Tickless
  • 内存管理
这些基础功能理解后,再去掌握高级功能,需要深入的读专业书籍和走读源代码,同时需要不停的学习。


4 示例程序

github地址: http://github.com/tracediary/FreeRTOS-STM32L1
说明:因为网络上大量使用的是STM32F1xx系列产品,物联网的发展对于设备的功耗要求越来越敏感,我选择了一款低功耗产品,STM32L1xx,此系列在网络上示例源码较少,上传此示例,仅供参考

硬件电路说明
管脚
功能
PB5
LED
PA10
USART1-TX
PA9
USART1-RX

示例程序说明
名称
功能
multi-tasks
多任务创建
delete-task
删除任务
supendresume-tasks
挂起/恢复任务
binarysemaphore
二值信号量
countsemaphore
计数信号量
mutexsemaphore
互斥信号量
eventgroup
事件组
taskNotify
任务通知
timer
定时器
tickless
低功耗
interMemory
内存管理
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

快速回复 返回顶部 返回列表