你现在位置:首页>技术论文>软件知识>正文
CC2430协议栈按键传递机制
日期:2010-12-20 13:55:27 点击:
来源:本站整理
作者:
点击【】放大字体.
CC2430协议栈按键传递机制
2010/12/19 12:14:10
 KEY初始化:

1、void InitBoard( byte level )

P_L_C_技_术_网——可——编——程——控-制-器-技——术——门——户

{

WWW_PLCJS※COM-PLC-技×术_网(可编程控※制器技术门户)

  ……  

WWW_PLCJ-S_COM-PLC-技.术_网(可-编程控-制器技术-门户)

    OnboardKeyIntEnable = HAL_KEY_INTERRUPT_DISABLE;//使用轮询方式

plcjs.技.术_网

    HalKeyConfig( OnboardKeyIntEnable, OnBoard_KeyCallback);

WWW_PLCJS※COM-PLC-技×术_网(可编程控※制器技术门户)

  }

WWW_PLCJS_COM-PLC-技.术_网

}

P.L.C.技.术.网——可编程控制器技术门户

2、

WWW.PLCJS.COM——可编程控制器技术门户

void HalKeyConfig (bool interruptEnable, halKeyCBack_t cback)

WWW_PLCJS※COM-PLC-技.术_网(可※编程控※制器技术门户)

{

WWW_PLCJS※COM-PLC-技.术_网(可※编程控※制器技术门户)

#if (HAL_KEY == TRUE)

WWW_PLC※JS_COM-PLC-技.术_网(可编程控※制器技术门户)

  /* Enable/Disable Interrupt or */

WWW_PLC※JS_COM-PmLC-技.术_网

  Hal_KeyIntEnable = interruptEnable;

WWW_PLCJS※COM-PLC-技.术_网(可※编程控※制器技术门户)

 

WWW_PLC※JS_COM-PmLC-技.术_网

  /* Register the callback fucntion */

WWW_PLCJS@_COM%-PLC-技.术_网

  pHalKeyProcessFunction = cback;//注册回调函数

WWW※PLCJS_COM-PL#C-技.术_网(可编※程控※制器技术门户)

 

W1WW_P4LCJS_COM-PLC-技.术_网

  /* Determine if interrupt is enable or not */

WWW_P※LCJS_CO※M-PLC-技-.术_网

  if (Hal_KeyIntEnable)//中断方式

WWW_PLCJS@_COM%-PLC-技.术_网

  {

WWW_PLC※JS_COM-PLC-技.术_网(可编程控※制器技术门户)

  else    /* Interrupts NOT enabled */轮询方式

——可——编——程——控-制-器-技——术——门——户

  {

WWW_PLCJS※COM-PLC-技.术_网(可※编程控※制器技术门户)

    /*

WWW※PLCJS_COM-PL#C-技.术_网(可编※程控※制器技术门户)

       Work around for CC2430DB when interrupt is enabled and SW5 (center joystick)

WWW_PLCJS_COM-PLC-技.术_网

       is used. This SW5 uses P2 which also has debug lines connected to it. This

plcjs.技.术_网

       causes contant interruption on P2INT_VECTOR. Disable the usage of P2 interrupt

P_L_C_技_术_网——可——编——程——控-制-器-技——术——门——户

       will stop this problem.

WWcW_PLCJS_COM-PLC-技.术_网

    */

WWW_PLCJS※COM-PLC-技.术_网(可※编程控※制器技术门户)

    #if defined (HAL_BOARD_CC2430DB)

WWW_PLC※JS_COM-PmLC-技.术_网

      #define HAL_KEY_SW_5_ENABLE /* Allow SW5 only when key interrupt is disable */

WWcW_PLCJS_COM-PLC-技.术_网

    #endif

WWW_PL※CJS_COM-PLC-技.术_网

 

WWW_P※LCJS_COM-PLC-)技.术_网

#if defined (HAL_KEY_SW_6_ENABLE)

WWW_PLCJ-S_COM-PLC-技.术_网(可-编程控-制器技术-门户)

   HAL_KEY_SW_6_ICTL &= ~(HAL_KEY_SW_6_ICTLBIT);/* Clear interrupt enable bit */

WWW_PLCJS※COM-PLC-技×术_网(可编程控※制器技术门户)

   HAL_KEY_SW_6_IEN &= ~(HAL_KEY_SW_6_IENBIT);

WWW_PL※CJS_COM-PLC-技.术_网

#endif

WWW_PL※CJS_COM-PLC-技.术_网

#if defined (HAL_KEY_SW_5_ENABLE)

WWW_P※LCJS_COM-PLC-)技.术_网

  HAL_KEY_SW_5_ICTL &= ~(HAL_KEY_SW_5_ICTLBIT); /* Clear interrupt enable bit */

WWW_P※LCJS_CO※M-PLC-技-.术_网

    HAL_KEY_SW_5_IEN &= ~(HAL_KEY_SW_5_IENBIT);

WWW_PLCJ-S_COM-PLC-技.术_网(可-编程控-制器技术-门户)

#endif

WW.W_PLCJS_COM-PLC-技.术_网

    osal_start_timerEx (Hal_TaskID, HAL_KEY_EVENT, HAL_KEY_POLLING_VALUE);    /* Kick off polling */------开启轮询事件

WWW_PLCJS@_COM%-PLC-技.术_网

  }

