BLE学习—如何在蓝牙4.0BLE中添加新任务?
来源:互联网 发布:mac ssh 客户端 推荐 编辑:程序博客网 时间:2024/06/07 19:14
在使用蓝牙4.0BLE协议栈进行应用程序开发时,如何在应用程序中添加一个新任务。
下面结合工程示例SimpleBLEPeripheral来讲解,打开OSAL_SimpleBLEPeripheral.c文件可以找到数组tasksArr[]和函数osalInitTasks()。tasksArr[]数组里存放了所有任务的事件处理函数的地址;osalInitTasks()是OSAL的任务初始化函数,所有任务的初始化工作都在这里面完成,并且自动给每个任务分配一个任务ID。
要添加新任务,只需要编写两个函数:
(1)新任务的初始化函数;
(2)新任务的事件处理函数。
将事件处理函数的地址加入tasksArr[]数组,代码如下所示。
const pTaskEventHandlerFn tasksArr[] ={ LL_ProcessEvent, // task 0 Hal_ProcessEvent, // task 1 HCI_ProcessEvent, // task 2#if defined ( OSAL_CBTIMER_NUM_TASKS ) OSAL_CBTIMER_PROCESS_EVENT( osal_CbTimerProcessEvent ), // task 3#endif L2CAP_ProcessEvent, // task 4 GAP_ProcessEvent, // task 5 GATT_ProcessEvent, // task 6 SM_ProcessEvent, // task 7 GAPRole_ProcessEvent, // task 8 GAPBondMgr_ProcessEvent, // task 9 GATTServApp_ProcessEvent, // task 10 SimpleBLEPeripheral_ProcessEvent // task 11};
将新任务的初始化函数添加在osalInitTasks()函数的最后,如下代码所示。
void osalInitTasks( void ){ uint8 taskID = 0; tasksEvents = (uint16 *)osal_mem_alloc( sizeof( uint16 ) * tasksCnt); osal_memset( tasksEvents, 0, (sizeof( uint16 ) * tasksCnt)); /* LL Task */ LL_Init( taskID++ ); /* Hal Task */ Hal_Init( taskID++ ); /* HCI Task */ HCI_Init( taskID++ );#if defined ( OSAL_CBTIMER_NUM_TASKS ) /* Callback Timer Tasks */ osal_CbTimerInit( taskID ); taskID += OSAL_CBTIMER_NUM_TASKS;#endif /* L2CAP Task */ L2CAP_Init( taskID++ ); /* GAP Task */ GAP_Init( taskID++ ); /* GATT Task */ GATT_Init( taskID++ ); /* SM Task */ SM_Init( taskID++ ); /* Profiles */ GAPRole_Init( taskID++ ); GAPBondMgr_Init( taskID++ ); GATTServApp_Init( taskID++ ); /* Application */ SimpleBLEPeripheral_Init( taskID );
}
在此例中,SimpleBLEPeripheral_ProcessEvent函数添加到了函数的末尾,将SimpleBLEPeripheral_Init()函数添加到osalInitTasks()任务初始化函数中。
需要注意两点:
(1)taskArr[]数组里各事件处理函数的排列顺序要与osalInitTasks()函数中调用各任务初始化函数的顺序保持一致,只有这样才能保持一致,只有这样才能保证每个任务的事件处理函数能够接收到正确的任务ID(在osalInitTasks()函数中分配)
(2)为了保证osalInitTasks()函数所分配的任务ID,需要给每一个任务定义一个全局变量来保存这个ID。如在SimpleBLEPeripheral.c中定义了一个全局变量SimpleBLEPeripheral_TaskID,并且SimpleBLEPeripheral_Init函数中对其进行赋值。
阅读全文
1 0
- BLE学习—如何在蓝牙4.0BLE中添加新任务?
- 蓝牙4.0ble文件添加
- <蓝牙BLE>cc2540如何添加特征值
- [蓝牙]iOS学习之蓝牙4.0 BLE
- 在Raspberry上使用蓝牙4.0 BLE
- IOS学习之蓝牙4.0 BLE
- IOS学习之蓝牙4.0 BLE
- IOS学习之蓝牙4.0 BLE通信
- IOS学习之蓝牙4.0 BLE
- IOS学习之蓝牙4.0 BLE
- BLE 蓝牙4.0
- 蓝牙4.0 BLE
- 蓝牙4.0 BLE
- 蓝牙4.0BLE介绍
- 蓝牙4.0 BLE初探
- Android蓝牙4.0BLE
- Android ble 蓝牙4.0
- 蓝牙4.0 BLE
- maven入门指南—03 maven常见错误与解决方法
- 字体溢出隐藏
- 重装win10系统后不能关机,最终解决方案
- MVC反模式与脚本化微服务
- java基础-----弱引用,软引用,强引用,虚引用
- BLE学习—如何在蓝牙4.0BLE中添加新任务?
- 美容护肤:坏习惯可产生皱纹
- Java注解(Annotation)——3 实例
- 日常练习代码
- Volley的常规使用
- 获取当前屏幕的宽高,屏幕比例
- Collection接口之List子接口详解
- 理解Python并发编程-PoolExecutor篇
- HBASE