OS的事件机制-Event

news2024/11/26 23:21:11

Event在OSEK OS中,其实就是一个flag的作用,如果某个TASK执行了,就调用<SetEvent()>把flag就置起来,和这个task关联的另一个TASK也执行了,就可以把flag清掉<ClearEvent>,如果第一个TASK没有执行完,第二个TASK就进入等待状态<WaitEvent>,直到第一个TASK执行完。

SetEvent():就是在各个TASK中,根据TASK_ID和Mask来置flag。

例如:TASK(Task2){  SetEvent(Task1, Event1);  TerminateTask();  }

在TASK2中,SetEvent(Task1, Event1) 的作用是设置 Task1 任务的 Event1 事件,以通知 Task1 任务发生了某个特定的事件。

TaskID:在 OSEK 中,每个任务都有一个唯一的任务 ID(Task ID)。任务 ID 是一个整数值,用于标识任务。任务 ID 是在应用程序中定义的,并且在任务创建时由 OSEK 内核指定。

例如在枚举中,Task_BSW_Sync_QM_C0 = 40

Mask:掩码(mask)可以将任务 ID 与其他 OSEK 服务(例如事件标志和资源)相关联。掩码是一个二进制值,其中每个位对应于一个任务 ID。如果位为 1,则表示相应的任务 ID 与该掩码相关联;如果位为 0,则表示该任务 ID 与该掩码不相关联。

例如:# define Rte_Ev_Run_NvM_SetRamBlockStatus     ((EventMaskType)4194304uLL)

Alarm 可以触发一个事件,使得等待该事件的任务被唤醒。这样,任务就可以在特定的时间点或时间间隔内执行某些操作。例如,alarm可以触发回调,在回调中设置事件

回调也可以作为SetEvent:

WaitEvent():该服务使任务进入等待状态,直到指定的事件发生。任务在等待状态下不会占用 CPU 时间,直到事件发生时才会被唤醒。一旦事件发生,任务将被唤醒并继续执行。如果事件已经发生,该服务将立即返回。Event不一定非得给TASK用的,也可放在TASK里某个函数去用。

例如:下面这个函数最上层是一个回调函数

ClearEvent():就是reset flag,清除动作。

GetEvent():获取指定事件标志状态的函数。它可以用于查询事件标志的状态,以便任务可以根据需要采取相应的行动。

具体来说,GetEvent函数可以用于以下场景:

  1. 查询事件标志状态:任务可以调用GetEvent函数查询指定事件标志的状态,即“已发生”或“未发生”。
  2. 根据事件标志状态采取行动:任务可以根据事件标志的状态采取相应的行动。例如,如果事件标志已经发生,任务可以执行相应的操作;否则,任务可以等待事件的发生。
  3. 避免任务阻塞:任务可以在调用WaitEvent函数之前调用GetEvent函数查询事件标志的状态,以避免在等待事件的过程中被阻塞。

注意:

OSEK 中的事件(Event)和 Linux 中的信号量(Semaphore)的区别:

OSEK 中的事件是一种可以被多个任务等待的同步机制,任务可以在等待事件时被阻塞,并且在事件发生时被唤醒。事件可以由任何任务发生,并且可以通过 SetEvent 和 ClearEvent 服务来设置和清除。另外,事件可以与任务、资源、中断服务例程等相关联,从而实现任务间同步和通信。

Linux 中的信号量主要用于控制对共享资源的访问。它是一种计数器,用于记录可用资源的数量。当线程需要访问共享资源时,它会尝试获取信号量。如果信号量的计数器大于 0,则线程获得了访问共享资源的权限,并将信号量计数器减 1。如果信号量的计数器等于 0,则线程将被阻塞,直到信号量的计数器大于 0。

OSEK 中的事件(Event)和 Linux 中的事件(Event)的区别:

  • 功能区别:OSEK 中的事件主要用于任务间的同步和通信,而 Linux 中的事件主要用于实现异步 I/O 或事件驱动编程
  • 实现方式区别:OSEK 中的事件是通过事件标志(Event Flag)实现的,而 Linux 中的事件通常是通过事件文件(Event File)或事件描述符(Event Descriptor)实现的
  • 监听方式区别:在 OSEK 中,任务可以通过 WaitEvent 函数等待事件的发生,而 Linux 中的进程或线程通常是通过系统调用(如 epoll、select、poll 等)监听事件文件或事件描述符。
  • 相关机制区别:在 OSEK 中,事件通常与任务、资源、中断服务例程等相关联,以实现任务间同步和通信,而 Linux 中的事件通常与互斥锁、条件变量、线程、信号等相关联,以实现异步 I/O 或事件驱动编程。

OSEK OS 中Event有哪些:

Task Events(任务事件):

当一个任务完成了它的工作或者需要等待某些事件发生时,可以发出一个任务事件来通知其他任务或者操作系统。

Alarm Events(定时器事件):

