本帖最后由 yuleying 于 2016-11-9 12:32 编辑
什么是OSAL: 目前本人已知OSAL概念是由TI公司在ZIGBEE协议栈引入,他的意思是”模拟操作系统”,此OS,并非一个真正的OS,而是模拟OS的一些方法为广大编程者提供一种写MCU程序的方法. EventDrivenClassOSAL: 是一个由事件驱动类的OSAL,顾名思义此OSAL完全由事件进行驱动,没有事件任务就没有事干,那么OSAL就会调度空闲任务,等待事件的发生. EventDrivenClassOSAL特点: 此系统完全由C语言编写,不会涉及汇编,摒弃了内存管理,链表等复杂的方法,且代码量非常少,整个系统不足1000行;适合初学者使用,内存占用小,也适用于各类MCU,不挑剔硬件平台,依耐于硬件的资源只需要一个定时器. EventDrivenClassOSAL适用性: 此OSAL适用于对实时性不严格,对产品成本严格控制,使用较低端的MCU的场景.可适于以上场景的用绝大部分应用.
关于内存占用情况: 基于新唐NUVOTON M0-58MCU硬件平台,使用官方标准库,一个示例代码(代码包括4个按键驱动示例程序,一个软件BUZZ驱动程序,2个任务,用来作按键消息分发和按键消息处理,可以说一个简单的应用已经完成80%.)内存使用情况如下: Program Size: Code=6132 RO-data=472RW-data=64 ZI-data=672 可以看出OSAL内存是占用远远于一般的OS,并且OSAL已经实现任务的消息队,列把任务/事件/定时器的堆空间已经包括,在写应用代码时不会在重复创建.
后续会补充一个基于8051的示例代码内存使用情况.
鸣谢: 特别感谢我的同事”罗天浩,LTH”提供了OSAL的部分框架,特别是万能的消息队列,使OS部得更简洁. 感谢业界各位朋友提供宝贵的意见和建议. 感谢“ Seven Pounds 反馈队列未进入临界保护等 声明: 文档中部分见解属于个人见解,未经过验证(如:OSAL定义),如果错误敬请谅解,欢迎批评指导. 作者:余乐瀛 QQ:470284225 讨论群: 413012273 EMAIL:yuleying@126.com 时间:20160926 概要: OSAL由”任务Task”,”事件Event”,”定时器Timer”,”队列Queue”组成. 任务: 任务通常指所接受的工作,所担负的职责,是指为了完成某个有方向性的目的而产生的活动。 任务一旦被创建就会一直存在,因为考虑系统设计的原因,没有删除任务,只要没有消息触发任务,那么任务就不会运行. 事件: 事件一般是临时突发的,不可预期的,需要快速响应处理的一类活动,事件与项目,任务的显著区别就是事件是没有明确的目的的,完全不可预期。 事件的显著特性就是其临时性和突发性,可能并不会经常发生,只是偶然性,以致不可预期。 事件可以是即时事件,也可以是延时事件,任务创建后只会运行一次,如果希望事件能各周期运行,那么只需要在事件运行时,重新创建一次就行. 事件在未执行时再次被创建时,系统不会再次创建一个新的事件,而是将已经创建但未执行的事件延时重新设置. 事件在未执行前可以被清除. 定时器: 定时器属于用软件实现了不同的硬件定时器;定时器基于系统定时器(TICK)来运行的. 定时器一旦被创建将会周期性自动运行,不需要重装初值,直到被删除. 如果需要一次性定时器,推荐使用事件来完成. 由于定时器是在中断里面完成,所有定时器处理的事件不能太久,以免影响系统的正常运行. 队列: 任务创建时已经为任务创建一个队列来传递消息给任务. 用于如果需要自定义不各种格式的队列,可以自行创建.
|