0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

宏定义 “中断函数接口”的注意事项

黄工的嵌入式技术圈 来源:黄工的嵌入式技术圈 2020-03-07 16:42 次阅读

今天周六,写点轻松一点的内容,相信很多朋友都有使用宏定义的经历。宏定义写得好,你的代码修改、调试、移植等都方便;相反,写的不好,可能你的头脑会炸掉。

1问题来源

我前面移植一部分代码,忽略了一些细节问题,直接测试,一有数据(正常应该是进入中断),程序就挂了,进入了“B .”处,如下图:

这代表什么意思呢?网上一搜B .的意思就知道,程序运行到这个地方,在这里死循环了。

2问题跟踪,并解决

遇到上面问题,于是我就开始了在线调试查找问题。果然,在线调试一眼就看出了问题,中断函数体没有被触发,先看下图:

看上图,经常调试的人就知道,前面没有灰色的标记代表程序不会运行到这个位置。

上面那个DEBUG_COM_IRQHandler函数,我使用的是宏定义:

那么,问题来了,我使用了宏定义中断函数接口,为什么没有进入中断函数?

问题就出在宏定义和被定义函数体的包含关系,简单说就是:stm32f4xx_it.c文件里面应该添加#include "bsp_usart.h"这行代码。

不添加包含宏定义的文件,编译时就会把DEBUG_COM_IRQHandler当做成一个普通函数,也不会出错。此时,中断函数其实是没有定义的,那么,程序运行中断函数时,没有定义函数体,自然就会跳转到B .处去。

解决的办法就如上所说:stm32f4xx_it.c文件添加添加#include "bsp_usart.h"即可。

3总结

针对以上问题,拓展并总结几点内容:

1.宏定义注意事项

宏定义与源代码最好要高度一致,就拿USART时钟的宏定义来说,如下这种方式就容易出错。

宏定义:

#define DEBUG_COM_CLK RCC_APB2Periph_USART1

调用方式:

RCC_APB2PeriphClockCmd(DEBUG_COM_CLK, ENABLE);

假如我修改时钟:

RCC_APB2Periph_USART1改为RCC_APB1Periph_USART2

发现问题没有:

APB2和APB1混乱调用了。

2.B .含义

这里提出来,是让有些初学者顺便了解一下(其实网上一搜就明白)。这是一个汇编指令,“B”代表不返回的跳转,比如跳到某个标号处。“.”是指定当前的地址,B .这条指令,其实就是死循环。

3.在线调试代码覆盖

经常有朋友问题:我在线调试,为什么有些地方不能打断点?处理需要配置输出调试信息之外,就是这里说的代码覆盖问题。

看见我上面有两个中断函数那张图没有,里面我有文字说明:前面有灰色标记的代码,代表程序可执行(已覆盖)。相反,则没有被覆盖。

4.中断函数接口宏定义

一般很多初学者不知道函数接口可以使用宏定义。其实,有很多地方,包括一些标准的代码都有用到使用宏定义函数接口。拿我们比较熟悉的FreeRTOS来说,为了移植方便,使用宏定义三个中断函数,如下图:

这里需要注意的就如上面分析的,包含关系需加上。

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 源代码
    +关注

    关注

    96

    文章

    2944

    浏览量

    66644
  • USART
    +关注

    关注

    1

    文章

    195

    浏览量

    30779
  • 宏定义
    +关注

    关注

    0

    文章

    50

    浏览量

    9000