当一个定时器到达指定的时间时,可以发出一个定时器事件来通知其他任务或者操作系统。

Resource Events(资源事件):

当一个任务需要使用一个共享资源时,可以发出一个资源事件来通知其他任务或者操作系统。

Message Events(消息事件):

当一个任务需要与另一个任务进行通信时,可以发出一个消息事件来通知其他任务或者操作系统。

Interrupt Events(中断事件):

当一个硬件中断被触发时,可以发出一个中断事件来通知其他任务或者操作系统。

Startup Events(启动事件):

当操作系统启动时,可以发出一个启动事件来初始化系统和应用程序。

Linux 中Event有哪些:

文件描述符可读或可写事件:

表示某个文件描述符已经准备好进行读取或写入操作。可以使用系统调用(如 epoll、select、poll 等)监听文件描述符的状态,并在状态变化时获得通知。

信号事件:

表示某个进程收到了一个信号。可以使用信号处理函数(signal handler)响应信号事件,并进行相应的处理。

定时器事件:

表示某个时间间隔已经过去。可以使用定时器(如 timerfd)创建定时器事件,并在定时器到期时获得通知。

inotify 事件:

表示文件或目录的状态发生了变化,如文件被创建、修改、删除等。可以使用 inotify 机制监控文件或目录的状态,并在状态变化时获得通知。

线程事件:

表示某个线程已经完成了某个任务,或者需要等待某个事件的发生。可以使用条件变量(pthread_cond_t)等线程同步机制实现线程事件的通知和等待。

设备驱动事件:

表示硬件设备发生了某个事件,如磁盘驱动器读写完成、网络接口收到数据包等。可以使用设备驱动接口(如 netlink、sysfs 等)监听设备驱动事件,并在事件发生时获得通知。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/643418.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

这才是你想了解的Redis

文章简介 redis作为一个基于内存的数据结构存储系统&#xff0c;由于它的灵活性和可拓展性强&#xff0c;在我们日常开发中经常被用作数据库、缓存或者消息代理。本文就从Redis的基本部署使用说到Redis的集群、锁和消息对列 Redis基本使用 一、安装 下载地址&#xff1a;htt…

mySql 储存过程 多个结果返回解析

当需要查询复杂的数据模型并返回多个结果集时&#xff0c;使用 MySQL 存储过程可以有效地优化性能。同时&#xff0c;在开发中使用 Mybatis 可以方便地调用 MySQL 存储过程并获取多个结果集。本文将介绍如何在 Mybatis 中调用 MySQL 存储过程&#xff0c;并获取多个结果集。 1、…

Java并发之原子类

一、原子类简介 1 什么是原子类 Java中提供了一些原子类&#xff0c;原子类包装了一个变量&#xff0c;并且提供了一系列对变量进行原子性操作的方法。原子性的意思是对于一组操作&#xff0c;要么全部执行成功&#xff0c;要么全部执行失败&#xff0c;不能只有其中某几个执…

基础知识学习---牛客网C++面试宝典(三)C/C++基础之面向对象

1、本栏用来记录社招找工作过程中的内容&#xff0c;包括基础知识学习以及面试问题的记录等&#xff0c;以便于后续个人回顾学习&#xff1b; 暂时只有2023年3月份&#xff0c;第一次社招找工作的过程&#xff1b; 2、个人经历&#xff1a; 研究生期间课题是SLAM在无人机上的应…

测试新手百科:Postman简介、安装、入门使用方法详细攻略!

本文关键词&#xff1a;Postman基础 目录 一、Postman背景介绍 二、Postman的操作环境 三、Postman下载安装 四、Postman的基础功能 五、接口请求流程 六、管理用例—Collections 七、身份验证Authentication 一、Postman背景介绍 用户在开发或者调试网络程序或者是网…

【答题】在线答卷-答题系统的微信小程序开发流程详解

用死记硬背的方法学习的学生&#xff0c;面对桌上堆积成厚厚的书本&#xff0c;是否感觉鸭梨山大呢&#xff0c;想着教育却面临着学习成本不小问题&#xff0c;是否感觉各种不便呢&#xff0c;如果对编程代码有感兴趣&#xff0c;不妨试试做一个自己的在线答题系统&#xff0c;…

有效性常见标志词

有效性常见标志词 混淆概念常见标志词 &#xff08; 1 &#xff09; 既然…那么… &#xff08; 2 &#xff09; 也就是说… &#xff08; 3 &#xff09; 很显然… &#xff08; 4 &#xff09; 因为A 就是B…所以… &#xff08; 5 &#xff09; 某主体A 是 &#xff0c;…

低代码01之构建项目框架

目录 低代码之构建框架11&#xff1a;项目初始化2&#xff1a;src / data.json 数据 &#xff08; 容器大小与渲染的表单数据 &#xff09;3&#xff1a;App.vue ( 导入editor组件传递data.json之中的数据与 向下提供组件配置数据config )4&#xff1a;src / packages / editor…

我记不住的那些C语言的二维数组的函数传参