WWW_PLCJS※COM-PLC-技.术_网(可※编程控※制器技术门户)

  /* Key now is configured */

WW.W_PLC※JS_C,OM-PL,C-技.术_网

  HalKeyConfigured = TRUE;

WWW_PLC※JS_COM-PLC-技.术_网(可编程控※制器技术门户)

#endif /* HAL_KEY */

WWW_PLCJS@_COM%-PLC-技.术_网

}

WWW_PLC※JS_COM-PmLC-技.术_网

3、

WWW_PLCJS※COM-PLC-技×术_网(可编程控※制器技术门户)

uint16 Hal_ProcessEvent( uint8 task_id, uint16 events )

——可——编——程——控-制-器-技——术——门——户

{

——可——编——程——控-制-器-技——术——门——户

   if (events & HAL_KEY_EVENT)

plcjs.技.术_网

  {

WWW.PLCJS.COM——可编程控制器技术门户

#if (defined HAL_KEY) && (HAL_KEY == TRUE)

WWW_PLCJS※COM-PLC-技.术_网(可※编程控※制器技术门户)

    /* Check for keys */

WWW_P※LCJS_CO※M-PLC-技-.术_网

    HalKeyPoll();  //检测按键

WWW_PLCJS※COM-PLC-技×术_网(可编程控※制器技术门户)

    /* if interrupt disabled, do next polling */

W1WW_P4LCJS_COM-PLC-技.术_网

    if (!Hal_KeyIntEnable)

WWW_PLCJS_COM-PLC-技.术_网

    {

WWW_PLCJS_COM-PLC-技.术_网

      osal_start_timerEx( Hal_TaskID, HAL_KEY_EVENT, 100);

P_L_C_技_术_网——可——编——程——控-制-器-技——术——门——户

}

plcjs.技.术_网

#endif // HAL_KEY

WWW.PLCJS.COM——可编程控制器技术门户

    return events ^ HAL_KEY_EVENT;

P.L.C.技.术.网——可编程控制器技术门户

  }

W1WW_P4LCJS_COM-PLC-技.术_网

说明:该事件触发了函数HalKeyPoll()来检测是否有按键按下,并且如果按键配置为非中断,即轮询方式,会开启定时器在100ms后再次触发事件 HAL_KEY_EVENT。以此来实现按键的轮询。

WWW_P※LCJS_CO※M-PLC-技-.术_网

4、

WWW_PLC※JS_COM-PLC-技.术_网(可编程控※制器技术门户)

void HalKeyPoll (void)

WWW_PLC※JS_COM-PmLC-技.术_网

{

P.L.C.技.术.网——可编程控制器技术门户

#if (HAL_KEY == TRUE)

P_L_C_技_术_网——可——编——程——控-制-器-技——术——门——户

 

WWcW_PLCJS_COM-PLC-技.术_网

  uint8 keys = 0;//初始键值为0

P.L.C.技.术.网——可编程控制器技术门户

 

P_L_C_技_术_网——可——编——程——控-制-器-技——术——门——户

  *  If interrupts are enabled, get the status of the interrupt-driven keys from halSaveIntKey

WWW_PLC※JS_COM-PmLC-技.术_网

  *  which is updated by the key ISR.  If Polling, read these keys directly.

WWW_PLCJS@_COM%-PLC-技.术_网

  */

WWW_PLCJS※COM-PLC-技×术_网(可编程控※制器技术门户)

#if defined (HAL_KEY_SW_6_ENABLE)

WWW.PLCJS.COM——可编程控制器技术门户

  if (!(HAL_KEY_SW_6_PORT & HAL_KEY_SW_6_BIT))    /* Key is active low */

WWW_PLCJS※COM-PLC-技×术_网(可编程控※制器技术门户)

  {

WWW_PLCJ-S_COM-PLC-技.术_网(可-编程控-制器技术-门户)

    keys |= HAL_KEY_SW_6;//如果按键6被按下,则将按键6的值赋给keys

WWW.PLCJS.COM——可编程控制器技术门户

  }

WWW_PLC※JS_COM-PLC-技.术_网(可编程控※制器技术门户)

#endif

WWW_P※LCJS_COM-PLC-)技.术_网

#if defined (HAL_KEY_SW_5_ENABLE)

——可——编——程——控-制-器-技——术——门——户

  if (HAL_KEY_SW_5_PORT & HAL_KEY_SW_5_BIT)       /* Key is active high */

WWW_P※LCJS_CO※M-PLC-技-.术_网

  {

——可——编——程——控-制-器-技——术——门——户

    keys |= HAL_KEY_SW_5;//如果按键5被按下,则将按键5的值赋给keys

WWW※PLCJS_COM-PL#C-技.术_网(可编※程控※制器技术门户)

  }

WWW_PLCJS※COM-PLC-技×术_网(可编程控※制器技术门户)

#endif

WWcW_PLCJS_COM-PLC-技.术_网

  /* Exit if polling and no keys have changed */

WWW_PLCJS※COM-PLC-技×术_网(可编程控※制器技术门户)

  if (!Hal_KeyIntEnable)//如果是轮询方式执行以下代码

——可——编——程——控-制-器-技——术——门——户

  {

P_L_C_技_术_网——可——编——程——控-制-器-技——术——门——户

    if (keys == halKeySavedKeys)

WWW_PL※CJS_COM-PLC-技.术_网

    {

WWW_PLC※JS_COM-PmLC-技.术_网

      return;

WWW_P※LCJS_CO※M-PLC-技-.术_网

    }

WWW.PLCJS.COM——可编程控制器技术门户

    halKeySavedKeys = keys;    /* Store the current keys for comparation next time */

WWW_PLCJ-S_COM-PLC-技.术_网(可-编程控-制器技术-门户)

  }

W1WW_P4LCJS_COM-PLC-技.术_网

  /* Invoke Callback if new keys were depressed */

WWcW_PLCJS_COM-PLC-技.术_网

 

WWW_PLC※JS_COM-PLC-技.术_网(可编程控※制器技术门户)

  if (keys && (pHalKeyProcessFunction))

P.L.C.技.术.网——可编程控制器技术门户

  {

WW.W_PLC※JS_C,OM-PL,C-技.术_网

    (pHalKeyProcessFunction) (keys, HAL_KEY_STATE_NORMAL);

WWW_PLCJ-S_COM-PLC-技.术_网(可-编程控-制器技术-门户)

  }

WWcW_PLCJS_COM-PLC-技.术_网

#endif /* HAL_KEY */

WWW_PLC※JS_COM-PLC-技.术_网(可编程控※制器技术门户)

}

