痞子衡嵌入式:嵌入式Cortex-M系统中断延迟及其测量方法简介

2021年11月26日 阅读数:3
这篇文章主要向大家介绍痞子衡嵌入式:嵌入式Cortex-M系统中断延迟及其测量方法简介,主要内容包括基础应用、实用技巧、原理机制等方面,希望对大家有所帮助。

  你们好,我是痞子衡,是正经搞技术的痞子。今天痞子衡给你们分享的是Cortex-M系统中断延迟及其测量方法微信

  在嵌入式领域里,实时性是个常常被咱们挂在嘴边的概念,这里的实时性主要强调得是当外界事件发生时,系统是否能在规定的时间范围内予以响应处理,这个时间阈值越小,系统的实时性就越高。固然关于这个实时性,也有软硬之分,硬实时要求的是设定的时间阈值内必须完成响应,而软实时则仅需根据任务的优先级尽量快地完成响应便可。ide

  不管是 RTOS 环境仍是裸机环境下,系统最原始的实时性保障其实来自于 MCU 内核的中断响应能力,关于中断响应能力有一个重要指标叫中断延迟时间,今天咱们就来聊一聊 Cortex-M 内核的中断延迟及其测量方法:函数

1、什么是系统中断延迟?

  所谓中断延迟,即从中断请求 IRQ 信号置起开始到内核进入执行该中断 ISR 第一条指令时的间隔,以下图所示, 箭头范围内的 11 个周期就是中断延迟时间。关于这个概念,ARM 公司专家 Joseph Yiu 的一篇博客 《Cortex-M内核系统中断延迟入门指南》 介绍得很详细。post

  为何会有中断延迟?其实这是没法避免的,当内核在执行 main thread 代码时,来了中断事件,NVIC 里对应 IRQ 信号被置起,内核接到 NVIC 通知后压栈保存现场(以便中断 ISR 处理完成时回到被打断的 main thread 地方),而后再从中断向量表里取出对应中断 ISR 来执行,这一系列动做是须要时间的。性能

  Cortex-M 家族发展至今,已有 M0/M0+/M1/M3/M4/M7/M23/M33/M35P/M55 等多款内核,这些内核的中断延迟时间不一,以下表所示。注意表中的数值单位是内核的时钟周期,而且是在零等待内存系统条件下结果(即代码连接在零等待内存里)。优化

  • Note1: 通常来讲 MCU 内部与内核同频的 SRAM 是标准的零等待内存。
  • Note2: 许多运行频率超过 100MHz 的微控制器会搭配很是慢的 Flash 存储器(例如 30 - 50MHz),虽然可使用 Flash 访问加速硬件来提升性能,但中断延迟仍然受到 Flash 存储系统等待状态的影响。

2、如何测量系统中断延迟?

  测量 Cortex-M 的中断延迟方法有不少,任何一个带中断的 MCU 外设模块均可以用来测中断延迟,Cortex-M 中断延迟时间跟触发中断的具体外设模块类型基本上是无关的(最多受一点该外设中断信号同步周期的影响)。ui

  利用 GPIO 模块来测量 Cortex-M 的中断延迟是最简单的方法,选择两个 GPIO,一个配置为输入(GPIO_IN),另外一个配置为上拉输出(GPIO_OUT,初态设为高),开启 GPIO_IN 的边沿中断(好比降低沿),在 GPIO_IN 边沿中断 ISR 里翻转两次 GPIO_OUT,而后用示波器测量两个 GPIO 信号边沿间隔得出中断延迟时间。.net

uint32_t s_pin_low  = 0x0;
uint32_t s_pin_high = 0x1;

void GPIO_IN_IRQHandler(void)
{
    GPIO_OUT->DR = s_pin_low;
    GPIO_OUT->DR = s_pin_high;

    ClearInterruptFlag(GPIO_IN);
    __DSB();
}

  须要注意的是在如上 GPIO_IN_IRQHandler 函数伪代码里,咱们对 GPIO_OUT 作了两次翻转,这是有必要的。咱们随便选择一个 CM7 芯片去实际编译(IAR环境下,无优化)能够看到以下汇编代码,每一次翻转实际上由四条指令组成,咱们做为计时基准的 GPIO_OUT 第一个边沿实际上是 ISR 里执行了第一句翻转代码后的时刻,而中断延迟是不包含第一句翻转代码执行时间的。由于指令流水线优化等复杂状况,咱们就不从理论上计算四条指令实际消耗时钟周期数,直接再翻转一次 GPIO_OUT,测量 GPIO_OUT 低电平时间即认为是这四条指令执行时间。设计

  所以最终中断延迟时间 td = t1 - t2,其中 t一、t2 是咱们能够测量出来的时间。此外,td 时间内包含了 tx,这个 tx 是 I/O 跳变信号到芯片内部 IRQ 置起的时间,这个时间是芯片系统所需的同步时间,因芯片设计而异,本应不被计算在系统中断延迟内,但由于这个时间没法测量,故而就放在中断延迟里了,也算是一点小小偏差吧。3d

  下一篇咱们将在实际 Cortex-M 芯片上用这种方法去实测中断延迟,敬请期待。

  至此,Cortex-M系统中断延迟及其测量方法痞子衡便介绍完毕了,掌声在哪里~~~

欢迎订阅

文章会同时发布到个人 博客园主页CSDN主页知乎主页微信公众号 平台上。

微信搜索"痞子衡嵌入式"或者扫描下面二维码,就能够在手机上第一时间看了哦。