OSAL架构
OSAL操作系统最多可以支持16个任务,由任务功耗管理PwrMgr_task_state变量可知,而OSAL每个任务最多只能支持16个事件处理,理论上最大可以执行256个事件处理。
对于一些运算能力不强,内存空间不大的处理器最适合不过了。
OSAL实际上不是一个真正意义上的操作系统,在加上它最多只能处理16个任务,所以OSAL没有像其他操作系统一样有复杂的任务调度算法,每个任务都是有序轮流执行。OSAL的任务管理代码主要在OSAL.c中。
1. CC254x的软件基于OSAL架构
2. OSAL并非一个真的操作系统, 而只是让软件设立一个事件的执行方法(setup excution of events)
3. 每一个子系统都在OSAL的一个任务(task)执行并由一个独立的task id.
4. task id越小, 优先级别越高
5. SimpleBLEPeripheral项目有12个任务: Link Layer, HAL, OSAL Callback Timer, L2CAP, GATT, GAP, SM, Peripheral Role Profile, GAP Bond Manager, GATT server, SimpleBLEPeripheral.
6. 每个任务由两个函数(function): 初始化, 比如SimpleBLEPeripheral_Init(), 跟事件处理, 比如SimpleBLEPeripheral_ProcessEvent();
7. 每个应用程序都要包含一个void osalInitTask(void)函数
8. 这个函数会调用每个任务的初始化函数来初始化任务.
9. 每个应用程序都要使用一个叫tasksArr的数组, 包含每个任务处理函数的指针.
10. 数组的顺序必须跟task ID的顺序一致.
11. 应用程序还应该产生一个名为tasksEvents的全局变量, 用uint16来对应每一个发生的task event, 对应的位置1标示发生了特定的event
12. 一个OSAL event事件是一个将来执行的task的标志
13. 每一个OSAL任务可以定义多达15个event
14. 两个方法设置event:
a: osal_set_event(), 立即设置一个event
b: osal_start_timeEX(), 安排若干时间(以ms为单位)后发生一个event, 可通过osal_stop_timeEX来取消.
15.看下面的图就明白了, 每个task有15个标志位去标志每一个event是否发生.

主循环:
1. 当osal_system_start被执行后, OSAL会进入主循环
2. 在循环中, 会不断检查taskEvents数组是否有位被置1, 如果有不同的task被发现有event需要处理, 则先处理task id优先级高的.
3. OSAL会用event处理指针的方法去处理对应的event
4. 当event处理方法执行完, 应该讲对应的event标示位置0, 不然这个方法会被重复执行.
5. 如果没有任务需要执行, OSAL会进入省电模式(power saving mode), 但是内存依然有电, 而且计时器也在持续运行.
6. 当中断发生时, 或者OSAL计数器定义的倒数时间到了, 处理器会被唤醒.
消息处理:
1. OSAL提供了消息处理机制来让不同的子系统之间传递数据.
2. 消息可以是任意类型数据, 任意长度.
3. 发送消息的程序是:
a: 用osal_msg_allocate()分配内存
b: 将数据拷贝进内存
c: 使用osal_msg_send()指定目标任务
4. 任务利用SYS_EVENT_MSG标示来发现待处理的消息
5. simpleBLEPeripheral_ProcessOSALMsg()函数来处理消息.
6. 收到消息后要用osal_msg_deallocate()来释放内存.
内存管理
1. OSAL API使用内存管理的函数是: osal_mem_alloc与osal_mem_free
2. 堆的尺寸在IAR的compiler里面设置
3. 如果堆尺寸设置得太高, CC2540可能会内存泄露.
4. 确认编译完成后, map文件不能超过8KB限制.

