首页 资讯 应用 高压 设计 行业 低压 电路图 关于

嵌入式

旗下栏目: PLC 嵌入式 单片机 DCS

OSAL之任务同步

嵌入式 | 发布时间:2017-10-04 | 人气: | #评论# |本文关键字:OSAL
摘要:任务同步可以说是一个操作系统必备的功能。任务同步的机制有很多种:信号量、事件标志等。 OSAL 采用事件标志的方法来完成任务的同步。所谓的任务同步,其实就是通过某种手段来

任务同步可以说是一个操作系统必备的功能。任务同步的机制有很多种:信号量、事件标志等。OSAL采用事件标志的方法来完成任务的同步。所谓的任务同步,其实就是通过某种手段来触发一个任务的运行。OSAL事件标志的相关代码在OSAL.c中,只有两个函数:osal_set_event设置时间标志、osal_clear_event清除事件标志。

 osal_set_event() 设置事件标志

参数:

task_id-任务的id

event_flag-事件的标志位

OSAL中定义了一个16位的任务事件数组tasksEvents[]来管理每个任务的事件。tasksEvents[]数组的每个元素对应着一个任务的事件标志。通过设置tasksEvents[]的元素,就可以向系统发送事件,任务收到事件后执行相应的功能代码。

tasksEvents[task_id] |= event_flag;

每个任务有最多可以有16种事件标志,每一位对应着一种事件标志,这16种事件标志,除了bit15位被固定为系统消息事件位SYS_EVENT_MSG(0x8000)外,其它15位可以自定义,以便达到特定的功能。

 osal_clear_event() 清除事件标志

参数:

task_id-任务的id

event_flag-事件标志位

直接清除task_id对应的tasksEvents[]元素对应为的事件标志。

tasksEvents[task_id] &= ~(event_flag);

 下面以BLE按键响应为例子来详细阐述事件标志如何同步任务。

1、定义按键响应的事件标志位

#define HAL_KEY_EVENT  0x0010

2、配置按键的硬件中断响应后,当检测到按键被按下时,就调用osal_set_event()函数向Hal_TaskID任务发送事件标志。

osal_set_event(Hal_TaskID, HAL_KEY_EVENT);

3Hal_TaskID任务收到按键响应事件标志后会调用Hal_ProcessEvent()来处理Hal_TaskID接收到的事件。

if (events & HAL_KEY_EVENT)

{

  ......

  return events ^ HAL_KEY_EVENT;

}



责任编辑:电气自动化网

上一篇:OSAL之任务管理

下一篇:OSAL之消息管理

首页 | 资讯 | 应用 | 高压 | 设计 | 行业 | 低压 | 电路图 | 关于

Copyright 2017-2018 电气自动化网 版权所有 辽ICP备17010593号-1

电脑版 | 移动版

Ctrl+D 将本页面保存为书签,全面了解最新资讯,方便快捷。