操作系统
文章平均质量分 77
学习实时操作系统,借鉴能学到资源,如µC/OS、FreeRTOS、OSEK以及其他资料
梅尔文
知识是学习的基础 在实践中思考
展开
-
OS的MPU机制-ARM架构下MPU对于任务和内存的保护
其实这三种方式没有MPU也可以实现, 只不过归不用MPU的操作归属于 CPU 架构层面,而MPU属于内存层面的控制,进一步对region划分了区域,哪些可以Cache,哪些可以Share,只不过这种操作是基于内存的操作,。更细化权限控制,MSP和PSP 指针是 CPU 架构层面的特权级划分,MPU 机制是基于内存区域的访问控制。内核直接访问芯片内存,如上图,去掉Cache走总线AXI或AHB的链路。如果开启共享(Shareability),等同于关闭Cache。Cortex-A7(含MMU)原创 2024-07-25 14:17:42 · 891 阅读 · 0 评论 -
ARM架构与FreeRTOS中的内存管理(flash与SRAM,堆栈)
在Cortex-M7中,存储器一共有4GB的地址空间,4GB的地址空间又被划分为8个区域块,每个块有512M的内存。Note:4GB的地址空间为 0x0000 0000 - 0xFFFF FFFF,可寻址的512M的地址空间为 0x0000 0000 - 0x1FFF FFFF,可寻址的地址是指处理器可以直接访问和寻址的存储区域,如flash,SRAM,寄存器。原创 2024-07-16 19:59:39 · 931 阅读 · 0 评论 -
OS中断机制-嵌套和竞争
在STM32F4 中 NVIC_PRIORITYGROUP_4:优先级分组为 4,意味着抢占优先级和子优先级各占 4 位,即都具有 16 个取值(0 到 15)。这种方式下,可以实现最大的优先级颗粒度划分。抢占优先级(Preemption Priority)就是同一组中断之间的优先级关系,子优先级(Subpriority)也就是在同一抢占优先级组内进一步划分优先级。函数来设置中断的 IRQn 中断号,PreemptPriority 抢占优先级,SubPriority 子优先级,数值越低表示优先级越高。原创 2024-06-25 18:31:25 · 112 阅读 · 0 评论 -
OS的Trap机制-TC397
这个osTrap_1_Core0函数可能指向用户编写的函数,也可能是默认的Os_Hal_UserTrapEntry处理函数,下面简要分析Camera项目中发生trap故障时bug现场保存的流程,这里通过callout函数将bug信息保存在DSPR,可实现没有调试器或者bug偶发时对问题的追踪。到目前为止,我们已经可以定位到trap类型bug的引发原因,从而针对性的修改代码。寄存器保存了异常向量表的基地址。由下图可以看到,针对8类trap,程序都有对应的trap处理函数。向量进行访问,并按硬件定义的。原创 2024-06-24 19:53:33 · 344 阅读 · 0 评论 -
OS中断机制-外部中断触发
根据DataSheet的文档描述,中断被触发,一定是因为寄存器的改变,从而触发对应的中断服务函数(注意中断触发后,要如何执行要根据自己的需求去实现Callback)也就说在初始化的时候,已经确定哪个GPIO作为中断IO,而在这里只是根据IO对应的中断线去使能中断功能。MCU正常运行时,外部中断源发生中断事件,中断源向MCU发送跳转指令,跳转到对应的中断服务函数。AUTOSAR的中断触发,基于TC397的I2C。初始化GPIO,并确认中断的触发方式。中断被触发,执行中断服务函数。EXTI外部中断触发过程。原创 2024-06-24 19:31:37 · 167 阅读 · 0 评论 -
AUTOSAR OS任务调度的底层逻辑
先参考OSEK与FreeRTOS在任务调度上最大的区别在于,FreeRTOS是基于全抢占任务调度和时间片轮转调度机制,具有并发和并行的能力。而OSEK主要以调度表机制和Alarm机制触发任务,不具备并行的能力。最大的相同点是都是根据优先级高低的全抢占调度机制(OSEK可选非全抢占)。原创 2023-11-30 21:24:09 · 1984 阅读 · 0 评论 -
FreeRTOS的并行与并发思考
比如说智能车,电机控制方面,优先级肯定是最高的,但是像camera的数据采集就可以在电机控制之下,智能车在运行的时候,camera采集数据不需要极其的频繁,再往下比如LCD图像显示,就更不需要那么频繁的显示,即便有延迟,对系统安全也不会产生多大的影响。接下来是任务的并行能力,时间片轮转调度机制是任务的并行机制,也就是当多个任务处于同一优先级时,CPU通过划分时间片,每个时间片执行任务,任务没有执行完,就将数据或寄存器配置等暂存到CPU的堆栈上,等待其他任务全部执行完对应的时间片,再次恢复到任务被执行的点。原创 2023-11-23 20:54:05 · 457 阅读 · 0 评论 -
RTOS的任务触发底层逻辑
从整体来看,首先FreeRTOS的任务执行是基于全抢占调度的,也就是说任务按照就绪列表中优先级高低执行的,如果一个任务优先级很高,没有其他同级别任务,并且任务也没有阻塞,挂起或延时,那这个高优先级任务就会一直执行,其他的任务就会完全失效。我要如何分配这个系统中这三个任务的执行时间。对于任务的切换,当高优先级任务在while(1)的循环中时,在while的循环内部加入一个 vTaskDelay,暂时释放CPU,所谓的释放CPU确实就是先将调度器挂起,将高优先级任务放到延时列表中,之后在恢复调度器的执行。原创 2023-11-23 16:34:37 · 516 阅读 · 0 评论 -
OSEK-任务调度机制
并且根据配置也可以看出,所有的任务都是基于全抢占模式触发的,也就是说,如果任务没有执行完,但是又更高优先级的任务进来了,此时,旧的任务将挂起,先执行新来的高优先级任务,等到高优先级任务执行完,再去执行旧的低优先级任务;如果到了触发时间,有高优先级的任务抢占了低优先级的任务,调度表触发的任务会将任务挂起,之后等到下一个周期在重新执行(前提条件是达到了Expiry Points),而alarm触发的任务是等高优先级任务执行完,就立即执行低优先级任务。原创 2023-10-30 19:30:26 · 497 阅读 · 0 评论 -
OS的Alarm定时器调度机制
调度表的周期性任务与alarm周期性任务可以理解为,如果到了触发时间,如果有高优先级的任务抢占了低优先级的任务,调度表触发的任务会将任务挂起,之后等到下一个周期在重新执行,而而alarm触发的任务是等高优先级任务执行完,就立即执行低优先级任务,alarm是基于全抢占调度机制实现的。如果调度表的周期任务与alarm的周期任务撞上了,调度表中的任务优先级高,那就是调度表的任务执行完后立即执行alarm的任务。原创 2023-10-27 16:39:28 · 1217 阅读 · 0 评论 -
AUTOSAR-自旋锁(spinlock)与互斥锁
AUTOSAR多核OS为实现核间资源互斥,保证数据一致性,设计了自旋锁机制,该机制适用于核间资源互斥。对于多核概念,需要一种新的机制来支持不同内核上任务的互斥。这种新机制不应在同一内核上的 TASK 之间使用,因为它没有意义。在这种情况下,AUTOSAR 操作系统将返回错误。自旋锁的特点就是当一个线程获取了锁之后,其他试图获取这个锁的线程一直在循环等待获取这个锁,直至锁重新可用。由于线程实在一直循环的获取这个锁,所以会造成CPU处理时间的浪费,因此最好将自旋锁用于能很快处理完的临界区。原创 2023-02-20 18:52:43 · 3296 阅读 · 3 评论 -
AUTOSAR-OS的调度机制-调度表(没理解透,继续更新)
注意:Task A在第一个周期中执行时间为3个计数周期,在第二个周期中执行时间为4个计数周期,在第三个周期中执行时间为2个计数周期,在第四个周期中执行时间为3个计数周期,在第五个周期中执行时间为5个计数周期。Task A的间隔时间是指Task A完成一次执行后需要等待的时间,在实际的调度系统中,任务的间隔时间可能会受到多种因素的影响,例如任务的优先级、资源的竞争等。驱动计数器是用于驱动整个调度表运行的计数器,它的计数周期通常是固定的,并且要大于调度表的时间,以确保调度表中的所有任务都能够被执行到。原创 2023-06-07 16:21:53 · 4815 阅读 · 2 评论 -
OS的事件机制-Event
Event在OSEK OS中,其实就是一个flag的作用,如何某个TASK执行了,就调用把flag就置起来,和这个task关联的另一个TASK也执行了,就可以把flag清掉,如果第一个TASK没有执行完,第二个TASK就进入等待状态,直到第一个TASK执行完。OSEK 中的事件是一种可以被多个任务等待的同步机制,任务可以在等待事件时被阻塞,并且在事件发生时被唤醒。它可以用于查询事件标志的状态,以便任务可以根据需要采取相应的行动。原创 2023-06-13 21:03:16 · 1420 阅读 · 0 评论