OSAL操作系统抽象层

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)

发布了4 篇原创文章 · 获赞 1 · 访问量 930

猜你喜欢

转载自blog.csdn.net/yw946711214/article/details/105647398