CH579 CH573 CH582 CH592 蓝牙主机(Central)实例应用讲解(三)——TMOS任务解析

一、TMOS概述

蓝牙为了实现同多个设备相连,实现多功能和多任务,产生了调度问题。虽然软件和协议栈可扩充,但终究最底层的执行部门只有一个。为了实现多事件和多任务切换,需要把事件和任务对应,针对这种应用起了一个TMOS名字操作系统抽象层。

TMOS作为调度核心,BLE协议栈、profile定义、所有的应用都围绕它来实现。TMOS不是传统大家使用的操作系统,而是一个允许软件建立和执行事件的循环。

TMOS不是传统意义上的操作系统,而是一种以 实现多任务为核心的系统资源管理机制。多任务管理方式实际上只有一个任务在运行,但是可以使用任务调度的策略将多个任务进行调度,每个任务占用一定的时间(独占式,执行完当前任务退出,继续查询其他可执行任务),所有的任务通过时间分片的方式处理。

上图是官方提供的文档有关TMOS的截图,从中我们很容易知道,任务有优先级,但这种优先级只是在系统调度的才有意义,高优先级的任务并不能打断低优先级的任务。

任务与事件的关系:从上图中,我们可以得知,事件需要添加到任务链表中,而每个任务最多可添加15个自定义事件。

二、TMOS任务的注册及事件的处理

 
/**
 * @brief   register process event callback function
 *
 * @param   eventCb-events callback function
 *
 * @return  0xFF - error,others-task id
 */
#define    TMOS_ProcessEventRegister  ((  tmosTaskID (*)  ( pTaskEventHandlerFn eventCb ))  BLE_LIB_JT(19))

 
 centralTaskId = TMOS_ProcessEventRegister( Central_ProcessEvent );


  halTaskID = TMOS_ProcessEventRegister(HAL_ProcessEvent);

 其中Central_ProcessEventHAL_ProcessEvent是事件处理回调函数。另外,对Central来说,还有一个非常重要的协议栈任务,这个任务的回调函数是:centralEventCB。我们开发产品的时候,大多数的工作都围绕着这三个回调函数以及进行。

// Simple BLE Observer Task Events
#define START_DEVICE_EVT              0x0001
#define START_DISCOVERY_EVT           0x0002
#define START_SCAN_EVT                0x0004
#define START_SVC_DISCOVERY_EVT       0x0008
#define START_PARAM_UPDATE_EVT        0x0010
#define START_PHY_UPDATE_EVT          0x0020
#define START_READ_OR_WRITE_EVT       0x0040
#define START_WRITE_CCCD_EVT          0x0080
#define START_READ_RSSI_EVT           0x0100
#define ESTABLISH_LINK_TIMEOUT_EVT    0x0200

以上是Central的任务centralTaskId下定义的事件。

我们启动事件的方式有两种,大家可以根据实际需要决定用哪种启动方式。

1、  立即启动事件

/**
 * @brief   start a event immediately
 *
 * @param   taskID - task ID of event
 * @param   event - event value
 *
 * @return  0 - SUCCESS.
 */
#define    tmos_set_event  ((  bStatus_t  (*)  ( tmosTaskID taskID, tmosEvents event ))  BLE_LIB_JT(7))



  tmos_set_event( centralTaskId, START_DEVICE_EVT );

2、延时启动事件

/*
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

永远的元子

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值