plcjs.技.术_网

5、

P.L.C.技.术.网——可编程控制器技术门户

void OnBoard_KeyCallback ( uint8 keys, uint8 state )

WWW_PLCJS@_COM%-PLC-技.术_网

{

WWW_P※LCJS_COM-PLC-)技.术_网

  uint8 shift;

WW.W_PLCJS_COM-PLC-技.术_网

  ……

WWW_P※LCJS_COM-PLC-)技.术_网

  shift = (OnboardKeyIntEnable == HAL_KEY_INTERRUPT_ENABLE) ? false : ((keys & HAL_KEY_SW_6) ? true : false);

WWW_PLCJ-S_COM-PLC-技.术_网(可-编程控-制器技术-门户)

 

WWW※PLCJS_COM-PL#C-技.术_网(可编※程控※制器技术门户)

if ( OnBoard_SendKeys( keys, shift ) != ZSuccess )//调用OnBoard_SendKeys将信息发送到上层

WWW_PLC※JS_COM-PLC-技.术_网(可编程控※制器技术门户)

  {

WW.W_PLC※JS_C,OM-PL,C-技.术_网

……

WWcW_PLCJS_COM-PLC-技.术_网

  }

WWcW_PLCJS_COM-PLC-技.术_网

}

WWcW_PLCJS_COM-PLC-技.术_网

 

