0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

宏定義 “中斷函數(shù)接口”的注意事項(xiàng)

黃工的嵌入式技術(shù)圈 ? 來(lái)源:黃工的嵌入式技術(shù)圈 ? 2020-03-07 16:42 ? 次閱讀

今天周六,寫點(diǎn)輕松一點(diǎn)的內(nèi)容,相信很多朋友都有使用宏定義的經(jīng)歷。宏定義寫得好,你的代碼修改、調(diào)試、移植等都方便;相反,寫的不好,可能你的頭腦會(huì)炸掉。

1問(wèn)題來(lái)源

我前面移植一部分代碼,忽略了一些細(xì)節(jié)問(wèn)題,直接測(cè)試,一有數(shù)據(jù)(正常應(yīng)該是進(jìn)入中斷),程序就掛了,進(jìn)入了“B .”處,如下圖:

這代表什么意思呢?網(wǎng)上一搜B .的意思就知道,程序運(yùn)行到這個(gè)地方,在這里死循環(huán)了。

2問(wèn)題跟蹤,并解決

遇到上面問(wèn)題,于是我就開(kāi)始了在線調(diào)試查找問(wèn)題。果然,在線調(diào)試一眼就看出了問(wèn)題,中斷函數(shù)體沒(méi)有被觸發(fā),先看下圖:

看上圖,經(jīng)常調(diào)試的人就知道,前面沒(méi)有灰色的標(biāo)記代表程序不會(huì)運(yùn)行到這個(gè)位置。

上面那個(gè)DEBUG_COM_IRQHandler函數(shù),我使用的是宏定義:

那么,問(wèn)題來(lái)了,我使用了宏定義中斷函數(shù)接口,為什么沒(méi)有進(jìn)入中斷函數(shù)?

問(wèn)題就出在宏定義和被定義函數(shù)體的包含關(guān)系,簡(jiǎn)單說(shuō)就是:stm32f4xx_it.c文件里面應(yīng)該添加#include "bsp_usart.h"這行代碼。

不添加包含宏定義的文件,編譯時(shí)就會(huì)把DEBUG_COM_IRQHandler當(dāng)做成一個(gè)普通函數(shù),也不會(huì)出錯(cuò)。此時(shí),中斷函數(shù)其實(shí)是沒(méi)有定義的,那么,程序運(yùn)行中斷函數(shù)時(shí),沒(méi)有定義函數(shù)體,自然就會(huì)跳轉(zhuǎn)到B .處去。

解決的辦法就如上所說(shuō):stm32f4xx_it.c文件添加添加#include "bsp_usart.h"即可。

3總結(jié)

針對(duì)以上問(wèn)題,拓展并總結(jié)幾點(diǎn)內(nèi)容:

1.宏定義注意事項(xiàng)

宏定義與源代碼最好要高度一致,就拿USART時(shí)鐘的宏定義來(lái)說(shuō),如下這種方式就容易出錯(cuò)。

宏定義:

#define DEBUG_COM_CLK RCC_APB2Periph_USART1

調(diào)用方式:

RCC_APB2PeriphClockCmd(DEBUG_COM_CLK, ENABLE);

假如我修改時(shí)鐘:

RCC_APB2Periph_USART1改為RCC_APB1Periph_USART2

發(fā)現(xiàn)問(wèn)題沒(méi)有:

APB2和APB1混亂調(diào)用了。

2.B .含義

這里提出來(lái),是讓有些初學(xué)者順便了解一下(其實(shí)網(wǎng)上一搜就明白)。這是一個(gè)匯編指令,“B”代表不返回的跳轉(zhuǎn),比如跳到某個(gè)標(biāo)號(hào)處?!?”是指定當(dāng)前的地址,B .這條指令,其實(shí)就是死循環(huán)。

3.在線調(diào)試代碼覆蓋

經(jīng)常有朋友問(wèn)題:我在線調(diào)試,為什么有些地方不能打斷點(diǎn)?處理需要配置輸出調(diào)試信息之外,就是這里說(shuō)的代碼覆蓋問(wèn)題。

