沁恒CH579使用—TMOS任务调度

本文介绍了沁恒CH579微控制器中的TMOS(时间片轮询系统),它是一种简化版的OSAL,主要用于蓝牙协议栈开发。TMOS通过时间分片的方式管理多任务,不支持抢占任务。文章详细讲解了TMOS的基本概念、常用API、使用方法,包括开始定时事件、注意事项、问题排查和消息管理,并提供了示例代码。
摘要由CSDN通过智能技术生成

一、什么是TMOS

  • TMOS 是沁恒微电子针对蓝牙协议栈开发的时间片轮询系统,简化版的OSAL,是通过轮询的方式来不断地查询事件实现的系统,不支持抢占任务
  • TMOS系统时间基准为 625us,时钟来源为RTC
  • 多任务管理方式实际上只有一个任务在运行
  • 通过任务调度的策略将多个任务进行调度,每个任务占用一定的时间,所有的任务通过时间分片的方式处理

二、常用的API(应用程序接口)

//tmosTaskID taskID
//以不同的taskid 来区分不同的任务,越小优先级越高 

//tmosEvents event
//每个task 下拥有的event,16bit,每bit代表一个event,对于同一个task,一共16个event,其中0x8000为系统使用,剩下15个为用户使用 

//注册task id,一般用于注册任务时候,首先执行的
tmosTaskID TMOS_ProcessEventRegister( pTaskEventHandlerFn eventCb ); 

//设置一个event,,根据taskid 和event 来决定具体的事件
bStatus_t tmos_set_event( tmosTaskID taskID, tmosEvents event );
 
//清理一个已经超时的event,不能在自己的event 函数内执行tmos_clear_event( tmosTaskID taskID, tmosEvents event ); 
//开始一个定时事件,只执行一次,
//tmosTimer具体是 1600 = 1s
bStatus_t tmos_start_task( tmosTaskID taskID, tmosEvents event, tmosTimer time  ); 

//开始一个定时事件,不断的执行,除非运行tmos_stop_task关掉,
//tmosTimer具体是 1600 = 1s
bStatus_t tmos_start_reload_task( tmosTaskID taskID, tmosEvents event, tmosTimer time  ); 

//停止一个定时事件
bStatus_t tmos_stop_task( tmosTaskID taskID, tmosEvents event ); 

//获取对应taskid 和event 的最后一个周期时长, 返回0是没有找到.
tmosTimer  tmos_get_task_timer( tmosTaskID taskID, tmosEvents event ); 
bStatus_t  tmos_msg_send( tmosTaskID taskID, uint8_t *msg_ptr );
uint8_t    *tmos_msg_receive( tmosTaskID taskID ); 
uint8_t    *tmos_msg_allocate( uint16_t len );
bStatus_t  tmos_msg_deallocate( uint8_t *msg_ptr ); 
uint8_t    tmos_snv_read( uint8_t id, uint8_t len, void *pBuf); 

//tmos的系统处理函数,需要不断在主函数中运行
void  TMOS_SystemProcess( void ); 

//返回tmos系统运行的clock,1600=1s
//这一部分相对来说,使用的比较少
uint32_t  TMOS_GetSystemClock( void );
uint32_t  tmos_rand( void  );   // pseudo-random number                                 
bool      tmos_memcmp( const void *src1, const void *src2, uint32_t len ); // TRUE - same, FALSE - different
bool      tmos_isbufset( uint8_t *buf, uint8_t val, uint32_t len ); // TRUE if all "val",FALSE otherwise
uint32_t  tmos_strlen( char *pString 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值