WWW_PLCJS@_COM%-PLC-技.术_网

6、

WWW_PLCJS※COM-PLC-技×术_网(可编程控※制器技术门户)

byte OnBoard_SendKeys( byte keys, byte state )

plcjs.技.术_网

{

WW.W_PLCJS_COM-PLC-技.术_网

  keyChange_t *msgPtr;

WWW※PLCJS_COM-PL#C-技.术_网(可编※程控※制器技术门户)

  if ( registeredKeysTaskID != NO_TASK_ID )//这里必须要被注册

plcjs.技.术_网

  {

P_L_C_技_术_网——可——编——程——控-制-器-技——术——门——户

    // Send the address to the task

WWW_PLC※JS_COM-PmLC-技.术_网

    msgPtr = (keyChange_t *)osal_msg_allocate( sizeof(keyChange_t) );//分配内存空间

WWcW_PLCJS_COM-PLC-技.术_网

    if ( msgPtr )

W1WW_P4LCJS_COM-PLC-技.术_网

    {

WWW_PLC※JS_COM-PmLC-技.术_网

      msgPtr->hdr.event = KEY_CHANGE;

WWW_P※LCJS_CO※M-PLC-技-.术_网

      msgPtr->state = state;

plcjs.技.术_网

      msgPtr->keys = keys;

WWW_PLCJS※COM-PLC-技×术_网(可编程控※制器技术门户)

      osal_msg_send( registeredKeysTaskID, (uint8 *)msgPtr );

WWW_PLC※JS_COM-PLC-技.术_网(可编程控※制器技术门户)

    }

WW.W_PLC※JS_C,OM-PL,C-技.术_网

    return ( ZSuccess );

WWW_PLC※JS_COM-PmLC-技.术_网

  }

WWW_PLCJS_COM-PLC-技.术_网

  else

WW.W_PLC※JS_C,OM-PL,C-技.术_网

    return ( ZFailure );

WWW_PL※CJS_COM-PLC-技.术_网

}

WWW_PLC※JS_COM-PLC-技.术_网(可编程控※制器技术门户)

说明

WWW_P※LCJS_COM-PLC-)技.术_网

1)、注册,通过注册的机制实现数据在层之间的传递。

WW.W_PLCJS_COM-PLC-技.术_网

在应用层:

W1WW_P4LCJS_COM-PLC-技.术_网

   RegisterForKeys( SampleApp_TaskID );

P.L.C.技.术.网——可编程控制器技术门户

函数说明:

P.L.C.技.术.网——可编程控制器技术门户

byte RegisterForKeys( byte task_id )

