ChibiOS
文章平均质量分 75
grey_csdn
这个作者很懒,什么都没留下…
展开
-
1828_ChibiOS中的对象FIFO
其实,这里的传递之前,应该会有数据的处理过程,不然传递一个没有内容绑定的信息应该是没有意义的。3. 如果从比较直接的使用上看这个功能与邮箱机制,那么还是有几个差异的:第一,邮箱对数据结构其实是没有约束的,但是这个FIFO对象则是有数据结构信息的;第三,邮箱多一个数据的组合过程,而这个组合过程则是通过了FIFO机制传递到了下端,由接收者自行做处理判断。这一份资料的整理会是ChibiOS的大概功能的最后一份要整理的文档,从过去看的这些资料看,这个ChibiOS中的FIFO应用非常多。原创 2023-12-10 17:22:43 · 27 阅读 · 0 评论 -
1827_ChibiOS中OSLIB的邮箱机制
这部分是例程中的一个中断,中断负责的主要工作其实还是获取通信的数据以及状态。如果是收到了消息,那么会先把消息填充到对应的buffer中,这个buffer就是软件自己控制的不分了。最初的这一部分定义,我把叫做buffer的变量加了一个mailbox后缀,这样后面看代码的时候能够更好理解这些信息代表的含义。1. 邮箱会结合buffer来用,而buffer也是环形的buffer,如果空间用满了之后继续请求使用会导致线程的等待。2. 使用的过程中,由于又像是单向的,一般会有两个线程分别等待彼此的邮箱读写操作。原创 2023-12-10 17:20:47 · 31 阅读 · 0 评论 -
1826_ChibiOS的OSLIB中的二值信号量
以上的这些内容就是ChibiOS中的二值信号的一个简单的介绍,从这里其实能够看出来一个比较有意思的点:二值信号的值其实不仅是2个,只是最大数值限制在了1,而0和1正好是获取到以及没有获取到两个特殊的状态。主要的问题点是计数信号量会一直增加,如果是线程处理的速度慢,很可能会出现计数信号超出最大限值溢出的情况。而从另一个溢出保护的角度来看,很可能二值信号在实现的时候可能加了OS中的wait操作。1. 二值信号其实是信号量的一种特殊应用,为了保证高效,实现上都是采用计数信号量的内联设计实现的。原创 2023-12-10 17:15:32 · 27 阅读 · 0 评论 -
1825_ChibiOS的OSLIB中的存储分配器
这里同时也说了前面的一个理解,那就是堆大小参数为0的时候,堆的大小信息其实是来自于链接器根据链接文件分配的存储空间。这里可用的全部存储,其实是链接器根据链接文件分配的,这个在后面的内容中得到了证实。比较好的一点是这种方式其实是可以避免存储碎片的产生的。这样,当存储申请发现存储不够的时候是会触发一个线程的等待的。2. 存储池的实现机制其实是通过链表来实现的,但是释放的存储不会保证下一次再分配的时候还保持之前的内容不变。1. 带有保护机制的存储池分配器,跟存储池的机制类似,只是链表的元素个数是固定的。原创 2023-11-05 14:18:31 · 192 阅读 · 0 评论 -
1824_ChibiOS的OS库
以上就是OSLIB的一个简单的功能以及特点的介绍,后面的调试中可以继续体会一下。等把这个OS的功能基本梳理一遍之后,调试的时候我会结合一个假象的应用场景来尝试做一个功能集合的集成。2. 这部分有些功能之前是在内核中的,但是由于内核是两种,RT以及NIL,这里面的代码是有一些会重复的。2. OSLIB的功能4:对象FIFO,这个其实处理的不是对象本身,而是其指针引用。1. OSLIB的功能3:邮箱,邮箱提供的功能主要是处理异步的消息队列。8. OSLIB的功能10:测试的一些相关功能,主要是OS的自测。原创 2023-11-05 14:16:05 · 157 阅读 · 0 评论 -
1823_ChibiOS的调试功能
1. OS接口的一些函数的参数有一定的要求,开启这样的检查可以检查参数是否在合理范围内。1. 如果开启了内核的统计,每一个线程能够保存下来的时间相关的一些统计包括:线程运行的最长时间、线程运行的最短时间、线程上一次的运行时间、线程累计的运行时间。Thread Profiling提供的功能主要是通过计数器来进行线程运行时间的统计,通过这样的统计可以知道线程执行的时候所占的时间权重。主要是为了保证开发以及实现上的保障来考虑的。2. 上面的这个时间统计是基于定时器来实现的,具体的精度与时钟的精度相同。原创 2023-11-05 14:14:39 · 163 阅读 · 0 评论 -
1821_ChibiOS中的事件机制
其实,很多操作系统中都是提供这样的机制的,主要是的作用是通过这种转换把很多裸系统中需要在ISR中处理的功能转移到线程中处理。这里给出来的一个例子处理了多个事件,处理的方式是等到任何一个事件都会触发wait的结果。2. 事件源跟监听器可以是一对多的,而监听器与线程是一对一的,但是这样的机制是可以支持事件源与线程的多对多关系的。2.事件的等待可以是等待单一的事件,也可以是等待任意事件,或者是等待全部的事件一起发生。关于事件的API是非常多的,也可以看得出来这个机制使用的灵活度非常高。原创 2023-11-05 14:08:04 · 260 阅读 · 0 评论 -
1820_ChibiOS中的同步消息
2. 之前看消息传递过程的说明的时候理解错了,我当时理解的是消息从即将切出去的线程传递出来,可以传递给即将切入进去的线程,但是这个切入进去的线程只是未来切入的一个概念。现在看来不是,而我自己的这个理解其实深思靠不住,如果按我理解的这样就没有所谓的切入概念了。但是,ChibiOS的很多设计理念是围绕线程展开的,而FreeRTOS中可能是数据。1. 这一页给出的例子可以看出来,消息的传递有时候不仅仅是为了功能服务的缺失而传递,有时候是为了连接不同的软件抽象层。初始化部分的消息发送,纯粹是一个信息的传递。原创 2023-10-28 16:05:42 · 128 阅读 · 0 评论 -
1819_ChibiOS的互斥信号与条件变量
互斥信号的锁定可以作为一个触发信号来触发进入状态机的条件,进入所谓的“中庭”状态,这个状态其实是一个排队过程。当请求互斥信号的时候,从中庭的排队成员中取出一个,进入到主房间。这就是互斥信号与条件变量的一个简单小结,其中互斥信号其实是容易理解的,这个条件变量理解的有一点费劲。1. 关于会吃信号与条件变量的全局配置提供了4个配置信息,分别是互斥信号的使能、互斥信号的递归支持、条件变量的使能、条件变量的超时使能。1. 互斥信号绑定了两个信息,其中一个是拥有互斥信号的线程引用,另一个是等待线程的引用队列。原创 2023-10-28 16:04:18 · 159 阅读 · 0 评论 -
1818_ChibiOS的计数信号量
之前我看到的类似的处理是基于FreeRTOS的一个CAN发送buffer资源的分配。这是软件最初的初始化设计,初始化对应的信号。初始化的时候,DMA还没有被分配占用,因此这里的数目为DMA的通道数目。这里举例说明了技术信号量的应用场景,典型的例子是DMA通道的分配。其实,类似的处理,CAN的邮箱buffer也是一个很典型的例子。也看到过这样的功能在驱动设计中的应用,但是当时没有理解这个使用的方式。2. 配置选项中,可以选择是否使用这个功能,也可以配置这个信号的获取是按照优先级还是FIFO的方式来获取。原创 2023-10-28 16:02:46 · 630 阅读 · 0 评论 -
1817_ChibiOS的RT线程
这里的这个例子中表达的设计其实跟FreeRTOS中的队列用法差不多,但是这里的设计概念是有一点不同的。但是ChibiOS中的队列其实是一个线程的队列,而这样,入队的时候其实是安排队列去等待某一个消息,出队的时候则是取到了消息之后离开。看之前的介绍的时候,我还以为ChibiOS中没有这样的机制,但是看起来还是有的。难道这是后来扩充的内容?最后的一个例子是协同调度的一个例子,我觉得这个倒是没有什么太多需要去理解分析的。2. 第二个例子,则是带有一定的修正的一种delay,但是在每一次的动作上可能会有偏差。原创 2023-10-28 16:01:05 · 153 阅读 · 0 评论 -
1816_ChibiOS中的RT调度器
1. 这里第一次见识到在实际的软件设计中切切实实采用了UML进行简单的建模的一个例子。2. 这里有几个概念需要理顺清楚:线程的就绪链表、注册表(一系列激活的线程表)、当前线程、虚拟定时器链表、调试相关信息、时间测量标定数据、内核运行时统计。如果这个数值设置为0,那么调度将会认为所有的线程优先级一样,线程之间的协同调度具有相同的优先级。- 第二,idle切换到其他的任务,也就是说在前面所说的等待命令状态下的唤醒是通过中断来激发的。4. 系统的一些元素采用了类的设计,这样就很容易派生支持多核MCU的架构。原创 2023-10-28 15:54:50 · 85 阅读 · 0 评论 -
1815_ChibiOS中的虚拟定时器
这个例子的前面有一段说明,解释这样的设计可以通过一个命令就实现这个LED的闪烁功能的开启。应该是这里提供的代码并不是顺序执行的,只是提供了两段代码来说明如何进行这个功能的启动以及关闭。其实,对等其他的OS可能叫做创建,但是习惯了之前的思维模式可能这里的初始化会意识不到。这里的例子提供的方式是不断重新设置软定时器,这样回调之中调用回调就可以一直触发。这里的这种设计,实现不断的LED驱动点亮的效果有点添油燃灯的感觉。2. 一次性的定时器,这个不仅在FreeRTOS中见过,在我用过的一些商用的操作系统中也有。原创 2023-10-19 21:12:41 · 232 阅读 · 2 评论 -
1814_ChibiOS中的时间以及时间间隔处理
1. 时间的相关配置,有tick的计数精度、时钟频率、间隔时间精度、时间类型大小等不同的配置。比如说,系统的最小的识别精度是1ms,而算出来的时间是0.1ms,这样可能会取1ms。上面的这个接口可以用来测量一个任务的执行时间,利用这样的功能不仅可以测试各个任务的执行时间,其实也很容易测出来整个系统的负荷率。4. 系统时间的技术的实现有两种实现方式,一种是利用周期性中断时间的经典的模式;2. 时间转换单位是一个扩展了精度的时间类型,主要目的是为了保证时间转换的安全性。1. 系统时间的单位是tick。原创 2023-10-19 21:10:07 · 124 阅读 · 0 评论 -
1813_ChibiOS的RT系统层
看完这部分,其实我看到的功能中在FreeRTOS的设计中基本上也是全都可以看到的。可能ChibiOS中还会有更加详细的描述,不过根据我对FreeRTOS的简单了解,我了解到的FreeRTOS中对这部分功能的支持其实是多于这一份文档中的功能描述的。功耗管理其实也算不上是OS直接的功能,因为很多功耗的部分是通过其他的手段来实施的。2. 除了上面的部分,还有一段需要做专门的保护,那就是可冲突的通用部分,也需要考虑作为关键区来处理。2. 初始化的部分,主要就是C语言的main函数中调用的OS的初始化的接口。原创 2023-10-19 21:08:10 · 150 阅读 · 0 评论 -
1809_ChibiOS的RT内核介绍
3. 非静态但是又不想作为API提供的函数,全都使用小写并且前面加上一个下划线表示这个是自己用的,不是一个全局功能。2. 中断的触发以及执行恢复等动作都是高于任务的,因此中断本身的堆栈处理并不会影响到线程相关的功能,不会影响到可移植性。参数是归属于线程的,因此可以通过传递相同的函数与多个参数的组合给不同的线程,并不会导致线程之间的冲突。1. OS内部的一些处理休眠的状态对象中有多个状态信息,可以表征任务的休眠原因。3. 在线程的工作区中,看得到线程自己的堆栈存储信息,初次之外还有中断信息。原创 2023-10-11 20:10:14 · 100 阅读 · 0 评论 -
1808_ChibiOS基本的架构介绍
这里的板子抽象的部分相比熟悉的AUTOSAR的架构图来说,位置是颠倒的。我觉得可能这里可以从一个实际的编码的经验角度考虑,其实这个启动代码提供的是一个初始化的接口,这里先进行一些初始化再启动OS,这样的流程应该就理顺合理了。但是,这样的功能并不是百分百绑定OS的,其实换一个其他的OS或者说是裸机程序都能够提供一些这样的实现。1. 不同于其他的OS,ChibiOS提供的不仅仅是一个调度器,而且还有丰富的OS组件。1. 内核部分中可移植的部分以及通用的部分进行了分离,这似乎是大部分的OS采用的手段。原创 2023-10-11 20:08:20 · 1062 阅读 · 0 评论