OSAL之任务同步

在多任务执行过程中的,操作系统应解决两个问题:

一是各任务之间应具有一种互斥关系,即对于某个共享资源的访问,如果一个任务正在使用,则其他任务只能等待,等到该任务释放该资源以后,等待的任务之一才能使用它;

二是相关的任务在执行上要有先后次序,一个任务要等其伙伴发来通知或或消息或建立了某个条件后才能继续执行,否则只能等待。

任务之间的这种制约性的合作运行机制叫做任务间的同步。

OSAL采用事件标志来管理任务之间的这种制约性的合作运行机制,主要功能是使得任务执行有先后执行次序。

OSAL事件标志的相关代码在OSAL.c中,只有两个函数:osal_set_event设置时间标志、osal_clear_event清除事件标志。

osal_set_event() 设置事件标志

功能是对相应任务的事件位进行置位,也即置一;达到对系统发送一个事件的功能

参数:

task_id-任务的id

event_flag-事件的标志位

OSAL中定义了一个16位的任务事件数组tasksEvents[]来管理每个任务的事件集合。tasksEvents[]数组的每个元素对应着一个任务的事件标志,该元素每一位对应一个事件标志。这16种事件标志,除了bit15位被固定为系统消息事件位SYS_EVENT_MSG(0x8000)外,其它15位可以自定义,以便达到特定的功能。通过设置tasksEvents[]的元素,就可以向系统发送事件,任务收到事件后执行相应的任务事件处理代码。

tasksEvents[task_id] |= event_flag;

osal_clear_event() 清除事件标志

功能是对相应任务的事件位进行清零,也即写0;达到清除事件标志

参数:

task_id-任务的id

event_flag-事件标志位

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

tasksEvents[task_id] &= ~(event_flag);
时间: 2025-01-08 11:06:16

OSAL之任务同步的相关文章

(zigbee学习总结一)zigbee协议栈中OSAL运行机理

在基于zigbee协议栈的应用程序开发过程中,用户只需要实现应用层的开发即可,zigbee应用程序框架中包含了最多240个应用程序对象,每个应用程序对象运行在不同的端口上,因此端口的最作用是区分不同的应用程序对象,可以把一个应用程序对象看成为一个任务.因此,需要一个机制来实现任务的切换.同步和互斥,这就是OSAL产生的根源. OSAL用一句话来说就是指支持多任务运行的系统资源分配机制.OSAL中有三个参数非常重要,即:tasksCnt.tasksEvent[]和tasksArr[]. (1)ta

Zigbee协议栈OSAL层API函数【转载】

OSAL层提供了很多的API来对整个的协议栈进行管理.主要有下面的几类:信息管理.任务同步.时间管理.中断管理.任务管理.内存管理.电源管理以及非易失存储管理.看到这些管理是不是感觉越来越像一个操作系统了. 1.     信息管理API 信息管理为任务间的信息交换或者外部处理事件(例如:中断服务程序或一个控制循环内的函数调用)提供一种管理机制.包括允许任务分配或不分配信息缓存.发送命令信息到其他任务.接受应答信息等API函数. (1)osal_msg_allocate ( ) 功能描述: 为信息

Oracle 10g通过创建物化视图实现不同数据库间表级别的数据同步

摘自:http://blog.csdn.net/javaee_sunny/article/details/53439980 目录(?)[-] Oracle 10g 物化视图语法如下 实例演示 主要步骤 在A节点创建原表和物化视图日志 在B节点创建连接A节点的远程链接 在B节点处创建目标表和与目标表名称相同的物化视图 在B节点处刷新物化视图 升级采用存储过程定时任务JOB方式定时刷新物化视图 进一步优化 文章更新记录 参考文章 Oracle 10g 物化视图语法如下: create materia

rsync+inotify-tools实时同步

rsync概述: rsync是类unix系统下的数据镜像备份工具--remote sync.一款快速增量备份工具 Remote Sync,远程同步 支持本地复制,或者与其他SSH.rsync主机同步 Rsync(remote sync)是UNIX及类UNIX平台下一款神奇的数据镜像备份软件,它不像FTP或其他文件传输服务那样需要进行全备份,Rsync可以根据数据的变化进行差异备份,从而减少数据流量,提高工作效率.你可以使用它进行本地数据或远程数据的复制,Rsync可以使用SSH安全隧道进行加密数

使用Second Copy同步ftp服务器的差异文件

公司一直用自主开发的一个同步工具来进行数据库文件异机备份的,但无奈太不稳定,三天两头出现服务挂死的问题,特别是最近这1个月,几天就1次. 问题现象都是服务一直在运行,但没有复制文件到备份机上,而且备份服务重启需要2个小时到2天…… 原因估计是网络问题导致文件共享复制中断,无法结束正在复制文件的这个进程而引起的.具体原因不想深究,那是个无底洞. 所以前天开始,就开始在各大软件网站和论坛中,搜索满足需求的同步软件,要求如下: 软件安装在客户端,通过ftp服务,定期从服务器上下载差异文件 支持设置执行

已经在Git Server服务器上导入了SSH公钥,可用TortoiseGit同步代码时,还是提示输入密码?

GitHub虽好,但毕竟在国内访问不是很稳定,速度也不快,而且推送到上面的源码等资料必须公开,除非你给他交了保护费:所以有条件的话,建议大家搭建自己的Git Server.本地和局域网服务器都好,不信你试试,那速度,怎一个爽字了得! 默认情况下,使用TortoiseGit同步代码,每次都需要输入用户名和密码,但为了方便可以在客户端创建ssh密钥,用于服务器端和客户端的认证(详细过程大家可参考这里),但有时会出现“ 已经在Git Server服务器上导入了SSH公钥,可用TortoiseGit同步

Rsync无差异同步原理和实现

4.Rsync无差异同步原理和实现.md 无差异同步   在生产环境中我们可能会遇到这样的状况,我们的客户端在服务端去拉取数据的时候,首先一点,对于拉取我们的服务端有的那么我们客户端肯定有.但是我们的客户端有的服务端就不一定是有的了.反之如果是推送的话,那么我们客户端有的我们的服务端那肯定是有的,但是我们的服务端有的我们的客户端不一定有.所以对于这种当服务端删除一条数据之后为了保障我们的客户端也能在下一次同步的时候进行删除的这种情况我们就需要采取无差异同步,保障数据的一致性. 实现方法 --de

主从同步出现一下错误:Slave_IO_Running: Connecting

主从同步出现一下错误: Slave_IO_Running: Connecting Slave_SQL_Running: Yes 解决方法: 导致lave_IO_Running 为connecting 的原因主要有以下 3 个方面: 1.网络不通 2.密码不对 3.pos不对 我敢肯定的并且排除的两个原因 1. 网络原因:在从库上拷贝主库上的备份文件的时候并没有出现任何的错误,因此可以排除. 2. POS 不对:这个我也可以排除,因为在主库上 show maste status 时我记录过了 PO

rsync+inotify实时同步

一.Rsync简介: rsync是一个远程数据同步工具,可通过lan/wan快速同步多台主机间的文件.它使用所谓的"rsync演算法"来使本地和远程两个主机之间的文件达到同步,这个算法只传送两个文件的不同部分,而不是每次都整份传送,因此速度相当快.所以通常可以作为备份工具来使用. 运行rsync server的机器也叫backup server,一个rsync server可同时备份多个client的数据:也可以多个rsync server备份一个client的数据.rsync可以搭配