OSAL添加用户任务的小心得

void GUA_Init( uint8 task_id )
{
  GUA_TaskID = task_id;  
  
  //执行香瓜任务的启动事件
  osal_set_event( GUA_TaskID, GUA_START_DEVICE_EVT );
}
void SimpleBLETest_Init( uint8 task_id )
{ 
  //保存任务id到全局变量   
  SimpleBLETest_TaskID = task_id;       
    
  // Setup a delayed profile startup  
  /*
    设置一个启动任务事件,可以起到一个延时的作用
    //其实在这个地方也可以直接启动自动加载的函数
    //osal_start_reload_timer( SimpleBLETest_TaskID, SBP_PERIODIC_EVT, SBP_PERIODIC_EVT_PERIOD );
    就是处理 SBP_START_DEVICE_EVT
  */
  osal_set_event( SimpleBLETest_TaskID, SBP_START_DEVICE_EVT );
}
以上两种自定义函数分别来自【dagefeijiqumeiguo】和【feilu sia】两位博主的博客,刚刚学习,获益良多,感谢。实际验证的时候发现只添加了user.c和user.h文件到例程中,主函数无需修改,便直接进入用户自定义事件处理函数。查找原因是初始化函数添加了这条语句:
 osal_set_event( SimpleBLETest_TaskID, SBP_START_DEVICE_EVT );

所以在主函数中,系统初始化后,就调用了一个用户事件,随后进入用户任务事件处理函数进行处理(流程如下)。所以此处是否应该考虑将这条发送事件函数删除,如需验证,再单独放在启动系统函数OSAL_START_SYSYTEM之前。

->osal_init_sysytem-->osalInitTasks--->User_Init---->osal_set_event(User_taskID,USER_START_DECIVE_EVT)

程序另一个小错误在User头文件中未添加

extern uint8 User_taskID;
博主原程序如下

#ifndef GUA_H
#define GUA_H

#ifdef __cplusplus
extern "C"
{
#endif

/*********************头文件************************/ 
#include "bcomdef.h"
  
  
/*********************宏定义************************/ 
#define GUA_START_DEVICE_EVT                              0x0001
#define GUA_LED_TEST_EVT                                  0x0002
  
  
/*******************香瓜函数************************/ 
extern void GUA_Init( uint8 task_id );
extern uint16 GUA_ProcessEvent( uint8 task_id, uint16 events );


#ifdef __cplusplus
}
#endif


#endif
刚开始学习,如有问题,还望矫正。








猜你喜欢

转载自blog.csdn.net/zhiyong_tang/article/details/79636747