首页 > 其他分享 >stm32 中断处理函数注意事项

stm32 中断处理函数注意事项

时间:2024-02-22 10:35:57浏览次数:27  
标签:重入 调用 函数 中断 不可 stm32 注意事项 处理函数

一 前记 最近在公司的一个项目中碰到一个解决了定位很久的 bug , bug 找到的时候发现犯了很低级的错误——在中断处理函数中调用了 printf 函数,因为中断处理函数的调用了不可重入函数,导致接收到莫名其妙的数据。后面通过定位才发现这个是因为里面调用了不可重入函数导致的。那么,

  • 那什么是不可重入函数呢?
  • 为什么中断处理函数不能直接调用不可重入函数?
  • 怎样写可重入函数?
二 概念 可重入函数主要用于多任务环境中,一个可重入的函数简单来说就是可以被中断的函数,也就是说,可以在这个函数执行的任何时刻中断它,转入 OS 调度下去执行另外一段代码,而返回控制时不会出现什么错误;而不可重入的函数由于使用了一些系统资源,比如全局变量区,中断向量表等,所以它如果被中断的话,可能会出现问题,这类函数是不能运行在多任务环境下的。 满足下列条件的函数多数是不可重入的:
  • 函数体内使用了静态(static)的数据结构;
  • 函数体内调用了 malloc() 或者 free() 函数;
  • 函数体内调用了标准 I/O 函数;
在多任务系统下,中断可能在任务执行的任何时间发生;如果一个函数的执行期间被中断后,到重新恢复到断点进行执行的过程中,函数所依赖的环境没有发生改变,那么这个函数就是可重入的,否则就不可重入。 三 总结 1 总而言之,中断处理函数做的事情越简单越好。 2 戒律:中断服务程序里,尽量不要调用不可重入函数,比如printf,malloc 函数等。

标签:重入,调用,函数,中断,不可,stm32,注意事项,处理函数
From: https://www.cnblogs.com/dylancao/p/18026765

相关文章

  • 国产USB 转串口芯片CH9102替换CP2102 需要改动什么以及注意事项说明
    CH9102是一个USB总线的转接芯片,实现USB转异步串口。提供了常用的MODEM联络信号,用于为计算机扩展异步串口,或者将普通的串口设备或者MCU直接升级到USB总线。CH9102与CP2102可实现pin2pin兼容,可以在不更改硬件设计的前提下实现不同型号间快速切换与产品应用。CH9102系列......
  • seafile升级最新版注意事项(11.05版本为例)
    seafile升级最新版注意事项(11.05版本为例)笔者以当前最新版11.05为例,以下内容为亲测‍1、docker-compose.yml文件不能使用seafileltd/seafile-mc:latest,得用seafileltd/seafile-mc:11.05,具体原因不明,seafileltd/seafile-mc:latest现在是8.07的版本2、升级后会......
  • seafile升级最新版注意事项(11.05版本为例)
    seafile升级最新版注意事项(11.05版本为例)笔者以当前最新版11.05为例,以下内容为亲测‍1、docker-compose.yml文件不能使用seafileltd/seafile-mc:latest,得用seafileltd/seafile-mc:11.05,具体原因不明,seafileltd/seafile-mc:latest现在是8.07的版本2、升级后会......
  • MySQL——数据处理函数
    MySQL——数据处理函数数据处理函数又被称为单行处理函数,单行处理函数的特点:一个输入对应一个输出.语法格式:select单行处理函数(字段名)from表名;常见单行处理函数转换小写:lower()转换大写:upper()取子串:substr(),语法为substr(字段名,头,尾)。注意:起始下标是从1开......
  • 微控制器STM32L475RCT7[IC MCU 32BIT 256KB]、AZ5A25-01F.R7G瞬态抑制二极管(TVS),AONS
    1、微控制器STM32L475RCT7[ICMCU32BIT256KBFLASH64LQFP]STM32L475RC器件是基于高性能ARM®Cortex®-M432位RISC内核的超低功耗微控制器,工作频率高达80MHz。Cortex-M4内核具有浮点单元(FPU)单精度,支持所有ARM单精度数据处理指令和数据类型。它还实现了完整的DSP指令集和存储......
  • STM32 ---SPI通讯
    I2C能够通过软件模拟,同样的,SPI通讯也可以通过软件模拟,具体需要掌握SPI的收发时序。但在本节,我们着重讲解STM32的硬件SPI外设。 我们知道SPI有以下几个特点1、时钟频率:Fpclk/2,4,8,16,32,64,128,256(Fpclk是时钟分频,APH2的Fpclk是72MHZ,APB1的Fpclk是36MHZ)2、支持多主机模型......
  • STM32笔记
    整理有道云笔记中,关于STM32的笔记Keil软件中map文件解析简单的说:map文件是通过编译器编译之后,集程序、数据及IO空间的一种映射文件。遇到内存越界,或者溢出的情况,可以通过map文件,去确定函数大小,入口地址等一些重要信息。我们在Keil中最常见的就是在编译之后,编译窗口会显示类......
  • 基于stm32的spi接口dma 数据收发实例解析
    一前记  SPI接口平时用的比较少,再加上对CUBEMX不是很熟悉,这里踩了不少坑才把问题解决。针对遇到了不少问题,是要值得梳理一下了。二源码解析1SPI的DMA发送端配置: 2主函数源码:uint32_tg_spi_cnt=0;voidHAL_SPI_TxCpltCallback(SPI_HandleTypeDef*hspi){......
  • STM32 SPI接口 DMA normal 和circual区别
     DMA有normal和circular两种模式。circular模式:就调用这个函数一次就可以了,DMA一直开启,一帧数据发送完毕之后里面发送下一帧,中间没有停顿。这样确实是快了,也释放了CPU,各路的数据采集因为缺少了等待串口发送的时间,所以就间接提高的了数据更新速率。但有个致命缺陷:数据采集和数......
  • 2024-02-18-物联网C语言(7-字符串处理函数)
    7.字符串7.1获取字符串的长度函数-strlen头文件:#include<string.h>函数定义:size_tstrlen(constchar*s)参数:s-指定的字符串返回值:当前字符串的长度#include<stdio.h>#include<string.h>intmain(intargc,charconst*argv[]){//使用strlen获取字符......