OSAL操作系统实验学习笔记07

cc2541添加多任务

1.首先我们需要初始化我们的应用程序的事件处理函数SimpleBLETest_Init( taskID );
并把SimpleBLETest_ProcessEvent // task 11
写入到事件轮训数组tasksArr里面去。
2.宏定义:

#define SBP_START_DEVICE_EVT                              0x0001
#define SBP_PERIODIC_EVT1                                  0x0002
#define SBP_PERIODIC_EVT2                                  0x0004
#define SBP_PERIODIC_EVT3                                  0x0008

#define SBP_PERIODIC_EVT_PERIOD                   100 //毫秒

3初始化函数

void SimpleBLETest_Init( uint8 task_id )
{ //保存任务id到全局变量   
  SimpleBLETest_TaskID = task_id;       
  // 串口初始化 波特率默认是115200, 形参是回调函数
  NPI_InitTransport(NpiSerialCallback);
  //lcd 显示
  HalLcdWriteString( "SimpleBLETest 11", HAL_LCD_LINE_1 );
  // Register for all key events - This app will handle all key events
  RegisterForKeys( SimpleBLETest_TaskID );
  // 启动三个自动重装的用户定时器延时事件
  osal_start_reload_timer( SimpleBLETest_TaskID, SBP_PERIODIC_EVT1, SBP_PERIODIC_EVT_PERIOD );
  osal_start_reload_timer( SimpleBLETest_TaskID, SBP_PERIODIC_EVT2, SBP_PERIODIC_EVT_PERIOD );
  osal_start_reload_timer( SimpleBLETest_TaskID, SBP_PERIODIC_EVT3, SBP_PERIODIC_EVT_PERIOD );
}.

4.事件处理函数

uint16 SimpleBLETest_ProcessEvent( uint8 task_id, uint16 events )
{
  VOID task_id; // OSAL required parameter that isn't used in this function
  // SYS_EVENT_MSG 这是系统事件比如按键事件蓝牙读写事件处理,都会置这个事件
  if ( events & SYS_EVENT_MSG )
  {
    uint8 *pMsg;
    if ( (pMsg = osal_msg_receive( SimpleBLETest_TaskID )) != NULL )
    {
      simpleBLECentral_ProcessOSALMsg( (osal_event_hdr_t *)pMsg );
      // Release the OSAL message
      VOID osal_msg_deallocate( pMsg );
    }
    // return unprocessed events
    return (events ^ SYS_EVENT_MSG);
  }

  if ( events & SBP_PERIODIC_EVT1 )
  {
    HalLedSet(HAL_LED_1, HAL_LED_MODE_TOGGLE);
    //led的闪烁累加
    g_ledBlinkCount[0]++;
    //lcd 显示 led的闪烁次数
    HalLcdWriteStringValue( "LED1 : ", g_ledBlinkCount[0], 10, HAL_LCD_LINE_5 );
    // 返回这个, 告诉osal,这个实践你已经处理了
    return ( events ^ SBP_PERIODIC_EVT1 );   
  }
  if ( events & SBP_PERIODIC_EVT2 )
  {
    HalLedSet(HAL_LED_2, HAL_LED_MODE_TOGGLE);
    //led的闪烁累加
    g_ledBlinkCount[1]++;
    //lcd 显示 led的闪烁次数
    HalLcdWriteStringValue( "LED2 : ", g_ledBlinkCount[1], 10, HAL_LCD_LINE_6 );
    // 返回这个, 告诉osal,这个实践你已经处理了
    return ( events ^ SBP_PERIODIC_EVT2);   
  }
  if ( events & SBP_PERIODIC_EVT3 )
  {
    HalLedSet(HAL_LED_3, HAL_LED_MODE_TOGGLE);
    //led的闪烁累加
    g_ledBlinkCount[2]++;
    //lcd 显示 led的闪烁次数
    HalLcdWriteStringValue( "LED3 : ", g_ledBlinkCount[2], 10, HAL_LCD_LINE_7 );
    // 返回这个, 告诉osal,这个实践你已经处理了
    return ( events ^ SBP_PERIODIC_EVT3 );   
  }
  // Discard unknown events
  return 0;
}

5.消息处理函数

static void simpleBLECentral_ProcessOSALMsg( osal_event_hdr_t *pMsg )
{
  switch ( pMsg->event )
  {
    case KEY_CHANGE:
      simpleBLECentral_HandleKeys( ((keyChange_t *)pMsg)->state, ((keyChange_t *)pMsg)->keys );
      break;
    case GATT_MSG_EVENT:
      //simpleBLECentralProcessGATTMsg( (gattMsgEvent_t *) pMsg );
      break;
  }
}

6.在SimpleBLETest.h文件申明函数

extern voidSimpleBLETest_Init( uint8 task_id );
extern uint16 SimpleBLETest_ProcessEvent( uint8 task_id, uint16 events );

备注:当然也可以自己写个自己定义的任务task12并且把他初始化添加在simpleBLETest.c里面
然后自己创建新的.c和.h文件并把头文件包含在OSAL_SimpleBLETest.c中
再宏定义,编写初始化函数,编写自己的事件处理函数和消息处理函数
最后在自己编写的.h文件下进行函数申明.

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值