RTOS的发展之Armv7-M
ARMv7-M于2006(文件版本=A)问世,最近一次改版是2021(文件版本=E.e),市场上能搜寻到的产品琳琅满目,属于非常成熟的商品。本文多次引用的Cortex-M4,即属Armv7E-M的架构。
以一个问世十多年、且广受欢迎的平台来说,其设计应有独到之处,本节将列出几项值得关注的特性。
从架构谈起
Cortex-M平台在最初设计时,已将Coprocessor纳入考虑,且最多可支持16个协同处理器。M4内置的FPU,就是使用第10,11两个位置,透过它,M4可以快速的处理单精度的浮点数,对比传统的软件方式,效能上有10倍以上的提升。
除了FPU外,Armv7E-M架构还内含了DSP指令集,在SIMD,Saturate,Q-Format等指令的助攻下,使得32 bit Cortex-M4在运算能力上,来到了一个新的高度,已经远远的、超过了早期8 bit MCU的水准。
除此之外,ARM在除错的支持上非常齐全,但不在本次的讨论范围。
运作模式的探讨
Cortex-M的内核,支持两种运作模式,分别是Thread mode,以及Handler mode,后者是发生中断时,CPU所切换的模式。
Thread mode提供两个特权等级,分别是Privileged及Unprivileged,一般的作法,会让OS有特权,应用程序则无,此外,透过CONTROL寄存器,还可选择使用不同的堆栈指针(MSP or PSP)。
看似平常的模式,其实有下列几个亮点:(1)Handler mode的离开方式,跟一般函式相同。(2)CPU进出Handler时,硬件会自动PUSH/POP多个缓存器。(3)内建的异步PendSV例外功能。(4)异步例外支持Active and Pending state。
中断及例外处理的优先权
全系列的Cortex-M都内建了NVIC,NVIC(Nested Vectored Interrupt Controller)紧密的整合于核心旁,可支持高达496个中断、并提供256阶优先权。
NVIC所提供的巢状中断服务,由硬件执行ISR的Preemption工作,还加码Late arrival及Tail chaining机制。
电源管理指令
Cortex-M将电源管理直接指令化,WFI(Wait For Interrupt)及WFE(Wait For Event),可使CPU快速的进入睡眠、省电状态(Low Power State)。
搭配SCR(System Control Register)的多个旗标:SEVONPEND,SLEEPONEXIT,SLEEPDEEP等,还可执行进阶的设定。
无锁的同步指令
为了解决关键区段的保护问题,并避免关闭中断造成的损失,Armv7-M的LDREX/STREX,以指令的方式,达成non-blocking的内存同步请求。由硬件协助确保read-modify-write的正确性。
A fit real time kernel for Cortex-M
谈了许多RTOS的缺点,又列出了Armv7-M的特色后,我们是否应跳出旧的思维,并以创意及创新的观点,提出新的RTOS软件作法呢?
作者:科技下午茶啃泥https://www.bilibili.com/read/cv15839248?spm_id_from=333.999.0.0
加入微信
获取电子行业最新资讯
搜索微信公众号:EEPW
或用微信扫描左侧二维码