本文根据一周CC2541笔记汇总得来——

适合概览和知识快速索引——

全部链接:

中级教程-OSAL操作系统\OSAL操作系统-实验01 OSAL初探

【插入】SourceInsight-工程建立方法

中级教程-OSAL操作系统(OSAL系统解基本套路)

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

中级教程-OSAL操作系统(ADC-光敏电阻)

OSAL操作系统-实验16 串口波特率扩展

OSAL操作系统-实验17 AT命令初步

OSAL操作系统-实验20 模拟IIC通信+硬件IIC(Mpu6050)

OSAL 操作系统-实验 23 PWM 输出(改变占空比)

OSAL 操作系统-实验 24 看门狗 WachDog

OSAL操作系统-实验25 SNV内部Flash数据读写

OSAL 操作系统-实验 29 系统睡眠等级研究

OSAL 操作系统-实验 31 从机广播功率修改

1、基本流程初探

OSAL 的英文全名称叫做 “OS Abstraction Layer ”,操作系统,诞生于 TI 发布 zigbee 系列芯片时期,10年历史

系统基本运行流程:

>> main函数中是基本的系统初始化,然后进入

osal_start_system();
大循环,不断检测标志位,根据不同标志位来执行不同任务
后面看该大循环-->

 int main(void)
{
/* Initialize hardware */
HAL_BOARD_INIT(); //初始化时钟稳定时钟等等 // Initialize board I/O
//冷启动,关闭了led灯与中断, 一边接下来的各种初始化不受干扰
InitBoard( OB_COLD ); /* Initialze the HAL driver */
HalDriverInit(); //各种驱动的初始化、如按键、lcd、adc、usb、uart等 /* Initialize NV system */
//snv 内部用于保存配对数据或你的用户自定义数据的一段flash,4kB空间
osal_snv_init(); /* Initialize LL */ /* Initialize the operating system */
//oasl 操作系统初始化, 包含内存分配、消息队列、定时器、电源管理和任务等
21 osal_init_system();

/* Enable interrupts */
HAL_ENABLE_INTERRUPTS();// 开启全局中断 // Final board initialization
InitBoard( OB_READY ); //设置标志标示系统初始化完毕 #if defined ( POWER_SAVING )
// 如果你使能了低功耗, 就启动低功耗模式,
osal_pwrmgr_device( PWRMGR_BATTERY );
#endif
/*
低功耗部分
1.如何总是在PM1
osal_pwrmgr_device( PWRMGR_ALWAYS_ON );
2.如何进入PM2
osal_pwrmgr_device( PWRMGR_BATTERY );在空闲的时候就会进入到PM2模式
3.如何进入PM3
存在连接就断开连接,存在广播就停掉广播,并确认自己创建的所有定时任务都已关闭,
则系统应该就会进入PM3模式,只能进行外部中断唤醒
*/ /* Start OSAL */
osal_start_system(); // No Return from here
46 /* osal 操作系统启动,实际上是一个大循环,只是检查相对应的标志位,
47 就指定相对应的任务,看到这里,同学们应该往哪里看呢?其实,这已经是尽头了?那么我们的应用程序是在哪里写的呢
48 其实是在上面的 上面的函数 osal_init_system 里就初始化了,现在回过头去看看
osal_init_system 这个函数内部就知道了
*/
return ;
}
>> 负责任务遍历(也就是如何调度事务了)~

osal_start_system();中一直循环执行osal_run_system( void ):遍历所有事件,发现一个就执行该事件,没有事件则休眠

>> 初始化的流程

osal_init_system();---->

osalInitTasks();//初始化系统任务, 这一个任务初始化非常关键---->

SimpleBLETest_Init( taskID );     //这个就是我们的应用程序初始化---->

 void SimpleBLETest_Init( uint8 task_id )
{
//保存任务id到全局变量
SimpleBLETest_TaskID = task_id; //lcd 显示
HalLcdWriteString( "SimpleBLETest 2", HAL_LCD_LINE_1 ); // Setup a delayed profile startup
/*
11 设置一个任务, 这么做的目的是按照多任务处理的方法来做
12 SimpleBLETest_ProcessEvent 就是处理 SBP_START_DEVICE_EVT
13 */
14 osal_set_event( SimpleBLETest_TaskID, SBP_START_DEVICE_EVT );
}

osal_set_event( SimpleBLETest_TaskID, SBP_START_DEVICE_EVT );//因为采用多任务,

所以调用该函数设置一个任务该函数内部也比较简单,就是维护一个标志位数组:tasksEvents[task_id] |= event_flag;

 uint8 osal_set_event( uint8 task_id, uint16 event_flag )
{
if ( task_id < tasksCnt )
{
halIntState_t intState;
HAL_ENTER_CRITICAL_SECTION(intState); // Hold off interrupts
tasksEvents[task_id] |= event_flag; // Stuff the event bit(s)
HAL_EXIT_CRITICAL_SECTION(intState); // Release interrupts
return ( SUCCESS );
}
else
{
return ( INVALID_TASK );
}
}

