找回密码
 立即注册

QQ登录

只需一步,快速开始

开启左侧

[M051] 基于事件驱动类模拟操作系统OSAL

[复制链接]
yuleying 发表于 2016-10-12 20:35:44 | 显示全部楼层 |阅读模式
EventDrivenClassOSAL详解
前言
什么是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部得更简洁.
     感谢业界各位朋友提供宝贵的意见和建议.
声明:
     文档中部分见解属于个人见解,未经过验证(如:OSAL定义),如果错误敬请谅解,欢迎批评指导.
源代码下载:
作者:余乐瀛
QQ:470284225
技术讨论群:413012273
EMAIL:yuleying@126.com

概要:
     OSAL由”任务Task”,”事件Event”,”定时器Timer”,”队列Queue”组成.
     任务:
任务通常指所接受的工作,所担负的职责,是指为了完成某个有方向性的目的而产生的活动。
任务一旦被创建就会一直存在,因为考虑系统设计的原因,没有删除任务,只要没有消息触发任务,那么任务就不会运行.
     事件:
事件一般是临时突发的,不可预期的,需要快速响应处理的一类活动,事件与项目,任务的显著区别就是事件是没有明确的目的的,完全不可预期。
事件的显著特性就是其临时性和突发性,可能并不会经常发生,只是偶然性,以致不可预期。
事件可以是即时事件,也可以是延时事件,任务创建后只会运行一次,如果希望事件能各周期运行,那么只需要在事件运行时,重新创建一次就行.
事件在未执行时再次被创建时,系统不会再次创建一个新的事件,而是将已经创建但未执行的事件延时重新设置.
事件在未执行前可以被清除.
     定时器:
     定时器属于用软件实现了不同的硬件定时器;定时器基于系统定时器(TICK)来运行的.
     定时器一旦被创建将会周期性自动运行,不需要重装初值,直到被删除.
     如果需要一次性定时器,推荐使用事件来完成.
     由于定时器是在中断里面完成,所有定时器处理的事件不能太久,以免影响系统的正常运行.
     队列:
     任务创建时已经为任务创建一个队列来传递消息给任务.
     用于如果需要自定义不各种格式的队列,可以自行创建.


OSAL_EventDrivenClass_V0.5_ARM-M0.rar

328.55 KB, 下载次数: 1111

模拟操作系统

EventDrivenClassOSAL详解-作者-余乐瀛.rar

23.56 KB, 下载次数: 1193

系统说明

回复

使用道具 举报

hemingxian 发表于 2016-10-27 22:00:56 | 显示全部楼层

请教,我改的对不对

本帖最后由 hemingxian 于 2016-10-27 22:05 编辑

"事件可以是即时事件,也可以是延时事件,任务创建后只会运行一次,如果希望事件能各周期运行,那么只需要在事件运行时,重新创建一次就行."
可能是:
事件可以是即时事件,也可以是延时事件,事件创建后只会运行一次,如果希望事件能够周期运行,那么只需要在事件运行时,重新创建一次就行.
回复 支持 反对

使用道具 举报

冰破 发表于 2016-11-1 14:51:09 | 显示全部楼层
用过zigbee的协议栈开发产品,OSAL挺好用的,就是刚开始始比较难理解。
回复 支持 反对

使用道具 举报

 楼主| yuleying 发表于 2016-11-9 12:40:25 | 显示全部楼层
hemingxian 发表于 2016-10-27 22:00
"事件可以是即时事件,也可以是延时事件,任务创建后只会运行一次,如果希望事件能各周期运行,那么只需要在事 ...

整解,这里是笔误
回复 支持 反对

使用道具 举报

 楼主| yuleying 发表于 2016-11-9 12:46:10 | 显示全部楼层
感谢业界各位的朋友的建议,附件修改了0.5版本的一些BUG,主要是增加了读心写消息的临界保护

OSAL_EventDrivenClass_V0.6_ARM-M0.rar

1.63 MB, 下载次数: 975

EventDrivenClassOSAL详解-作者-余乐瀛(0.6).rar

25.15 KB, 下载次数: 956

回复 支持 反对

使用道具 举报

高级模式
B Color Image Link Quote Code Smilies |上传

本版积分规则

新唐MCU