收藏 人收藏

    评论

    相关推荐

    使用USB接口注意事项

    USB接口作为现代电子设备中最为常见的接口之一,因其便捷性和通用性而广受用户欢迎。然而,为了确保USB接口及其连接设备的安全、稳定和高效运行,用户在使用时需要注意一系列
    的头像 发表于 09-30 14:13 433次阅读

    绕线电感定制的注意事项

    电子发烧友网站提供《绕线电感定制的注意事项.docx》资料免费下载
    发表于 09-20 11:24 0次下载

    LiFePO4设计注意事项

    电子发烧友网站提供《LiFePO4设计注意事项.pdf》资料免费下载
    发表于 09-03 09:24 0次下载
    LiFePO4设计<b class='flag-5'>注意事项</b>

    人机接口电感式触摸按钮的设计注意事项

    电子发烧友网站提供《人机接口电感式触摸按钮的设计注意事项.pdf》资料免费下载
    发表于 08-30 09:30 2次下载
    人机<b class='flag-5'>接口</b>电感式触摸按钮的设计<b class='flag-5'>注意事项</b>

    24芯M16接口加工注意事项

     德索工程师说道在加工24芯M16接口时,为确保接口的质量、性能和可靠性,需要严格遵循一系列注意事项。以下是对这些注意事项的详细阐述:   金属针脚:采用优质黄铜或铜合金材料,确
    的头像 发表于 06-24 16:58 291次阅读
    24芯M16<b class='flag-5'>接口</b>加工<b class='flag-5'>注意事项</b>

    FPGA的高速接口应用注意事项

    FPGA的高速接口应用注意事项主要包括以下几个方面: 信号完整性与电磁兼容性(EMC) : 在设计FPGA高速接口时,必须充分考虑信号完整性和电磁兼容性。这要求合理的PCB布局、走线策略和屏蔽技术
    发表于 05-27 16:02

    函数发生器的使用方法和注意事项

    函数发生器,作为电子测试和测量领域的重要工具,广泛应用于生产测试、仪器维修、实验室研究以及通讯等多个科技领域。它的主要功能是产生各种波形、频率和幅度的信号,以满足不同的测试需求。本文将详细介绍函数发生器的使用方法及注意事项,以帮
    的头像 发表于 05-15 11:44 1594次阅读

    FMD LINK 使用注意事项

    电子发烧友网站提供《FMD LINK 使用注意事项.pdf》资料免费下载
    发表于 05-06 10:11 0次下载

    浪涌抑制器的应用及注意事项

    浪涌抑制器的应用及注意事项?|深圳比创达电子
    的头像 发表于 01-19 09:55 679次阅读
    浪涌抑制器的应用及<b class='flag-5'>注意事项</b>?

    STM32ADC中断的使用注意事项和优化建议

    STM32ADC中断的使用注意事项和优化建议 STM32ADC(模拟数字转换器)是STMicroelectronics开发的一款用于外部模拟信号转换为数字信号的器件。在使用STM32ADC时,合理地
    的头像 发表于 01-12 15:17 3107次阅读

    霍尔元件使用的注意事项

    霍尔元件使用的注意事项  霍尔元件是一种常见的电子元件,主要用于测量和检测磁场的变化。它具有灵敏度高、响应速度快、耐磁场干扰等优点,在各种应用中得到广泛使用。然而,为了确保霍尔元件的正常工作和延长其
    的头像 发表于 12-18 14:56 1194次阅读

    电流互感器的使用注意事项

    当谈到电流互感器的使用时,有一些重要的注意事项需要我们牢记。在本文中,我们将探讨这些注意事项,为您提供详细和全面的信息。
    的头像 发表于 12-15 10:34 1353次阅读
    电流互感器的使用<b class='flag-5'>注意事项</b>

    J-Link 中的JTAG 接口:正确使用需要了解的注意事项,在这里!

    J-Link 中的JTAG 接口:正确使用需要了解的注意事项,在这里!
    的头像 发表于 12-01 16:01 1379次阅读
    J-Link 中的JTAG <b class='flag-5'>接口</b>:正确使用需要了解的<b class='flag-5'>注意事项</b>,在这里!

    音频接口电路的PCB设计注意事项

    音频接口电路的PCB设计注意事项
    的头像 发表于 11-23 17:42 1113次阅读
    音频<b class='flag-5'>接口</b>电路的PCB设计<b class='flag-5'>注意事项</b>

    VGA OUT 的PCB设计注意事项

    VGA OUT 的PCB设计注意事项
    的头像 发表于 11-23 09:04 789次阅读