WWW_PLCJS@_COM%-PLC-技.术_网

{

WWW_PLCJ-S_COM-PLC-技.术_网(可-编程控-制器技术-门户)

  // Allow only the first task

WWW_PLCJS※COM-PLC-技×术_网(可编程控※制器技术门户)

  if ( registeredKeysTaskID == NO_TASK_ID ) //判断条件,确定没有被注册

W1WW_P4LCJS_COM-PLC-技.术_网

  {

WWW※PLCJS_COM-PL#C-技.术_网(可编※程控※制器技术门户)

    registeredKeysTaskID = task_id;//将传来的ID赋给了registeredKeysTaskID 

WWcW_PLCJS_COM-PLC-技.术_网

    return ( true );

WWW_PLCJS※COM-PLC-技.术_网(可※编程控※制器技术门户)

  }

WW.W_PLCJS_COM-PLC-技.术_网

  else

WWW_PLCJS_COM-PLC-技.术_网

    return ( false );

WW.W_PLCJS_COM-PLC-技.术_网

}

W1WW_P4LCJS_COM-PLC-技.术_网

通过task_id的传递,registeredKeysTaskID已经为应用层的任务ID了,如果使用该ID可直接将任务事件发送到应用层。

WWW_PLC※JS_COM-PmLC-技.术_网

osal_msg_send( registeredKeysTaskID, (uint8 *)msgPtr )就是将msgPtr发送给了 registeredKeysTaskID层,即应用层。

WWW_PLCJ-S_COM-PLC-技.术_网(可-编程控-制器技术-门户)

 

WWW_PL※CJS_COM-PLC-技.术_网

2)、消息打包:

WWW※PLCJS_COM-PL#C-技.术_网(可编※程控※制器技术门户)

  msgPtr = (keyChange_t *)osal_msg_allocate( sizeof(keyChange_t) );//分配内存空间

W1WW_P4LCJS_COM-PLC-技.术_网

 //以下为装载信息:

WWW_PLCJS_COM-PLC-技.术_网

msgPtr->hdr.event = KEY_CHANGE;//装载事件

WWW※PLCJS_COM-PL#C-技.术_网(可编※程控※制器技术门户)

msgPtr->state = state;//装载状态

WWW_PLCJS_COM-PLC-技.术_网

msgPtr->keys = keys;//装载键值

P.L.C.技.术.网——可编程控制器技术门户

 

WW.W_PLC※JS_C,OM-PL,C-技.术_网

7、

WWW_P※LCJS_COM-PLC-)技.术_网

byte osal_msg_send( byte destination_task, byte *msg_ptr )

WWW_PLCJS_COM-PLC-技.术_网

