Cortex-M3之STM32嵌入式系统设计的内容简介

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Cortex-M3之STM32嵌入式系统设计的内容简介相关的知识,希望对你有一定的参考价值。

参考技术A

本书分为stm32基础开发、stm32深入开发以及stm32高级开发三部分。基础开发部分介绍了嵌入式系统概述、stm32最小系统设计、stm32程序设计入门、gpio应用、gcc编译器的安装与应用、stm32外部中断、面向对象设计的本质、usart通信等内容;深入开发部分介绍了深入stm32的工作原理、定时器与日历、adc应用、dma应用、备份寄存器与看门狗程序、tft驱动与显示、触摸屏驱动、sd卡驱动与fat文件系统等;在高级开发部分介绍?c/os-ii在stm32上的移植、汉字与图形图像显示、摄像头驱动与图像采集、以太网及web远程控制系统设计等内容。
《cortex-m3之stm32嵌入式系统设计》配套光盘中附有所有章节的源程序。本书适合于嵌入式开发人员作为开发参考资料,也适合于高校师生作为单片机、嵌入式系统课程的教材和教学参考书。

Cortex-M系统中断延迟及其测量方法

关注+星标公众,不错过精彩内容

转自 | 痞子衡嵌入式

今天给大家分享的是Cortex-M系统中断延迟及其测量方法

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

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

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

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

为什么会有中断延迟?其实这是无法避免的,当内核在执行 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 存储系统等待状态的影响。

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

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

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

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,其中 t1、t2 是我们可以测量出来的时间。此外,td 时间内包含了 tx,这个 tx 是 I/O 跳变信号到芯片内部 IRQ 置起的时间,这个时间是芯片系统所需的同步时间,因芯片设计而异,本应不被计算在系统中断延迟内,但因为这个时间无法测量,故而就放在中断延迟里了,也算是一点小小误差吧。

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

至此,Cortex-M系统中断延迟及其测量方法便介绍完毕了,欢迎大家转发分享。

------------ END ------------


●精选 | ST工具、下载编程工具

●精选 | 嵌入式软件设计与开发

●精选 | 软件工具、 编译器、 编辑器

迎关注我的公众号回复“加群”按规则加入技术交流群,回复“1024”查看更多内容。

欢迎关注我的视频号:

点击“阅读原文”查看更多分享,欢迎点分享、收藏、点赞、在看。

以上是关于Cortex-M3之STM32嵌入式系统设计的内容简介的主要内容,如果未能解决你的问题,请参考以下文章

七步实现STM32MP157多核协同工作(Cortex-A7与Cortex-M4通信)

Ubuntu:交叉编译 STM32 (Cortex-M3) 时使用啥 gcc?

毕业设计之 - 题目:基于stm32的WiFi监控小车

第23章 RTX 低功耗之待机模式

《嵌入式 - 深入剖析STM32》深入理解STM32内存管理

《嵌入式 - 深入剖析STM32》深入理解STM32内存管理