文件与关键的API
1. 关键文件包括: osal.c, osal.h
2. 关键api是:
osal_init_system();//初始化
osal_start_system();//被执行后, OSAL会进入主循环
osal_set_event();//立即设置一个event
osal_start_timeEX();//安排若干时间(以ms为单位)后发生一个event
osal_stop_timeEX();//可通过osal_stop_timeEX来取消.
osal_msg_allocate();//分配内存
osal_msg_send();//指定目标任务
osal_msg_deallocate();//释放内存
osal_mem_alloc();//内存管理
osal_mem_free)();//内存管理
3. OsalInitTask();//是用来设置任务ID的
硬件抽象层(HAL)
硬件抽象层包括对ADC, UART, SPI, Flash, Timer, Key, LCD驱动的接口
OSAL架构的更多相关文章
- OSAL
1. CC254x的软件基于OSAL架构 2. OSAL并非一个真的操作系统, 而只是让软件设立一个事件的执行方法(setup excution of events) 3. 每一个子系统都在OSAL的 ...
- [nRF51822] 14、浅谈蓝牙低功耗(BLE)的几种常见的应用场景及架构(科普类干货)
蓝牙在短距离无线通信领域占据举足轻重的地位—— 从手机.平板.PC到车载设备, 到耳机.游戏手柄.音响.电视, 再到手环.电子秤.智能医疗器械(血糖仪.数字血压计.血气计.数字脉搏/心率监视器.数字体 ...
- [ZigBee] 16、Zigbee协议栈应用(二)——基于OSAL的无线控制LED闪烁分析(下)
说在前面:上一篇介绍了无线LED闪烁实现的OSAL部分,本篇介绍如何实现无线数据收发及数据处理: 上一篇是用SI跟着流程查看源码,我个人认为以架构的思维去了解代码能让人更清晰 ::ZMain.c程序入 ...
- [ZigBee] 15、Zigbee协议栈应用(一)——Zigbee协议栈介绍及简单例子(长文,OSAL及Zigbee入门知识)
1.Zigbee协议栈简介 协议是一系列的通信标准,通信双方需要按照这一标准进行正常的数据发射和接收.协议栈是协议的具体实现形式,通俗讲协议栈就是协议和用户之间的一个接口,开发人员通过使用协议栈来使用 ...
- 【Zigbee技术入门教程-02】一图读懂ZStack协议栈的基本架构和工作机理
[Zigbee技术入门教程-02]一图读懂ZStack协议栈的基本架构和工作机理 广东职业技术学院 欧浩源 ohy3686@foxmail.com Z-Stack协议栈是一个基于任务轮询方式的操作 ...
- 浅谈蓝牙低功耗(BLE)的几种常见的应用场景及架构(转载)
转载来至beautifulzzzz,网址http://www.cnblogs.com/zjutlitao/,推荐学习 蓝牙在短距离无线通信领域占据举足轻重的地位—— 从手机.平板.PC到车载设备, 到 ...
- 蓝牙nrf52832的架构和开发(转载)
相比TI的CC254X.DIALOG的DA1458X,nordic推出的nrf51822和nrf52832在架构和开发商都有自己独特的地方.这几颗产品都是蓝牙低功耗芯片.DA1458X使用OTP硬件架 ...
- MySQL高级知识- MySQL的架构介绍
[TOC] 1.MySQL 简介 概述 MySQL是一个关系型数据库管理系统,由瑞典MySQL AB公司开发,目前属于Oracle公司. MySQL是一种关联数据库管理系统,将数据保存在不同的表中,而 ...
- node服务的监控预警系统架构
需求背景 目前node端的服务逐渐成熟,在不少公司内部也开始承担业务处理或者视图渲染工作.不同于个人开发的简单服务器,企业级的node服务要求更为苛刻: 高稳定性.高可靠性.鲁棒性以及直观的监控和报警 ...
- 如何一步一步用DDD设计一个电商网站(二)—— 项目架构
阅读目录 前言 六边形架构 终于开始建项目了 DDD中的3个臭皮匠 CQRS(Command Query Responsibility Segregation) 结语 一.前言 上一篇我们讲了DDD的 ...
随机推荐
- To B企业:2025继续打价格战,只有死路一条
从双十一数不清的促销.满减还有消费券,到大模型厂商的"你低价,我免费"中可以窥见,最近几年,在产品泛滥.市场红利消失的困境中,"价格战"已从To C卷到To B ...
- Microsoft.Extensions.ServiceDiscovery 的 Consul 实现
GitHub地址:https://github.com/vipwan/Biwen.Microsoft.Extensions.ServiceDiscovery.Consul 使用方式 添加 NuGet ...
- Ubuntu终端输入异常、无法退格(删除文本)、使用方向键命令
1 起因 为了学习嵌入式开发安装去安装的ncurses库,使用命令:sudo apt-get install libncurses5-dev导致系统自带的ncurses-base被自动删除. 2 出现 ...
- 国产系统UOS上的可视化大屏电子看板系统
一.功能特点 采用分层设计,整体总共分三级界面,一级界面是整体布局,二级界面是单个功能模块,三级界面是单个控件. 子控件包括饼图.圆环图.曲线图.柱状图.柱状分组图.横向柱状图.横向柱状分组图.合格率 ...
- IM开发干货分享:有赞移动端IM的组件化SDK架构设计实践
本文由有赞技术团队原创分享,原题"有赞 APP IM SDK 组件架构设计",即时通讯网收录时有修订和改动,感谢原作者的无私分享. 1.引言 本文主要以Android客户端为例,记 ...
- 字符编码技术专题(一):快速理解ASCII、Unicode、GBK和UTF-8
本文由阮一峰(ruanyifeng.com)分享,本文收录时有内容修订和排版优化. 1.引言 今天中午,我突然想搞清楚 Unicode 和 UTF-8 之间的关系,就开始查资料. 这个问题比我想象的复 ...
- 搭建gitlab私有仓库
1.下载gitlab 首先在 /etc/yum.repos.d/目录下配置gitlab下载镜像源. # 进入目录 /etc/yum.repos.d/ cd /etc/yum.repos.d/ # 创建 ...
- Centos-基础配置
切换下载源到阿里云 备份 mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.backup 下载新的 Cent ...
- (十).NET6.0 搭建基于Quartz组件的定时调度任务
1.添加Quartz定时器组件 2.新建类库项目Wsk.Core.QuartzNet,并且引用包类库项目.然后新建一个中间调度类,叫QuartzMiddleJob 3.新建一个Job工厂类,叫YsqJ ...
- Mysql调优之使用mysql慢查询日志优化sql语句及表索引
Mysql调优之使用mysql慢查询日志优化sql语句及表索引 一,用慢查询日志找出耗时语句,并优化 # 查看mysql系统慢查询变量配置(能看到慢查询日志是否开启,日志路径等) SHOW VARIA ...