看見(jiàn)我上面有兩個(gè)中斷函數(shù)那張圖沒(méi)有,里面我有文字說(shuō)明:前面有灰色標(biāo)記的代碼,代表程序可執(zhí)行(已覆蓋)。相反,則沒(méi)有被覆蓋。

4.中斷函數(shù)接口宏定義

一般很多初學(xué)者不知道函數(shù)接口可以使用宏定義。其實(shí),有很多地方,包括一些標(biāo)準(zhǔn)的代碼都有用到使用宏定義函數(shù)接口。拿我們比較熟悉的FreeRTOS來(lái)說(shuō),為了移植方便,使用宏定義三個(gè)中斷函數(shù),如下圖:

這里需要注意的就如上面分析的,包含關(guān)系需加上。

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • 源代碼
    +關(guān)注

    關(guān)注

    96

    文章

    2942

    瀏覽量

    66444
  • USART
    +關(guān)注

    關(guān)注

    1

    文章

    195

    瀏覽量

    30681
  • 宏定義
    +關(guān)注

    關(guān)注

    0

    文章

    48

    瀏覽量

    8956
收藏 人收藏

    評(píng)論

    相關(guān)推薦

    繞線電感定制的注意事項(xiàng)

    電子發(fā)燒友網(wǎng)站提供《繞線電感定制的注意事項(xiàng).docx》資料免費(fèi)下載
    發(fā)表于 09-20 11:24 ?0次下載

    人機(jī)接口電感式觸摸按鈕的設(shè)計(jì)注意事項(xiàng)

    電子發(fā)燒友網(wǎng)站提供《人機(jī)接口電感式觸摸按鈕的設(shè)計(jì)注意事項(xiàng).pdf》資料免費(fèi)下載
    發(fā)表于 08-30 09:30 ?0次下載
    人機(jī)<b class='flag-5'>接口</b>電感式觸摸按鈕的設(shè)計(jì)<b class='flag-5'>注意事項(xiàng)</b>

    24芯M16接口加工注意事項(xiàng)

     德索工程師說(shuō)道在加工24芯M16接口時(shí),為確保接口的質(zhì)量、性能和可靠性,需要嚴(yán)格遵循一系列注意事項(xiàng)。以下是對(duì)這些注意事項(xiàng)的詳細(xì)闡述:   金屬針腳:采用優(yōu)質(zhì)黃銅或銅合金材料,確
    的頭像 發(fā)表于 06-24 16:58 ?198次閱讀
    24芯M16<b class='flag-5'>接口</b>加工<b class='flag-5'>注意事項(xiàng)</b>

    FPGA的高速接口應(yīng)用注意事項(xiàng)

    FPGA的高速接口應(yīng)用注意事項(xiàng)主要包括以下幾個(gè)方面: 信號(hào)完整性與電磁兼容性(EMC) : 在設(shè)計(jì)FPGA高速接口時(shí),必須充分考慮信號(hào)完整性和電磁兼容性。這要求合理的PCB布局、走線策略和屏蔽技術(shù)
    發(fā)表于 05-27 16:02

    函數(shù)發(fā)生器的使用方法和注意事項(xiàng)

    函數(shù)發(fā)生器,作為電子測(cè)試和測(cè)量領(lǐng)域的重要工具,廣泛應(yīng)用于生產(chǎn)測(cè)試、儀器維修、實(shí)驗(yàn)室研究以及通訊等多個(gè)科技領(lǐng)域。它的主要功能是產(chǎn)生各種波形、頻率和幅度的信號(hào),以滿足不同的測(cè)試需求。本文將詳細(xì)介紹函數(shù)發(fā)生器的使用方法及注意事項(xiàng),以幫
    的頭像 發(fā)表于 05-15 11:44 ?1005次閱讀

    FMD LINK 使用注意事項(xiàng)

    電子發(fā)燒友網(wǎng)站提供《FMD LINK 使用注意事項(xiàng).pdf》資料免費(fèi)下載
    發(fā)表于 05-06 10:11 ?0次下載

    STM32ADC中斷的使用注意事項(xiàng)和優(yōu)化建議

    STM32ADC中斷的使用注意事項(xiàng)和優(yōu)化建議 STM32ADC(模擬數(shù)字轉(zhuǎn)換器)是STMicroelectronics開(kāi)發(fā)的一款用于外部模擬信號(hào)轉(zhuǎn)換為數(shù)字信號(hào)的器件。在使用STM32ADC時(shí),合理地
    的頭像 發(fā)表于 01-12 15:17 ?2540次閱讀

    霍爾元件使用的注意事項(xiàng)

    霍爾元件使用的注意事項(xiàng)? 霍爾元件是一種常見(jiàn)的電子元件,主要用于測(cè)量和檢測(cè)磁場(chǎng)的變化。它具有靈敏度高、響應(yīng)速度快、耐磁場(chǎng)干擾等優(yōu)點(diǎn),在各種應(yīng)用中得到廣泛使用。然而,為了確?;魻栐恼9ぷ骱脱娱L(zhǎng)其
    的頭像 發(fā)表于 12-18 14:56 ?1009次閱讀

    電流互感器的使用注意事項(xiàng)

    當(dāng)談到電流互感器的使用時(shí),有一些重要的注意事項(xiàng)需要我們牢記。在本文中,我們將探討這些注意事項(xiàng),為您提供詳細(xì)和全面的信息。
    的頭像 發(fā)表于 12-15 10:34 ?1070次閱讀
    電流互感器的使用<b class='flag-5'>注意事項(xiàng)</b>

    J-Link 中的JTAG 接口:正確使用需要了解的注意事項(xiàng),在這里!

    J-Link 中的JTAG 接口:正確使用需要了解的注意事項(xiàng),在這里!
    的頭像 發(fā)表于 12-01 16:01 ?1179次閱讀
    J-Link 中的JTAG <b class='flag-5'>接口</b>:正確使用需要了解的<b class='flag-5'>注意事項(xiàng)</b>,在這里!

    音頻接口電路的PCB設(shè)計(jì)注意事項(xiàng)

    音頻接口電路的PCB設(shè)計(jì)注意事項(xiàng)
    的頭像 發(fā)表于 11-23 17:42 ?844次閱讀
    音頻<b class='flag-5'>接口</b>電路的PCB設(shè)計(jì)<b class='flag-5'>注意事項(xiàng)</b>

    VGA OUT 的PCB設(shè)計(jì)注意事項(xiàng)

    VGA OUT 的PCB設(shè)計(jì)注意事項(xiàng)
    的頭像 發(fā)表于 11-23 09:04 ?646次閱讀

    java中equals()方法的注意事項(xiàng)

    會(huì)有不同的注意事項(xiàng)。在本文中,我們將詳細(xì)討論equals()方法的注意事項(xiàng),并解釋如何正確使用它來(lái)比較兩個(gè)對(duì)象。 首先,我們來(lái)看一下equals()方法的基本定義: public boolean
    的頭像 發(fā)表于 11-17 16:59 ?625次閱讀

    FAQ0133外設(shè)事件中斷響應(yīng)流程及注意事項(xiàng)

    外設(shè)事件中斷響應(yīng)流程及注意事項(xiàng)介紹一種保障回調(diào)任務(wù)可被精確響應(yīng)的方法
    發(fā)表于 10-23 07:47

    C語(yǔ)言中函數(shù)定義和用法

    函數(shù)是一種特殊的函數(shù),與普通函數(shù)不同的是,它可以擁有多條語(yǔ)句和局部變量,從而實(shí)現(xiàn)更復(fù)雜的功
    發(fā)表于 10-11 11:32 ?2772次閱讀
    C語(yǔ)言中<b class='flag-5'>宏</b><b class='flag-5'>函數(shù)</b>的<b class='flag-5'>定義</b>和用法