首页 > 其他分享 >1821_ChibiOS中的事件机制

1821_ChibiOS中的事件机制

时间:2023-11-14 12:32:39浏览次数:32  
标签:一个 1821 线程 事件 监听器 机制 ChibiOS


GreyZhang/g_ChibiOS: I found a new RTOS called ChibiOS and it seems interesting! (github.com)

1821_ChibiOS中的事件机制_RTOS

1. 这里开篇就讲了ChibiOS中的事件机制非常强大,算是OS的一个子系统功能。提供了多事件等待、事件与线程多对多、异步广播同步检查等功能。

2. 事件机制涉及到的三个对类别分别是:事件源、事件监听器、事件标志位及线程。

3. 事件源涉及到的两个操作:注册、广播。

4. 什么是事件的状态位呢?以串口驱动涉及到的可能设计为例,这个状态可以是通信的接收、发送、校验以及报错等信息。

1821_ChibiOS中的事件机制_ChibiOS_02

1. 把一个事件监听器注册到事件源上,同时会绑定一个线程。

2. 事件源跟监听器可以是一对多的,而监听器与线程是一对一的,但是这样的机制是可以支持事件源与线程的多对多关系的。

3. 事件的掩码有两种:有效掩码、PENDING标志。

1821_ChibiOS中的事件机制_事件源_03

1.每一个线程必须有一个不同的监听对象。

2.事件的等待可以是等待单一的事件,也可以是等待任意事件,或者是等待全部的事件一起发生。

1821_ChibiOS中的事件机制_事件源_04

这里给出来了两段伪代码,一个是通知注册到同一个事件源的全部监听器;另一个是事件可以由一个线程直接发送给另一个线程。

1821_ChibiOS中的事件机制_java_05

1821_ChibiOS中的事件机制_java_06

         关于事件的API是非常多的,也可以看得出来这个机制使用的灵活度非常高。

1821_ChibiOS中的事件机制_ChibiOS_07

1821_ChibiOS中的事件机制_RTOS_08

         这里给出来的一个例子处理了多个事件,处理的方式是等到任何一个事件都会触发wait的结果。接下来,根据返回的时间信息进行处理逻辑的拆分。

1821_ChibiOS中的事件机制_开发语言_09

1821_ChibiOS中的事件机制_RTOS_10

1821_ChibiOS中的事件机制_RTOS_11

1821_ChibiOS中的事件机制_ChibiOS_12

         第二个例子是涉及到中断的一个例程,ISR中给一个线程直接发信号触发一个动作。其实,很多操作系统中都是提供这样的机制的,主要是的作用是通过这种转换把很多裸系统中需要在ISR中处理的功能转移到线程中处理。不仅可以充分利用OS的线程管理能力,而且还可以保证中断的响应实时性。

标签:一个,1821,线程,事件,监听器,机制,ChibiOS
From: https://blog.51cto.com/greyzhang/8366016

相关文章

  • 1824_ChibiOS的OS库
    GreyZhang/g_ChibiOS:IfoundanewRTOScalledChibiOSanditseemsinteresting!(github.com)1.对于ChibiOS来说,OSLIB是一个可选的部分。2.这部分有些功能之前是在内核中的,但是由于内核是两种,RT以及NIL,这里面的代码是有一些会重复的。这样,重复的一部分功能也被拆分了出来。......
  • 1825_ChibiOS的OSLIB中的存储分配器
    GreyZhang/g_ChibiOS:IfoundanewRTOScalledChibiOSanditseemsinteresting!(github.com)1.之前有点不是很理解什么是静态OS,从这里基本上得到了这个答案。所谓的静态,其实就是内核之中不会使用Free以及Malloc这样的存储分配功能。2.虽然内核之中没有用到这样的存储动态......
  • 1823_ChibiOS的调试功能
    GreyZhang/g_ChibiOS:IfoundanewRTOScalledChibiOSanditseemsinteresting!(github.com)1.这里提到的调试,debug,跟测试工作本身是没有直接关系的。主要是为了保证开发以及实现上的保障来考虑的。2.所有的调试选项对于内核配置来说都是可访问的,这种设计应该是因为这样的......
  • java异常处理机制(三)常见异常
    Java常见的异常包括但不限于以下几种:1.NullPointerException(空指针异常):当试图调用实例方法或访问实例变量时,对象引用为null时抛出。2.ArrayIndexOutOfBoundsException(数组越界异常):当访问数组中不存在的元素时抛出。3.ClassCastException(类转换异常):当试图将对象强制转换为......
  • js运行机制
    区分进程和线程线程和进程区分不清,是很多新手都会犯的错误,没有关系。这很正常。先看看下面这个形象的比喻:进程是一个工厂,工厂有它的独立资源工厂之间相互独立线程是工厂中的工人,多个工人协作完成任务工厂内有一个或多个工人工人之间共享空间再完善完善概念:工......
  • 异常处理机制(二)之异常处理与捕获
    一、异常概述1Error(错误):是指程序无法处理的错误,表示运行应用程序时比较严重的问题。大多数错误与代码编写者执行的操作无关,而表示代码运行时JVM(Java虚拟机)出现的问题。2异常(Exception):是指在程序执行时由于程序处理逻辑上的错误而导致程序中断的一种指令流。通俗的说,......
  • 中断处理机制解析
    要处理中断,需要有一个中断处理函数。定义如下:irqreturn_t(*irq_handler_t)(intirq,void*dev_id);/***enumirqreturn*@IRQ_NONEinterruptwasnotfromthisdeviceorwasnothandled*@IRQ_HANDLEDinterruptwashandledbythisdevice*@IRQ_WAKE_T......
  • Android Binder机制简述
    Binder机制是Android系统提供的一种高级IPC机制,它使用代理对象、共享内存和序列化等技术,实现了进程间通信和远程调用的功能。它允许在不同进程之间进行数据传输和方法调用,实现了进程间的解耦。在Android系统中,Binder被广泛应用于各种组件之间的通信,例如Activity与Service、Service......
  • 异常处理机制(二)之异常捕获
    1.try…catch代码如下:单个捕获异常 如有异常会进入catch中输出异常!!!2.try…catch…catch多个捕获异常 进入异常代码块后try会终止运行3.try…catch…finally捕获异常并输出finally代码块 注:finally代码块只要不是系统异常终止都会运行4.try…finally代......
  • 异常处理机制(三)常见异常
    一、认识异常在Java中所有的异常(Exception)和错误(Error)都继承了同一个父类Throwable,他们的关系如下: 二、常见的运行时异常2.1空指针异常(NullPointerException):代码如下: 异常如下: 2.2数组下标越界异常(ArrayIndexOutOfBoundsException):代码如下: 异常......