回答

收藏

【DA14580DEVKT-B评估板】五、任务调度与消息传递

#其他 #其他 2098 人阅读 | 0 人回复 | 2016-07-18

任务调度在arch_main.c中schedule_while_ble_on()执行;
一、大致流程schedule_while_ble_on()->rwip_schedule()->app_entry_point_handler()->app_process_handlers()->app_process_catch_rest_cb();
1、先来分析下app_process_handlers()
a、app_entry_point_handler()中参数msgid即为接收到的消息id(此id,对应const struct ke_msg_handler结构中的id);
b、再看下app_process_handlers内容:


其中每一个app_xxx_process_handlers只是直接调用并返回app_std_process_event()结果,如app_gap_process_handler:


最后,app_gap_process_handler通过handler_search()找到该handler中与msg_id相等的id所对应函数并调用;



b、然后就是app_process_catch_rest_cb,默认这是一个空指针,这是供用户自己添加添加一个回调,给用户提供一个处理自己创建的任务所对应的消息处理入口,该指针赋值是在user_config.h中的,如图:

二、至于上面所提到用到的msg_id实际就是创建消息时KE_MSG_ALLOC()的第一个参数,再通过ke_msg_send()发送到消息队列以驱动上面的调度进行。消息发送如下图所示:
关注下面的标签,发现更多相似文章
分享到:
回复

使用道具 举报

您需要登录后才可以回帖 注册/登录

本版积分规则

关闭

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