发 帖  
原厂入驻New

[经验] 【大联大世平ON Semiconductor BLE5.0 RSL10开发板试用体验】内核消息与定时器

2020-8-1 13:29:18  170 RSL10
分享
0
    RSL10除了外设的控制外,还自带一个内核调度系统,可以看成是一个小的操作系统,可以创建不同的任务同时执行(相当于多线程),也可以建立多个定时器和自定义消息的收发。程序编写的流程主要是:
    1.声明各个消息的定义;
    2.创建任务;
    3.创建消息的接收函数;
    4.挂载消息接收函数;
    5.处理消息。
    其中挂载消息有两种方法,一种是用户处理所有的消息,包括系统消息,这种方式在简单的程序中还可以,如果工程很复杂,处理起来就麻烦了。所以本工程使用另一种方式,由系统默认消息处理函数来接收所有的消息,只把指定的消息返回给我,由我的程序来处理。

  1. enum TASK_MSG
  2.         {
  3.   APPM_DUMMY_MSG = TASK_FIRST_MSG(TASK_ID_APP),
  4.   TASK_tiMER,
  5.   MSG_BTN
  6.         };

  7.         #define APP_IDX_MAX                1

  8.         ke_state_t appm_state[APP_IDX_MAX];
  9.         static const struct ke_msg_handler appm_default_state[] = { { KE_MSG_DEFAULT_HANDLER, (ke_msg_func_t) MsgHandler_NotIFy } };
  10.         static const struct ke_state_handler appm_default_handler = KE_STATE_HANDLER(appm_default_state);
  11.         static const struct ke_task_desc TASK_DESC_APP = { NULL, &appm_default_handler, appm_state, 0, APP_IDX_MAX };
  12.        
  13. static void Event_Task(ke_msg_id_t const MSGID, void const *Param, ke_task_id_t const DestID, ke_task_id_t const SrcID)
  14. {
  15.   switch (MSGID)
  16.   {
  17.     case MSG_BTN:
  18.       if (SrcID) Sys_GPIO_Set_Low(GPO_LED); else Sys_GPIO_Set_High(GPO_LED);
  19.       break;
  20.                
  21.     case TASK_TIMER:
  22.       ke_timer_set(TASK_TIMER, TASK_APP, 100);
  23.       Sys_GPIO_Toggle(GPO_LED);
  24.       break;
  25.   }
  26. }
复制代码
   这就是定义消息和消息处理函数。
  1. NVIC_EnableIRQ(BLE_GROSSTGTIM_IRQn);
  2.         ke_task_create(TASK_APP, &TASK_DESC_APP);
  3.         MsgHandler_Add(MSG_BTN, Event_Task);
  4.         MsgHandler_Add(TASK_TIMER, Event_Task);
  5.         ke_timer_set(TASK_TIMER, TASK_APP, 100);
复制代码
   创建任务和挂载消息就更简单了,就这么几句话而已。

    继续上一次的IO和中断的程序,开始运行:
1.png
    当按键按下时进入中断函数,不再直接改变LED的状态,而是主动发送一个消息出来
2.png
    消息发送后会由接收函数收到,然后根据按键的状态来决定LED的亮灭。

    板子上只有一个LED,为了防止演示效果不明显,刚才的程序没有打开定时器,那么现在将注释掉的ke_timer_set(TASK_TIMER, TASK_APP, 100);这条语句打开
3.png
    每一秒钟LED的状态改变一次。参数里写的是100,这是Tick的次数,每一个Tick是10ms,这样就是一秒了。简单的内核操作完成。

只有小组成员才能发言,加入小组>>

41个成员聚集在这个小组

加入小组

创建小组步骤

关闭

站长推荐 上一条 /7 下一条

快速回复 返回顶部 返回列表