{

WWW_P※LCJS_CO※M-PLC-技-.术_网

   //检查消息的有效性

WWW_PLCJS※COM-PLC-技×术_网(可编程控※制器技术门户)

  if ( msg_ptr == NULL )

WWW_PL※CJS_COM-PLC-技.术_网

    return ( INVALID_MSG_POINTER );

WWW_P※LCJS_CO※M-PLC-技-.术_网

 

WWW_PLC※JS_COM-PmLC-技.术_网

  if ( destination_task >= tasksCnt )

WWW_PL※CJS_COM-PLC-技.术_网

  {

P.L.C.技.术.网——可编程控制器技术门户

    osal_msg_deallocate( msg_ptr );

——可——编——程——控-制-器-技——术——门——户

    return ( INVALID_TASK );

W1WW_P4LCJS_COM-PLC-技.术_网

  }

WWW_PLC※JS_COM-PLC-技.术_网(可编程控※制器技术门户)

  // Check the message header

WWcW_PLCJS_COM-PLC-技.术_网

  if ( OSAL_MSG_NEXT( msg_ptr ) != NULL ||

P_L_C_技_术_网——可——编——程——控-制-器-技——术——门——户

       OSAL_MSG_ID( msg_ptr ) != TASK_NO_TASK )

WWW_PLCJS※COM-PLC-技×术_网(可编程控※制器技术门户)

  {

P.L.C.技.术.网——可编程控制器技术门户

    osal_msg_deallocate( msg_ptr );

WWW_PLCJS※COM-PLC-技×术_网(可编程控※制器技术门户)

    return ( INVALID_MSG_POINTER );

P_L_C_技_术_网——可——编——程——控-制-器-技——术——门——户

  }

WWW_PLCJS_COM-PLC-技.术_网

//将事件加入到系统任务队列里

WWW_PLCJS※COM-PLC-技.术_网(可※编程控※制器技术门户)

  OSAL_MSG_ID( msg_ptr ) = destination_task;

P_L_C_技_术_网——可——编——程——控-制-器-技——术——门——户

  // queue message

WWW_PLC※JS_COM-PmLC-技.术_网

  osal_msg_enqueue( &osal_qHead, msg_ptr );

WWW※PLCJS_COM-PL#C-技.术_网(可编※程控※制器技术门户)

 

WWW※PLCJS_COM-PL#C-技.术_网(可编※程控※制器技术门户)

  // Signal the task that a message is waiting

——可——编——程——控-制-器-技——术——门——户

  osal_set_event( destination_task, SYS_EVENT_MSG );//触发事件

WWW_PLCJS※COM-PLC-技×术_网(可编程控※制器技术门户)

  return ( ZSUCCESS );

P.L.C.技.术.网——可编程控制器技术门户

}

WWW※PLCJS_COM-PL#C-技.术_网(可编※程控※制器技术门户)

说明:在最后触发了SYS_EVENT_MSG事件,其任务ID为destination_task,即SampleApp_TaskID。

WWW_PLC※JS_COM-PmLC-技.术_网

 

WWW_PLCJS※COM-PLC-技.术_网(可※编程控※制器技术门户)

8、

W1WW_P4LCJS_COM-PLC-技.术_网

byte osal_set_event( byte task_id, UINT16 event_flag )

WWcW_PLCJS_COM-PLC-技.术_网

{

plcjs.技.术_网

  if ( task_id < tasksCnt )

WWW_PLCJS※COM-PLC-技.术_网(可※编程控※制器技术门户)

  {

WW.W_PLCJS_COM-PLC-技.术_网

  halIntState_t   intState;

plcjs.技.术_网

    HAL_ENTER_CRITICAL_SECTION(intState);    // Hold off interrupts

WWW_PLCJS※COM-PLC-技.术_网(可※编程控※制器技术门户)

tasksEvents[task_id] |= event_flag;  // Stuff the event bit(s)

——可——编——程——控-制-器-技——术——门——户

//task_id 为SampleApp_TaskID。

WWW_PLC※JS_COM-PmLC-技.术_网

    HAL_EXIT_CRITICAL_SECTION(intState);     // Release interrupts

P_L_C_技_术_网——可——编——程——控-制-器-技——术——门——户

  }

P_L_C_技_术_网——可——编——程——控-制-器-技——术——门——户

   else

WWW_P※LCJS_CO※M-PLC-技-.术_网

    return ( INVALID_TASK );

WWW_P※LCJS_CO※M-PLC-技-.术_网

 

WW.W_PLC※JS_C,OM-PL,C-技.术_网

  return ( ZSUCCESS );

W1WW_P4LCJS_COM-PLC-技.术_网

}

WWW_PLCJ-S_COM-PLC-技.术_网(可-编程控-制器技术-门户)

 

WW.W_PLCJS_COM-PLC-技.术_网

9、

WWW_PLC※JS_COM-PLC-技.术_网(可编程控※制器技术门户)

void osal_start_system( void )

WW.W_PLCJS_COM-PLC-技.术_网

