对于stm32这类cpu来说,没有MMU意味着不能使用linux,即使勉强上ulinux也非常吃力。目前的现状是各个cpu系列的编程区别甚大,另一个问题就是代码复用率太低了。基本上每做一个项目或工程都需要重新移植驱动代码,或多或少的都得重新做驱动适配等重复性工作,况且,此类情况带来的另一个严重问题是代码接口前后不统一,试想,很多人对于同一个外围器件比如最简单的DS18B20,在不同的CPU上写出了几个版本的驱动程序,由此带来的问题是,产品的业务代码将会变得难以维护,因为驱动层的访问接口不统一,导致业务层代码的复用率就更加的低下了。
再者,对于Linux系统之所以代码利用率非常高(有非常丰富的系统库和三方库)就是因为其系统具有层的概念,各层之间相互协调工作,通过系统提供的层间接口统一访问不同层之间的代码,如:应用层操作硬件的时候面向的是驱动层,并不直接操作具体的硬件寄存器等。即可做到很好的层间代码解耦。应用层程序员甚至不需要具体的硬件型号是什么,只需要遵守系统或框架提供的层间访问接口即可轻松的完成硬件操作。
但是,目前在STM32之类的cpu中并没有一个合适的类似Linux的系统或框架来支撑我们的产品快速迭代和开发,以此来降低产品开发的难度和提高代码利用率降低时间成本。
鉴于以上情况,本人在参考linux一些理论的情况下编写出嵌入式VFS异步事件框架,具有以下特点:
1.多平台适配,可以经过适配不同的RTOS和不同的CPU。目前支持STM32全系列,其他的不爱搞。
2.提供一个异步事件驱动框架,通过注册事件,将会以线程级异步回调注册事件的回调。
3.提供常用的内核定时器驱动,信号驱动,延时信号驱动,SIM800驱动,IIC核心,SPI核心,串口驱动,多线程日志输出等。
4.提供统一的应用层访问接口,框架向上屏蔽硬件细节,向下屏蔽cpu差异。
5.框架内核运行时异常和错误捕捉
6.集成丰富的三方库,TEA加密,BASE64,YMODEM,VSPI,NANOPB,BOOTLOADER,通用数据传输流协议WDATA等。
7.提供统一的片内FLASH访问系统。
8.提供功能强大的SHELL交互式接口
9.提供一个内置的动态代码载入器,简单说就是可以像安卓一样安装APP,运行多个APP,也可随时关闭APP。
。。。。。。还有很多,上图看看代码例子吧!!
RTC访问:
此代码是SHELL系统中RTC异步调回,用于从基于串口的SHELL系统操作RTC....
SHELL交互式系统:
暂时就这些了,不爱写了,玩去......