2、OSAL系统基本流程进一步了解

2.1、定时器例程

定时器有用函数:(OSAL_Timers.c)

LED有用函数:(hal_led.c.c)

上一节说到沿着初始化函数一直进入会到任务设置部分:

而这里设置好之后,一旦有相应的消息过来就会最终触发应用层的:

至于为什么这样,先不说~

其余例程流程基本都是这样!

2.2、串口例程

串口初始化的时候采用回调函数,类似于C#,因此数据接收在回调函数中处理~

上面95行,串口初始化函数的形参是串口接收的回调函数---->具体如下:

上面是串口接收(利用回调),其发送比较简单,调用函数即可:

串口发送函数有多种:

未完~关注我的cc2541分类

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

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

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

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

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

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

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

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

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

  5. 蓝牙5.0芯片NRF52810和NRF52832可进行mesh组网

    提供智能化mesh照明解决方案,在现有传统灯具的基础上,插入NRF52832/52810的照明Mesh模块,可以迅速升级现有的传统灯具,配合手机APP和服务器系统,使每一盏灯成为物联网的一个智能节点, ...

  6. 6、CC2541修改按键调节广播发送功率例程为持续发送4DB的蓝牙基站

    一.目的 在 OSAL操作系统-实验31 从机广播功率修改-(20141029更新).zip 基础上进行修改,该工程是通过5向按键的上下按键来控制广播功率的加减,总共有4个档位.我们的目的是直接用最高 ...

  7. [nRF51822] 14、浅谈蓝牙低功耗(BLE)的几种常见的应用场景及架构(科普类干货)

    蓝牙在短距离无线通信领域占据举足轻重的地位—— 从手机.平板.PC到车载设备, 到耳机.游戏手柄.音响.电视, 再到手环.电子秤.智能医疗器械(血糖仪.数字血压计.血气计.数字脉搏/心率监视器.数字体 ...

  8. 浅谈蓝牙低功耗(BLE)的几种常见的应用场景及架构(转载)

    转载来至beautifulzzzz,网址http://www.cnblogs.com/zjutlitao/,推荐学习 蓝牙在短距离无线通信领域占据举足轻重的地位—— 从手机.平板.PC到车载设备, 到 ...

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

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

随机推荐

  1. cassandra的写过程

    如下: Message, get a new request,type:QUERY      //channelRead0函数 Message, get a new request,customPay ...

  2. 《CODE》读后笔记——第14~20章

    14.反馈与触发器 振荡器不需要人的干涉即可自主且不断地实现断开和闭合.所有计算机都靠某种振荡器来使其他部件同步工作. 当两个开关都断开时,电路有两个稳定状态,这样的一个电路称为触发器.触发器具有记忆 ...

  3. BLE资料应用笔记 -- 持续更新

    BLE资料应用笔记 -- 持续更新 BLE 应用笔记 小书匠 简而言之,蓝牙无处不在,易于使用,低耗能和低使用成本.'让我们'更深入地探索这些方面吧. 蓝牙无处不在-,您可以在几乎每一台电话.笔记本电 ...

  4. ssh整合,导入structs包后报错 getAnnotation(AnnotatedElement ae,Class<T> annotatetype)找不到

    今天在整合ssh(spring-framework-3.2.5.RELEASE-dist+struts-2.3.15.3-all+hibernate-release-4.2.6.Final)环境的时候 ...

  5. python代码优化---就喜欢细节

    地址:http://www.codeproject.com/Tips/829060/Python-Code-Optimizations-Part-One 转发过来保存一下.喜欢精雕细琢,编程才有乐趣. ...

  6. 2008ISBN号码

    题目描述 Description 每一本正式出版的图书都有一个ISBN号码与之对应,ISBN码包括9位数字.1位识别码和3位分隔符,其规定格式如“x-xxx-xxxxx-x”,其中符号“-”是分隔符( ...

  7. Swift基础语法(三)

    Array数组在swift中Array相当于oc中的NSMutableArray(变长数组) //1.定义数组 var numarr:Int[] = [,,,,]; var strarr:String ...

  8. Java程序员从笨鸟到菜鸟之(一百零一)sql注入攻击详解(二)sql注入过程详解

    在上篇博客中我们分析了sql注入的原理,今天我们就来看一下sql注入的整体过程,也就是说如何进行sql注入,由于本人数据库和网络方面知识有限,此文章是对网上大量同类文章的分析与总结,其中有不少直接引用 ...

  9. DWG2SHP DXF2SHP 如何把AutoCAD的DWG,DXF文件转换为Esri ArcGIS的Shape文件

    dwg是AutoCAD创立的一种图纸保存格式,已经成为二维CAD的标准格式,很多其他CAD为了兼容AutoCAD,也直接使用dwg作为默认工作文件. 地图shape文件由ESRI开发,一个ESRI的s ...

  10. 推荐一款跨平台的 Azure Storage Explorer

    var appInsights=window.appInsights||function(config){ function r(config){t[config]=function(){var i= ...