{

WWW_PLCJ-S_COM-PLC-技.术_网(可-编程控-制器技术-门户)

  for(;;)  

P_L_C_技_术_网——可——编——程——控-制-器-技——术——门——户

  {

WW.W_PLC※JS_C,OM-PL,C-技.术_网

    uint8 idx = 0;

P_L_C_技_术_网——可——编——程——控-制-器-技——术——门——户

    Hal_ProcessPoll();  // This replaces MT_SerialPoll() and osal_check_timer().

P.L.C.技.术.网——可编程控制器技术门户

    do {

WWW_PLCJS※COM-PLC-技.术_网(可※编程控※制器技术门户)

      if (tasksEvents[idx])  // Task is highest priority that is ready.

WW.W_PLCJS_COM-PLC-技.术_网

      {

WWW_PLC※JS_COM-PLC-技.术_网(可编程控※制器技术门户)

        break;

plcjs.技.术_网

      }

WWW_PLCJS_COM-PLC-技.术_网

    } while ( idx < tasksCnt);

P.L.C.技.术.网——可编程控制器技术门户

//tasksEvents[task_id] |= event_flag;使得跳出循环

plcjs.技.术_网

 

P.L.C.技.术.网——可编程控制器技术门户

    if (idx < tasksCnt)

WW.W_PLCJS_COM-PLC-技.术_网

    {

WWW_PLCJS@_COM%-PLC-技.术_网

      uint16 events;

WWW_P※LCJS_COM-PLC-)技.术_网

      halIntState_t intState;

P.L.C.技.术.网——可编程控制器技术门户

      HAL_ENTER_CRITICAL_SECTION(intState);

P_L_C_技_术_网——可——编——程——控-制-器-技——术——门——户

      events = tasksEvents[idx];//提取事件

WWW.PLCJS.COM——可编程控制器技术门户

      tasksEvents[idx] = 0;  // Clear the Events for this task.

WWW_PLC※JS_COM-PLC-技.术_网(可编程控※制器技术门户)

      HAL_EXIT_CRITICAL_SECTION(intState);

WW.W_PLC※JS_C,OM-PL,C-技.术_网

      events = (tasksArr[idx])( idx, events );//调用处理函数进行处理

WWW※PLCJS_COM-PL#C-技.术_网(可编※程控※制器技术门户)

      HAL_ENTER_CRITICAL_SECTION(intState);

——可——编——程——控-制-器-技——术——门——户

      tasksEvents[idx] |= events;  // Add back unprocessed events to the current task.

WWW_P※LCJS_CO※M-PLC-技-.术_网

      HAL_EXIT_CRITICAL_SECTION(intState);

WWW_PLCJS※COM-PLC-技.术_网(可※编程控※制器技术门户)

      }

WW.W_PLC※JS_C,OM-PL,C-技.术_网

    }

WWcW_PLCJS_COM-PLC-技.术_网

}

WW.W_PLCJS_COM-PLC-技.术_网

 

WWW※PLCJS_COM-PL#C-技.术_网(可编※程控※制器技术门户)

10、

WWW_PLCJS_COM-PLC-技.术_网

uint16 SampleApp_ProcessEvent( uint8 task_id, uint16 events )

WWW_PLCJS_COM-PLC-技.术_网

