1、CC2541蓝牙4.0芯片中级教程

您所在的位置:网站首页 cc2541蓝牙断开没有回调 1、CC2541蓝牙4.0芯片中级教程

1、CC2541蓝牙4.0芯片中级教程

2024-04-15 07:19| 来源: 网络整理| 查看: 265

 

 

本文根据一周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(); 大循环,不断检测标志位,根据不同标志位来执行不同任务后面看该大循环-->

复制代码 1 int main(void) 2 { 3 /* Initialize hardware */ 4 HAL_BOARD_INIT(); //初始化时钟稳定时钟等等 5 6 // Initialize board I/O 7 //冷启动,关闭了led灯与中断, 一边接下来的各种初始化不受干扰 8 InitBoard( OB_COLD ); 9 10 /* Initialze the HAL driver */ 11 HalDriverInit(); //各种驱动的初始化、如按键、lcd、adc、usb、uart等 12 13 /* Initialize NV system */ 14 //snv 内部用于保存配对数据或你的用户自定义数据的一段flash,4kB空间 15 osal_snv_init(); 16 17 /* Initialize LL */ 18 19 /* Initialize the operating system */ 20 //oasl 操作系统初始化, 包含内存分配、消息队列、定时器、电源管理和任务等 21 osal_init_system(); 22 23 /* Enable interrupts */ 24 HAL_ENABLE_INTERRUPTS();// 开启全局中断 25 26 // Final board initialization 27 InitBoard( OB_READY ); //设置标志标示系统初始化完毕 28 29 #if defined ( POWER_SAVING ) 30 // 如果你使能了低功耗, 就启动低功耗模式, 31 osal_pwrmgr_device( PWRMGR_BATTERY ); 32 #endif 33 /* 34 低功耗部分 35 1.如何总是在PM1 36 osal_pwrmgr_device( PWRMGR_ALWAYS_ON ); 37 2.如何进入PM2 38 osal_pwrmgr_device( PWRMGR_BATTERY );在空闲的时候就会进入到PM2模式 39 3.如何进入PM3 40 存在连接就断开连接,存在广播就停掉广播,并确认自己创建的所有定时任务都已关闭, 41 则系统应该就会进入PM3模式,只能进行外部中断唤醒 42 */ 43 44 /* Start OSAL */ 45 osal_start_system(); // No Return from here 46 /* osal 操作系统启动,实际上是一个大循环,只是检查相对应的标志位, 47 就指定相对应的任务,看到这里,同学们应该往哪里看呢?其实,这已经是尽头了?那么我们的应用程序是在哪里写的呢 48 其实是在上面的 上面的函数 osal_init_system 里就初始化了,现在回过头去看看 49 osal_init_system 这个函数内部就知道了 50 */ 51 return 0; 52 } 复制代码 >> 负责任务遍历(也就是如何调度事务了)~

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

 

>> 初始化的流程

osal_init_system();---->

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

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

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

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

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

复制代码 1 uint8 osal_set_event( uint8 task_id, uint16 event_flag ) 2 { 3 if ( task_id 具体如下:

 

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

串口发送函数有多种:

 

 

本文转自beautifulzzzz博客园博客,原文链接:http://www.cnblogs.com/zjutlitao/p/4769690.html,如需转载请自行联系原作者

 



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3