打印
[DemoCode下载]

事件驱动类模拟操作系统OSAL

[复制链接]
3422|21
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
yuleying|  楼主 | 2016-10-12 20:42 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 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)来运行的.
     定时器一旦被创建将会周期性自动运行,不需要重装初值,直到被删除.
     如果需要一次性定时器,推荐使用事件来完成.
     由于定时器是在中断里面完成,所有定时器处理的事件不能太久,以免影响系统的正常运行.
     队列:
     任务创建时已经为任务创建一个队列来传递消息给任务.
     用于如果需要自定义不各种格式的队列,可以自行创建.

OSAL_EventDrivenClass_V0.6_ARM-M0.rar

1.66 MB

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

24.35 KB

沙发
捉虫天师| | 2016-10-12 23:29 | 只看该作者
ZigBee的协议栈,是个准系统的东西。

使用特权

评论回复
板凳
wahahaheihei| | 2016-10-13 14:54 | 只看该作者
事件驱动是不是就是相当于中断一样的,有了任务就加入系统执行。

使用特权

评论回复
地板
天灵灵地灵灵| | 2016-10-14 21:18 | 只看该作者
任务通常指所接受的工作,所担负的职责,是指为了完成某个有方向性的目的而产生的活动。

使用特权

评论回复
5
heisexingqisi| | 2016-10-15 21:39 | 只看该作者
定时器属于用软件实现了不同的硬件定时器;定时器基于系统定时器(TICK)来运行的.

使用特权

评论回复
6
dongnanxibei| | 2016-10-16 08:39 | 只看该作者
OSAL (Operating System Abstraction Layer),翻译为“操作系统抽象层”。OSAL就是一种支持多任务运行的系统资源分配机制。OSAL与标准的操作系统还是有很大的区别的。

使用特权

评论回复
7
yiyigirl2014| | 2016-10-17 11:03 | 只看该作者
OSAL适用于对实时性不严格,对产品成本严格控制,使用较低端的MCU的场景

使用特权

评论回复
8
wahahaheihei| | 2016-10-18 16:03 | 只看该作者
是不是用了这个系统,不能使用各种中断了、

使用特权

评论回复
9
yuleying|  楼主 | 2016-10-21 14:25 | 只看该作者
wahahaheihei 发表于 2016-10-18 16:03
是不是用了这个系统,不能使用各种中断了、

OSAL对中断没有限制,可以使用

使用特权

评论回复
10
yuleying|  楼主 | 2016-10-21 14:30 | 只看该作者
天灵灵地灵灵 发表于 2016-10-14 21:18
任务通常指所接受的工作,所担负的职责,是指为了完成某个有方向性的目的而产生的活动。 ...

对于专业术语描述不当的请谅解.
以下是网上对OS中术语解释:

blog.csdn.net/last_impression/article/details/7429043
14.任务(Tasks)
任务是OS中独立运行的单元。

使用特权

评论回复
11
yuleying|  楼主 | 2016-10-21 14:35 | 只看该作者
dongnanxibei 发表于 2016-10-16 08:39
OSAL (Operating System Abstraction Layer),翻译为“操作系统抽象层”。OSAL就是一种支持多任务运行的系统 ...

正解是"操作系统抽象层",但我认为对于新手来说不易理解,叫"模拟操作系统更容易理解.以机是**电子对TI,的BLE的OSAL解释:
5.3 E BLE 栈 协议栈 L OSAL  介绍
BLE 协议栈包含了 BLE 协议所规定的基本功能,这些功能是以函数的形式实现的,
为了便于管理这些函数集,BLE 协议栈内称为 OSAL (操作系统抽象层Operating System
Abstraction Layer), 并非真正意义上的操作系统)。
非计算机专业的读者对操作系统知识较为欠缺,但是 BLE 协议栈里内嵌的操作系统
很简单,实际上就是一个大的while(1)循环,读者只需要做几个小实验,会很快掌握整个
OSAL 的工作原理。
OSAL (Operating System Abstraction Layer),即操作系统抽象层,如何理解 OSAL
呢?
从字面意思看是跟操作系统有关,但是后面为什么又加上“抽象层”呢?在 BLE 协
议栈中,OSAL 有什么作用呢?下面将对上述问题进行讨论

使用特权

评论回复
12
yuleying|  楼主 | 2016-10-21 14:37 | 只看该作者
heisexingqisi 发表于 2016-10-15 21:39
定时器属于用软件实现了不同的硬件定时器;定时器基于系统定时器(TICK)来运行的. ...

实现方式是这样,只是定时器是在中断中回调的,所有可以看成多个硬件定时器

使用特权