{

WWW_PLCJS_COM-PLC-技.术_网

  afIncomingMSGPacket_t *MSGpkt;

WWW※PLCJS_COM-PL#C-技.术_网(可编※程控※制器技术门户)

  if ( events & SYS_EVENT_MSG )

WWW_PLCJS@_COM%-PLC-技.术_网

  {

WWW_PL※CJS_COM-PLC-技.术_网

    MSGpkt = (afIncomingMSGPacket_t *)osal_msg_receive( SampleApp_TaskID );

WWW_PLCJS@_COM%-PLC-技.术_网

    while ( MSGpkt )

——可——编——程——控-制-器-技——术——门——户

    {

WWW_PLC※JS_COM-PLC-技.术_网(可编程控※制器技术门户)

      switch ( MSGpkt->hdr.event )

WWW_PLC※JS_COM-PmLC-技.术_网

      {

WWW_PLCJ-S_COM-PLC-技.术_网(可-编程控-制器技术-门户)

        // Received when a key is pressed

WWW_PLCJS_COM-PLC-技.术_网

          case KEY_CHANGE:

WWW_P※LCJS_CO※M-PLC-技-.术_网

          SampleApp_HandleKeys( ((keyChange_t *)MSGpkt)->state, ((keyChange_t *)MSGpkt)->keys );

WWW_PLC※JS_COM-PLC-技.术_网(可编程控※制器技术门户)

          break;

plcjs.技.术_网

……

WWW_PLCJ-S_COM-PLC-技.术_网(可-编程控-制器技术-门户)

}

WW.W_PLCJS_COM-PLC-技.术_网

消息解包过程,队列中读取MSGpkt消息,然后检测其event,我们打包按键是event为KEY_CHANGE。所以在switch语句中最终会之心函数SampleApp_HandleKeys().。同时将MSG的state和keys传递到函数中,即我们打包时按键的状态和按键的数值。

WWW_PLCJS※COM-PLC-技×术_网(可编程控※制器技术门户)

 

WWW_PLCJS※COM-PLC-技.术_网(可※编程控※制器技术门户)

11、

WWW_PLC※JS_COM-PLC-技.术_网(可编程控※制器技术门户)

void SampleApp_HandleKeys( uint8 shift, uint8 keys )

P_L_C_技_术_网——可——编——程——控-制-器-技——术——门——户

{

WWW※PLCJS_COM-PL#C-技.术_网(可编※程控※制器技术门户)

  if ( keys & HAL_KEY_SW_1 )//如果按键值keys&HAL_KEY_SW_1 为1,执行以下代码

WWW_PLCJ-S_COM-PLC-技.术_网(可-编程控-制器技术-门户)

  {   

WWW_PLCJS※COM-PLC-技×术_网(可编程控※制器技术门户)

    SampleApp_SendFlashMessage( SAMPLEAPP_FLASH_DURATION );

——可——编——程——控-制-器-技——术——门——户

  }

WWW※PLCJS_COM-PL#C-技.术_网(可编※程控※制器技术门户)

 

WWW_P※LCJS_CO※M-PLC-技-.术_网

  if ( keys & HAL_KEY_SW_2 )//如果按键值keys&HAL_KEY_SW_2 为1,执行以下代码

WWW_P※LCJS_COM-PLC-)技.术_网

  {

WW.W_PLC※JS_C,OM-PL,C-技.术_网

    aps_Group_t *grp;

WWW※PLCJS_COM-PL#C-技.术_网(可编※程控※制器技术门户)

    grp = aps_FindGroup( SAMPLEAPP_ENDPOINT, SAMPLEAPP_FLASH_GROUP );

WW.W_PLCJS_COM-PLC-技.术_网

    if ( grp )

W1WW_P4LCJS_COM-PLC-技.术_网

    {

WWW_P※LCJS_CO※M-PLC-技-.术_网

      // Remove from the group

WWcW_PLCJS_COM-PLC-技.术_网

      aps_RemoveGroup( SAMPLEAPP_ENDPOINT, SAMPLEAPP_FLASH_GROUP );

WWW_PLCJS_COM-PLC-技.术_网

    }

W1WW_P4LCJS_COM-PLC-技.术_网

    else

WWW_PLCJS@_COM%-PLC-技.术_网

    {

P_L_C_技_术_网——可——编——程——控-制-器-技——术——门——户

      // Add to the flash group

WWW※PLCJS_COM-PL#C-技.术_网(可编※程控※制器技术门户)

      aps_AddGroup( SAMPLEAPP_ENDPOINT, &SampleApp_Group );

WWW_P※LCJS_CO※M-PLC-技-.术_网

    }

WWW_PLC※JS_COM-PLC-技.术_网(可编程控※制器技术门户)

  }

P.L.C.技.术.网——可编程控制器技术门户

评论内容
载入中...
载入中...
P
L
C



|










|


P
L
C









·最新招聘信息
·最新求职信息
·推荐产品
·推荐厂商
·栏目热门排行
·站内热门排行