OSAL,Operating System Abstraction Layer,即操作系统抽象层
OSAL是一种基于任务事件驱动的轮询式操作系统
OSAL操作系统抽象层:
//zmain.c--->>> main函数入口
osal_init_system();
--->>>osalInitTasks();
osal_start_system();
--->>>osal_run_system();
【1】任务事件轮询
osal_run_system()不断轮询遍历所有任务事件,事件被置位后就会被调度执行该任务.
需要注意的是每次任务被调度时都只处理一个事件,并在处理完后清除该事件
typedef int (*fun_t)(int,char); //fun <==> int (*)(int,char)
fun_t p;
typedef unsigned short (*pTaskEventHandlerFn)\
( unsigned char task_id, unsigned short event );
每个任务最多可以同时设置16个事件,但有些位已经被系统定义事件占用,所以自定义事件时最好不要与其冲突,如:任务间消息收发事件SYS_EVENT_MSG = 0x8000
置位任务事件:
//方法一:osal_set_event置位事件
/*
*功能:添加任务事件
*参数
* @task_id 任务ID
* @event_flag 事件
*/
uint8 osal_set_event( uint8 task_id, uint16 event_flag )
{
...
tasksEvents[task_id] |= event_flag;
...
}
uint8 osal_clear_event( uint8 task_id, uint16 event_flag )
{
tasksEvents[task_id] &= ~(event_flag);
}
//方法二:定时器触发任务事件
/* timeout_value:定时时间值(ms) */
uint8 osal_start_timerEx( uint8 taskID, uint16 event_id, \
uint16 timeout_value )
在OSAL添加新任务:
[1].添加任务源文件:MytaskApp.c MytaskApp.h
[2].实现MytaskApp.c,在MytaskApp.c中实现MytaskApp_Init()和MytaskApp_ProcessEvent()函数
MytaskApp_Init():任务初始化函数
MytaskApp_ProcessEvent():任务事件处理函数
[3].在任务数组tasksArr中添加对应新任务处理函数:MytaskApp_ProcessEvent
[4].在任务初始化函数osalInitTasks中,调用新任务初始化函数:MytaskApp_Init();
(详细内容,参考添加新任务代码02_osal_add_mytask)