评论回复
13
yuleying|  楼主 | 2016-10-21 14:45 | 只看该作者
这里引用一下**电子《1.BLE-入门与提高教程(2014.10.22)》的专业术语,本人并非高手,也是菜鸟一枚,之所以把源码贴出来就是希望有更多的朋友参与来讨论,能够从中学习,感谢各位的意见和建议.
5.3.1 L OSAL  常用术语
在讲解之前,先介绍操作系统有关的部分基础知识。
操作系统(OS)基本术语如下:
① 资源( (  Resource)
任何任务所占用的实体都可以称为资源,如一个变量、数组、结构体等。

② 共享资源( ( d Shared  Resource)
至少可以被两个任务使用的资源称为共享资源,为了防止共享资源被破坏,每个
任务在操作共享资源时,必须保证是独占该资源。
③ 任务 (Task)
一个任务,又称作一个线程,是一个简单的程序的执行过程,在任务执行过程中,
可以认为 CPU 完全属于该任务。在任务设计时,需要将问题尽可能地分为多个任务,
每个任务独立完成某种功能,同时被赋予一定的优先级,拥有自己的 CPU 寄存器和
堆栈空间。一般将任务设计为一个无限循环。
④ 多任务运行(k Muti-task  Running )
实际上只有一个任务在运行,但是 CPU可以使用任务调度策略将多个任务进行调
度,每个任务执行特定的时间,时间片到了以后,就进行任务切换,由于每个任务执
行时间很短,例如:10ms,因此,任务切换很频繁,这就造成了多任务同时运行的“假
象”。
⑤ 内核( (  Kernel)
在多任务系统中,内核负责管理各个任务,主要包括:为每个任务分配 CPU 时
问;任务调度:负责任务间的通信。内核提供的基本的内核服务是任务切换。使用内
核可以大大简化应用系统的程序设计方法,借助内核提供的任务切换功能,可以将应
用程序分为不同的任务来实现。
⑥ 互斥( ( l Mutual  Exclusion)
多任务间通信最简单,常用的方法是使用共享数据结构。对于单片机系统,所有
任务都在单一的地址空间下,使用共享的数据结构包括全局变量、指针、缓冲区等。
虽然共享数据结构的方法简单,但是必须保证对共享数据结构的写操作具有唯一性,
以避免不同任务对同一个数据操作引起不同步从而数据出错。
保护共享资源最常用的方法是:
·关中断;
·禁止任务切换;
·使用信号量。
其中,在 BLE 协议栈内嵌操作系统中,经常使用的方法是关中断。
⑦ 消息队列( ( e Message  Queue)
消息队列用于任务间传递消息,通常包含任务间同步的信息。通过内核提供的服
务、任务或者中断服务程序将一条消息放入消息队列,然后,其他任务可以使用内核
提供的服务从消息队列中获取属于自己的消息。为了降低传递消息的开支,通常传递
指向消息的指针。在 BLE 协议栈中,OSAL 主要提供如下功能:
·任务注册、初始化和启动:
·任务的同步、互斥:
·中断处理;
·存储器分配和管理。

使用特权

评论回复
14
Simon21ic| | 2016-10-21 14:53 | 只看该作者
其实事件驱动可以不需要RTOS,自己实现一个也可以,一样是多任务的,支持IPC,支持抢占,内核大概占有几百字节(cortexM):https://bbs.21ic.com/icview-1220954-1-1.html

使用特权

评论回复
15
643757107| | 2016-10-22 13:00 | 只看该作者
这个系统可以移植到别的单片机上?

使用特权

评论回复
16
wahahaheihei| | 2016-10-22 13:01 | 只看该作者
基于新唐NUVOTON M0-58MCU硬件平台,使用官方标准库,一个示例代码..这就是说可以移植被的单片机的

使用特权

评论回复
17
yiyigirl2014| | 2016-10-22 21:46 | 只看该作者
不知道TI现在还推广这个东西不推广了。

使用特权

评论回复
18
yuleying|  楼主 | 2016-10-23 09:40 | 只看该作者
643757107 发表于 2016-10-22 13:00
这个系统可以移植到别的单片机上?

可以,但我尝试过移植到8051,内存占用较太,最后放弃了,应该说移植到PIC的8位机,RAM在1K或者更多就可以,8051的RAM只要不是2个256B的应该就可以移植

使用特权

评论回复
19
yuleying|  楼主 | 2016-10-23 09:45 | 只看该作者
yiyigirl2014 发表于 2016-10-22 21:46
不知道TI现在还推广这个东西不推广了。

我写的这个并非移植的TI的OSAL,而是重构了的,相比TI的RAM占用要大一些,但不需要初始化OS,任务/事件/定时器,都是直接创建就能运行了.

使用特权

评论回复
20
天灵灵地灵灵| | 2016-10-24 20:41 | 只看该作者
BLE 协议栈包含了 BLE 协议所规定的基本功能,这些功能是以函数的形式实现的

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

2

主题

14

帖子

1

粉丝