OSAL框架基础以及相关的系统架构实现的原理

本文详细介绍了OSAL框架中的任务调度机制,包括如何遍历任务列表选择可执行任务,以及系统时钟如何设置为1ms。此外,还探讨了消息处理机制,如osal_set_event、osal_msg_send的功能,并通过按键响应处理过程举例说明。最后,展示了任务调度的完整流程,阐述了在无任务运行时如何进入低功耗模式。
摘要由CSDN通过智能技术生成

1、任务的调度
实际就是循环遍历一个任务列表,检查任务的执行状态,可以执行的 就开始执行。循环遍历。
实际就是sfwd的实现原理

两个数组(指针)记录任务的调度
*tasksEvents记录序号从0到taskcnt对应的任务是否被执行;
*tasksArr记录每个任务的入口地址;

for(;😉 // Forever Loop
{
uint8 idx = 0;
Hal_ProcessPoll(); // 先不管1
do {
if (tasksEvents[idx]) // 寻找最高优先级的任务来运行
{
break;
}
} while (++idx < tasksCnt);
if (idx < tasksCnt) //如果有任务需要运行
{
uint16 events;
halIntState_t intState;
HAL_ENTER_CRITICAL_SECTION(intState);
events = tasksEvents[idx];
tasksEvents[idx] = 0; // 本任务运行完了,要对其清空,为后面要运行的任务让路
HAL_EXIT_CRITICAL_SECTION(intState);
events = (tasksArr[idx])( idx, events );//最关键的一句话,如图一中,运行对应的任务
HAL_ENTER_CRITICAL_SECTION(intState);
tasksEvents[idx] |= events; // 本任务可能没完全完成,如果是这样,再次设置标志位࿰

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值