版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、OSAL 实验一OSAL 架构预览2014/3/28OSAL 是协议栈的躯干,可以理解为一个超级简单的操作系统目录前言2必要条件2原理图2编程参考2准备工作2OSAL 架构预览911 前言今天开始,的 OSAL就要来学习 OSAL 了,尽管现在对 osal 还非常陌生,但是请相信,在学后,OSAL 的结构甚至 BLE 协议栈的结构,你也会七八分的把握。习完2 必要条件A 硬件1、 SmartRF 系列开发板,CC2540 或者 CC2541 2、 CC-Debugger 仿真器B1、 IAR for 8051 开发环境,版本:8.102、 Flash Programmer 固件烧写3、 Sou
2、rce Insight3.5 代码阅读。3 原理图在基础实验里的原理图展示,在这里已经不适用了,因为 OSAL 还包括一层 hal,硬件抽象层,硬件抽象层里已经做好了开发板上的各种外设驱动。只需调用相关函数即可。4 编程参考OSAL 实验中,需要参考的有两份文档1、 HAL Driver API.pdf(位于协议栈安装目录 BLE-CC254x-1.3.22、 OSAL API.pdf(位于协议栈安装目录 BLE-CC254x-1.3.2shal)sosal)5 准备工作这时第一次分析比较庞大的源码,因此分析工具的选择显的十分重要,这里使用 Source Insight3.5 来阅读分析源码,
3、这一节,读工程5.1 新建一个 Source Insight 工程使用 SourceInsight3.5 来创建一个代码阅打开 SI,选择 Project-New Project.2输入想要创建的 SI 工程名称,随便填写一个就好,SimpleOsal,然后单击 OK这里填写与 IAR 工程一样的名字然后会出现寻则要包含的源码框,单击 Browse.定位到的【实验 1 OSAL 架构预览】里的【OSAL 实验】文件夹单击确认,然后在单击 OK34源码路径设置之后,然后需要选择包含哪些源码,一般是包含所有源码,所以选择 Add Tree,这时就会跳出一个框,提示当前找到了多少个源文件,选择 OK
4、,然后 Close。56这样,一个 Source Insight 工程就创建 ok 了Project来打开刚才创建的工程,选择 Project-Open7选择刚才创建的工程名:SimpleOsal,然后单击 OK,就打开了这个工程。工程打开后,可以通过右边的资源管理器,找到要阅读的源码即可。86 OSAL 架构预览已经做好了所有准备工作,只缺仔细阅读以下代码。在分析代码之前,先 BLE 协议栈的组织结构。看清 OSAL 在整个结构中的位置。这里暂且将下图中浅蓝色部分均看做是 OSAL 架构,这部分也全部是源代码的形式,而后面要研究的 stack 则是 lib 库。9OSAL 是系统抽象层的缩写
5、,负责所有任务函数的调度,消息事件的管理等。Hal 是硬件抽象层的缩写,相当于底层硬件驱动,例如 LED、按键、ADC、UART、LCD 等均已封装成 api 函数,在 OSAL 的任务函数中调用即可。OSAL 消息事件的运用以及 Hal 层 API 函数的调用,均是的 OSAL 实验内容。而本位,只分析 OSAL 架构,从 main 函数着手,一步一步的讲清楚各部分的运行原理。函数 main 在哪里?首先打开 OSAL 实验的 IAR 工程。位置:【实验 1 OSAL 架构预览OSAL 实验Projectsble】注意,OSAL 实验更名为:OSAL_test10然后进入 CC254xDB
6、文件夹里双击打开 IAR 工程文件:SimpleOsal.eww上面的这些文件组,例如 APP、HAL、OSAL、PROFILES 等,一般只修改 APP 里的内容,这里是与用户相关的,其他的部分很少需要修改,也不建议修改。刚才打开 IAR 工程前,一定有人注意到有一个 Source 文件夹,如下截图:这里的源码就是需要来开发和修改的,他们都有一个相同的字段 OSAL_.c 以及名.c,.h,最后还有_Main.c,虽然没有谁规定一定要相同,但这是一个良好的 OSAL 实验里全部以 SimpleOsal 命名。仔细观察文件名可以看到有一个_Main.c 的文件夹,可以猜想,即便是 main 函
7、数不在这11里,也会与它有关,打卡后发现,main 真的在这里。这是程序上电后首先会运行的地方。如下图,通过仿真器单步调试时,首先会到这里。12Main 函数如下图,104 行启动了 osal 大循环,在此之前,全部是硬件或者的相关初始化工作,例如初始化 LCD、ADC、UART 等外外设,以及初始化 OSAL 的相关运行环境,最后开始无线循环,可以最后的 osal_start_system()函数。osal_start_system()位于 OSAL.c 中,函数很简单(无需理会宏定义),一个无限循环的 for 语句,然后就是 osal_run_system(),在 osal_start_s
8、ystem 函数体的下面便是 osal_run_system 函数。13在 osal_run_system 函数中,暂时请关注下图中三个地方,1 是 hal 层,也就是硬件驱动层的轮询,例如按键等,这个比较好理解,而后面的 2 和 3 就有 osal 的消息事件有关系了,请看 3 中的 tasksArr 数据,注意他是函数指针数据,可能很多人还仅仅知道常规的变量指针,函数指针可以指向一个函数,通过函数指针就可以方便的调用不同的函数,在会用到函数指针,tasksArr 函数指针原型为:osal 里经常他带有两个参数,一个是 task_id,另外一个是 event,所有的实体函数都会这样那 tas
9、ksArr 在什么地方定义的呢。和定义。14请在 Source Insight 中,将光标停留在 tasksArr 上几秒,就会先显示处。这时又回到了之前的OSAL_SimpleOsal.c 源文件中。在tasksArr 里直接赋值了12 个任务函数,注意,这里就叫任务函数了,从 task 0 一直到 task 11。Task0 的任务优先级最高,越往后越低。在 osal_run_system 函数中,一旦检测到某个任务函数有事件发生,就会通过 tasksArr 函数指针来调用具体的任务函数,并且向他输入发送的 event 事件。这样,在任务函数中,就可以处理当前发生的事件了继续向前走,看看与
10、用户相关的任务函数,也就是 task11,SimpleOsal_ProsEvent 函数。15下图是与用户相关的任务函数,开发 ble 协议栈,几乎搜有的工作,都是在任务函数里完成。而且所有的任务函数都会有这下面这样的结构,处理 SYS_EVENT_MSG 事件,和处理用户自定义的事件。每个任务函数里可以有多个用户自定义的事件。Osal_run_system函数没循环一次,只处理一次消息事件,也就是说任务函数里的 1 和 2 等等,每次仅运行一个,运行结束后立刻返回,等待下次 osal_run_system 的循环。SYS_EVENT_MSG 系统事件里包括很多消息,例如 RF 层有数据上来,
11、或者 hal 层等,都会通知到系统事件中,然后通过 osal_msg_receive 接收详细的消息内容。例如这里的按键处理16SYS_EVENT_MSG 事件里包括很多内容,需要接收具体的 msg 来判断是何种信息,在sOSAg 中通过 pMsg-event 来看到消息类型,例如按键消息是SimpleOsal_ProKEY_CHANGE,然后就可以在这个分支下处理按键消息。Osal 就想一个操作系统,所有的工作都可以在任务函数里完成,平时开发单片机程序,几乎所有的按键处理,都会在大循环里或者中断里单独处理,有了 osal,就可以通过间隔简单的 api 函数来判断是何种按键。在单片机里实现 o
12、sal,是一项非常大的进步。接下来,来仔细看一看 SimpleOsal.c 的问价结构。首先是任务函数的初始化函数,SimpleOsal_Init,已经去掉了大部分 ble 协议栈相关的内容,仅保留部分来学习 osal,如下图 1,刚才为什么能在用户相关的任务函数中接收到按键消息呢,而不是别的地方?这是因为在用户相关的这个任务函数中调用了了 hal 层的按键服务,只有过了,才可以接收到,而且按键只能被RegisterForKeys一个任务函数。任务函数初始化部分,执行相关的初始化工作,状态设定等等,注意,大部分的底层初始化例如 led、adc、五向按键等,已经在 osal_start_syst
13、em 之前就已经初始化过了。下图中 2 是灭掉 LED1 和 LED2,然后向 lcd 输出 SimpleOsal 信息。最后是第三部,通过 osal_set_event,启动一个事件,这样就可以顺利的进入任务函数中去执行了。17任务初始化函数过后是任务函数的主体,面已经介绍过。最后是任务函数中独立出去的任务块。例如按键的处理函数。还有一个问题,刚才的任务初始化函数是在哪里运行的呢?在 OSAL_SimpelOsal.c 文件中,被 osalInitTasks 函数调用。所以需要继续看 osalInitTasks 在哪里被调用。18继续回到刚开始的 main 函数中。有一个 osal_init_system 函数,进入该函数后,就可以发现 osalInitTasks 函数了。1920大家刚结束 OSAL,会觉得调用关系比较乱,请不要着急,多阅读源码,多看多接触,你会觉得 osal 是一个非常好玩的系统。最后,做一个简单的实验,也就是 OSAL 实验 2 的内容,LED 点灯实验。编译源码时注意,提供了两个两个开发板的配置,一个是 SmartRF 开发板硬件环境,另外一个是 Keyfob 开发板。打开 IAR 时在左边的 workspace 下有一个下拉列表。选根据自己当前的硬件环境选择合适的配置,否则,程序会运行不正常。系统运行
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 员工上班无证驾驶免责协议书(2篇)
- 二零二四年度战略合作协议:商务会议专用
- 二零二四年度在线教育平台建设与运营合同
- 二零二四年度蔬菜订购与价格锁定合同
- 组拼式大模板施工技术总结
- 冷水购销协议
- 演出节目道具制作合同
- 专项服务提供商协议
- 房屋买卖合同效力认定问题分析与启示
- 家庭护理厨师雇佣合同
- 七年级动点问题大全给力教育课资
- 农村土地承包法解说PPT课件
- 中国宏观经济形势分析框架PPT课件
- 儿童英文自我介绍课件PPT
- 手术室优质护理服务措施(完整版)
- 厂房、设施、设备维护保养计划(完整版)
- 供应商冲突矿产调查表填写说明[沐风教学]
- 人教中职数学球PPT学习教案
- [QC成果]户外主变安装防坠落悬挂装置的研制范本
- 技工院校安全管理工作总结
- 采区变电所设备安装方案及安全技术措施
评论
0/150
提交评论