物联网实时操作系统一般由如下组件构成:
架构无关功能
多任务调度
多任务通信
堆内存管理
定时器
中断抽象
c库
通讯协议栈
文件系统
其它
架构相关
核心启动代码
核心外设驱动
特定外设驱动
电源管理
由于mcu应用场景的特殊性,硬件上的定制要远远大于pc的x86cpu。造成了在一个特定mcu芯片上实现完整的操作系统功能几乎不可能。
mcu操作系统移植分几个层次,首先是核心芯片启动代码的移植,实现能够跑核心的操作系统功能,如中断向量、时钟等。其次是核心外设的驱动移植,比如UART用来调式,还有其它核心设备驱动,如i2c、spi等。最后是基于核心外设实现的特定外设驱动代码,如基于spi的flash移植。
其中造成很难有统一操作系统编程模型的原因是管脚复用,mcu的管脚为多组gpio,根据需要复用为多组i2c、spi等外设,使用哪组同样功能的外设实现该功能在设计电路图时是不确定的。因此,移植中很重要的一点是在通用外设驱动前确定管脚的复用情况。