msOS的分层设计
msOS很重要的一点是,分层设计,各个模块独立运行。msOS总体分为两个层,App应用层,System系统层,
1. App 是应用层,存放具体项目的需求,
2. System 是系统层,提供各种应用接口, 支撑应用层运行。
System 下一般包含三部分: Device、 OS 及 GUI,也可以扩展其它的中间件,比如 Modbus、 PID 等。
1)Device 是设备层,为 OS、 GUI及 App提供底层设备接口,它包含了 ST 提供的硬件驱
动标准库。
2)Drive 是驱动层,包含了ST 提供的硬件驱动标准库。
底层Device和App顶层的联系主要靠抛消息和系统节拍。
对于msOS的这样的分层我是把它理解为一个公司管理。App应用层是公司的管理层,管理层包括公司经理什么的在内,就相当于App层中包含了Logic.c,menu.c等,而System相当是公司的主管,而device以及drive相当于公司的员工,在生产的第一线。
那么员工与公司上层的联系有一般通道和特殊通道,相当于msOS的抛消息和系统节拍。抛消息就相当于一般通道,不需要马上处理的,例如:公司员工需要买一批工具,替换掉旧的工具,那么,员工将申请书交到主管哪儿,相当于消息抛到系统层,主管接收申请书,先放在办公桌,排着队,因为不止一个员工有申请,相当于消息放在消息队列,msOS过程就是---抛消息到系统层,消息存放在消息队列。公司经理会从主管哪儿不定时取出申请书等材料,让助理把材料分类;msOS过程就是---在大循环将消息队列的消息取出,把消息分为消息类型和消息值。
系统节拍就是特殊通道,系统节拍每隔一定的时间扫描一次,比如0.1ms扫描一次。我把他理解为,公司有这么一个员工—名字叫节拍,每天节拍定时去车间看看其他员工有什么需求,能马上处理的处理的他就马上处理,比如:某员工需要一把扳手,员工节拍来了,发现他有这么一个需求,节拍带有扳手,那么他就直接给处理了,如果是节拍发现这个员工需要的是新购买一台大的机器,那么节拍只能是将申请书提交给上一级,等待经理的处理。那么msOS这一过程就是:把要处理的函数放到系统节拍中,如果不占用系统节拍太多时间,处理时间小于下次节拍到来的时间的话,比如更新几个数值,那么就给节拍直接调用处理函数处理,如果是,处理时间超过下个节拍到来的时间,那么就转到抛消息,把消息抛到大循环中处理。
msOS分层明确,各层有各层的功能,App应用层可以直接调用device底层函数,但是device底层不能越级直接调用App层的函数,App.h头文件也不能包含到device底层中。