背景&#xff1a; 最近在复习数据结构和算法&#xff0c;顺带刷刷题&#xff0c;虽然很长时间不刷题了但还是原来熟悉的味道&#xff0c;每一次重学都是加深了上一次的理解。本次我们看一下如何将C语言的二维数组进行函数传参&#xff0c;C语言实现。 其实这个比较简单&#x…

springboot项目使用proguard配置代码混淆

springboot项目使用proguard配置代码混淆 代码混淆是一些软件开发过程中必不可少的步骤。 常用的代码混淆技术有 proguard maven plugin , yguard maven plugin, procyon maven plugin, dex maven plugin . 这些代码混淆技术大同小异&#xff0c;都是对maven打包生成class时进…

补充知识点

这里写目录标题 进制转换Java内置的进制转换介绍具体代码 有符号数据表示法整数强制转换之数据溢出浮点数进制转换浮点数储存 进制转换 Java内置的进制转换 介绍 也就是常用API里Integer的静态方法 具体代码 注意 最后一个方法&#xff0c;返回的是基于第二个参数为基数的第…

大模型部署实战(三)——ChatGLM-6B

❤️觉得内容不错的话&#xff0c;欢迎点赞收藏加关注&#x1f60a;&#x1f60a;&#x1f60a;&#xff0c;后续会继续输入更多优质内容❤️ &#x1f449;有问题欢迎大家加关注私戳或者评论&#xff08;包括但不限于NLP算法相关&#xff0c;linux学习相关&#xff0c;读研读博…

SSR渲染-初识Nuxt-01

SSR服务端渲染 SSR服务端渲染&#xff1a;在后端将html页面处理好&#xff0c;前端直接展示&#xff08;可以解决为后端给你传了一个html脚本&#xff0c;全段渲染&#xff09; 为什么要有SSR服务端渲染&#xff1f; 可以解决单页面首屏加载慢的问题&#xff0c;同时有利于用…

在线分享怎么多接口批量查询快递信息

做物流和电商行业的小伙伴应该都知道&#xff0c;大量快递集中发出后&#xff0c;我们要做的就是及时查询和跟踪快递单号&#xff0c;这样能够有效避免快递发错或快递丢失等情况出现&#xff0c;小编今天给大家安利一款全自动批量查询跟踪快递单号的辅助工具&#xff0c;它支持…

【C++/嵌入式笔试面试八股】二、21.分层模型 | HTTP

分层模型 01.画出OSI和TCP/IP协议栈的对应关系 对应关系记忆2113 02.什么是OSI七层模型?每层列举2个协议。❤️ OSI七层模型及其包含的协议如下 物理层: 传输单位为bit 功能:通过物理媒介透明的传输比特流,确定机械及电气规范 主要包括的协议为:IEE802.3 CLOCK RJ45 数据链…

[学习笔记] [机器学习] 10. 支持向量机 SVM(SVM 算法原理、SVM API介绍、SVM 损失函数、SVM 回归、手写数字识别)

视频链接数据集下载地址&#xff1a;无需下载 学习目标&#xff1a; 了解什么是 SVM 算法掌握 SVM 算法的原理知道 SVM 算法的损失函数知道 SVM 算法的核函数了解 SVM 算法在回归问题中的使用应用 SVM 算法实现手写数字识别器 1. SVM 算法简介 学习目标&#xff1a; 了解 …

路径规划算法:基于阿基米德优化优化的路径规划算法- 附代码

路径规划算法&#xff1a;基于阿基米德优化优化的路径规划算法- 附代码 文章目录 路径规划算法&#xff1a;基于阿基米德优化优化的路径规划算法- 附代码1.算法原理1.1 环境设定1.2 约束条件1.3 适应度函数 2.算法结果3.MATLAB代码4.参考文献 摘要&#xff1a;本文主要介绍利用…

Spring Bean-生命周期

三连支持 一起鼓励 一起进步 Bean生命周期 文章目录 一、生命周期1.Bean中配置生命周期2.实现InitializingBean和DisposableBean接口3.PostConstruct & PreDestroy4.BeanPostProcessor接口 二、执行过程三、源码中使用的BeanPostProcessor1.以ApplicationContextAwareProce…

【Flutter】Flutter 如何实现主题 Theme 切换

文章目录 一、引言二、Flutter 中的主题&#xff08;Theme&#xff09;和主题数据&#xff08;ThemeData&#xff09;三、如何在 Flutter 中创建自定义主题四、在 Flutter 中实现主题切换五、完整的代码示例六、总结 一、引言 大家好&#xff0c;欢迎阅读这篇文章。今天我们要…

Android——发送和接收广播

实验名称&#xff1a; 发送和接收广播 实验目的&#xff1a; &#xff08;1&#xff09;能创建广播接收者&#xff0c;实现广播的注册 &#xff08;2&#xff09;能自定义广播&#xff0c;发送和接收广播 实验内容及原理&a…