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_set_event();

osal_start_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的更多相关文章

  1. [ZigBee] 16、Zigbee协议栈应用(二)——基于OSAL的无线控制LED闪烁分析(下)

    说在前面:上一篇介绍了无线LED闪烁实现的OSAL部分,本篇介绍如何实现无线数据收发及数据处理: 上一篇是用SI跟着流程查看源码,我个人认为以架构的思维去了解代码能让人更清晰 ::ZMain.c程序入 ...

  2. [ZigBee] 15、Zigbee协议栈应用(一)——Zigbee协议栈介绍及简单例子(长文,OSAL及Zigbee入门知识)

    1.Zigbee协议栈简介 协议是一系列的通信标准,通信双方需要按照这一标准进行正常的数据发射和接收.协议栈是协议的具体实现形式,通俗讲协议栈就是协议和用户之间的一个接口,开发人员通过使用协议栈来使用 ...

  3. 5、CC2541芯片中级教程-OSAL操作系统(PWM+看门狗)

    本文根据一周CC2541笔记汇总得来—— 适合概览和知识快速索引—— 全部链接: 中级教程-OSAL操作系统\OSAL操作系统-实验01 OSAL初探 [插入]SourceInsight-工程建立方法 ...

  4. 4、CC2541芯片中级教程-OSAL操作系统(简单AT指令实现+IIC软件和硬件实现驱动MPU6050)

    本文根据一周CC2541笔记汇总得来—— 适合概览和知识快速索引—— 全部链接: 中级教程-OSAL操作系统\OSAL操作系统-实验01 OSAL初探 [插入]SourceInsight-工程建立方法 ...

  5. 3、CC2541芯片中级教程-OSAL操作系统(ADC光敏电阻和修改串口波特率)

    本文根据一周CC2541笔记汇总得来—— 适合概览和知识快速索引—— 全部链接: 中级教程-OSAL操作系统\OSAL操作系统-实验01 OSAL初探 [插入]SourceInsight-工程建立方法 ...

  6. 2、CC2541芯片中级教程-OSAL操作系统(进一步了解-OLED && 普通按键和5方向按键-中断!!!)这个系统驱动层和应用层不一样~

    本文根据一周CC2541笔记汇总得来—— 适合概览和知识快速索引—— 全部链接: 中级教程-OSAL操作系统\OSAL操作系统-实验01 OSAL初探 [插入]SourceInsight-工程建立方法 ...

  7. 1、CC2541蓝牙4.0芯片中级教程——基于OSAL操作系统的运行流程了解+定时器和串口例程了解

    本文根据一周CC2541笔记汇总得来—— 适合概览和知识快速索引—— 全部链接: 中级教程-OSAL操作系统\OSAL操作系统-实验01 OSAL初探 [插入]SourceInsight-工程建立方法 ...

  8. 蓝牙协议栈中的 OSAL

    蓝牙协议栈里的操作系统叫做 OSAL(操作系统抽象层).它并非一个真正意义上的操作系统,它只是实现了操作系统的一些功能,如任务切换.内存管理. OSAL 产生的根源:基于蓝牙协议栈开发的产品,实际上是 ...

  9. 深入浅出Z-Stack 2006 OSAL多任务资源分配机制

    转自深入浅出Z-Stack 2006 OSAL多任务资源分配机制 一.概述 OSAL (Operating System Abstraction Layer),翻译为"操作系统抽象层&quo ...

随机推荐

  1. notepad++代码折叠对应的树形结构快捷键

    树形层次,从1开始计数 <!doctype html> <html lang="en" class="1"> <head clas ...

  2. bind和unbind事件的应用

    1.bind 先从一动画的示例看起,如图: 而图中表示的mouseout(移出).mouseover(移入)事件的操作,比较简单,具体代码如下: 从中我可以得出bind()的语法: $().bind( ...

  3. Linux脚本执行过程重定向

    Linux脚本执行过程重定向 一.bash调试脚本,并将执行过程重定向到指定文件 bash –x  shell.sh 2>&1 | tee shell.log

  4. 关闭不安全的HTTP方法

    关闭不安全的HTTP方法 在项目或tomcat下的web.xml中,添加如下配置: <!-- 关闭不安全的HTTP方法 --> <security-constraint> &l ...

  5. Cache封装类

    代码: using System; using System.Collections.Generic; using System.Linq; using System.Text; using Syst ...

  6. .NET Framework Execution Was Aborted By Escalation Policy

    错误#1 09:31 2015/1/26上班查看ERRORLOG发现下面错误信息字面上理解是有内存压力,中午的时候ERRORLOG频繁报下面错误问题核实,一台服务器上安装两个实例,其中一个实例设置了最 ...

  7. iOS 瀑布流的Demo

    /** * 瀑布流Demo的主要代码,若想看完整的代码请到下面链接去下载 * * 链接: https://pan.baidu.com/s/1slByAHB 密码: r3q6 */ #import &l ...

  8. Aws api gateway Domain name

    Set Up a Custom Domain Name for an API Gateway API The following procedure describes how to set up a ...

  9. PHP导出CSV UTF-8转GBK不乱码的解决办法

    折腾了几次 搜索了好久 终于找到办法 /** * http://yige.org/php/ * @ string 需要转换的文字 * @ encoding 目标编码 **/ function conv ...

  10. C#处理JSON数据

    每次写博客,第一句话都是这样的:程序员很苦逼,除了会写程序,还得会写博客!当然,希望将来的一天,某位老板看到此博客,给你的程序员职工加点薪资吧!因为程序员的世界除了苦逼就是沉默.我眼中的程序员大多都不 ...