0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
电子发烧友
开通电子发烧友VIP会员 尊享10大特权
海量资料免费下载
精品直播免费看
优质内容免费畅学
课程9折专享价
創(chuàng)作中心

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

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

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

黃工的嵌入式技術(shù)圈 ? 來源:黃工的嵌入式技術(shù)圈 ? 2020-03-07 16:42 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

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

1問題來源

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

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

2問題跟蹤,并解決

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

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

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

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

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

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

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

3總結(jié)

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

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

宏定義與源代碼最好要高度一致,就拿USART時(shí)鐘的宏定義來說,如下這種方式就容易出錯(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)問題沒有:

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

2.B .含義

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

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

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

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

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

一般很多初學(xué)者不知道函數(shù)接口可以使用宏定義。其實(shí),有很多地方,包括一些標(biāo)準(zhǔn)的代碼都有用到使用宏定義函數(shù)接口。拿我們比較熟悉的FreeRTOS來說,為了移植方便,使用宏定義三個(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ī)問題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • 源代碼
    +關(guān)注

    關(guān)注

    96

    文章

    2953

    瀏覽量

    68188
  • USART
    +關(guān)注

    關(guān)注

    1

    文章

    201

    瀏覽量

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

    關(guān)注

    0

    文章

    51

    瀏覽量

    9210
收藏 0人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評(píng)論

    相關(guān)推薦
    熱點(diǎn)推薦

    第十章 W55MH32中斷應(yīng)用概覽

    本章講述了W55MH32中斷應(yīng)用,涵蓋異常類型、NVIC介紹、優(yōu)先級(jí)定義與分組,闡述中斷編程三要點(diǎn)(使能中斷、配置 NVIC、編寫服務(wù)函數(shù)
    的頭像 發(fā)表于 05-22 17:07 ?945次閱讀
    第十章 W55MH32<b class='flag-5'>中斷</b>應(yīng)用概覽

    掃描電鏡的日常維護(hù)有哪些注意事項(xiàng)?

    掃描電鏡日常維護(hù)的注意事項(xiàng)。
    的頭像 發(fā)表于 03-24 11:38 ?450次閱讀
    掃描電鏡的日常維護(hù)有哪些<b class='flag-5'>注意事項(xiàng)</b>?

    智多晶DDR Controller使用注意事項(xiàng)

    最后一期我們主要介紹智多晶DDR Controller使用時(shí)的注意事項(xiàng)
    的頭像 發(fā)表于 01-24 11:14 ?690次閱讀
    智多晶DDR Controller使用<b class='flag-5'>注意事項(xiàng)</b>

    AN20-儀表低通濾波器的應(yīng)用注意事項(xiàng)

    電子發(fā)燒友網(wǎng)站提供《AN20-儀表低通濾波器的應(yīng)用注意事項(xiàng).pdf》資料免費(fèi)下載
    發(fā)表于 01-12 11:25 ?0次下載
    AN20-儀表低通濾波器的應(yīng)用<b class='flag-5'>注意事項(xiàng)</b>

    多層板埋孔設(shè)計(jì)注意事項(xiàng)

    多層板埋孔設(shè)計(jì)注意事項(xiàng)
    的頭像 發(fā)表于 12-20 16:06 ?768次閱讀

    PCBA生產(chǎn)注意事項(xiàng)

    ? ?PCBA生產(chǎn)注意事項(xiàng)。 長(zhǎng)按識(shí)別二維碼關(guān)注[現(xiàn)代電子裝聯(lián)工藝技術(shù)]訂閱號(hào),開啟我們共同的學(xué)習(xí)之旅 end
    的頭像 發(fā)表于 11-15 17:04 ?816次閱讀
    PCBA生產(chǎn)<b class='flag-5'>注意事項(xiàng)</b>

    TPA3140D2 EMC設(shè)計(jì)注意事項(xiàng)

    電子發(fā)燒友網(wǎng)站提供《TPA3140D2 EMC設(shè)計(jì)注意事項(xiàng).pdf》資料免費(fèi)下載
    發(fā)表于 10-26 11:02 ?0次下載
    TPA3140D2 EMC設(shè)計(jì)<b class='flag-5'>注意事項(xiàng)</b>

    如何為住宅配置靜態(tài)IP:步驟與注意事項(xiàng)

    為住宅配置靜態(tài)IP地址,通常涉及以下步驟和注意事項(xiàng)
    的頭像 發(fā)表于 10-24 08:02 ?950次閱讀

    TPS65233、TPS65235的LNB設(shè)計(jì)注意事項(xiàng)

    電子發(fā)燒友網(wǎng)站提供《TPS65233、TPS65235的LNB設(shè)計(jì)注意事項(xiàng).pdf》資料免費(fèi)下載
    發(fā)表于 10-08 09:58 ?4次下載
    TPS65233、TPS65235的LNB設(shè)計(jì)<b class='flag-5'>注意事項(xiàng)</b>

    使用USB接口注意事項(xiàng)

    USB接口作為現(xiàn)代電子設(shè)備中最為常見的接口之一,因其便捷性和通用性而廣受用戶歡迎。然而,為了確保USB接口及其連接設(shè)備的安全、穩(wěn)定和高效運(yùn)行,用戶在使用時(shí)需要注意一系列
    的頭像 發(fā)表于 09-30 14:13 ?2157次閱讀

    脈沖式充電器的使用注意事項(xiàng)

    脈沖式充電器的使用注意事項(xiàng)主要包括以下幾個(gè)方面: 一、安全注意事項(xiàng) 用電安全 :在充電過程中,應(yīng)始終保持警惕,注意用電安全,避免觸電和短路等危險(xiǎn)情況的發(fā)生。 防火防災(zāi) :避免在易燃易爆物品附近進(jìn)行
    的頭像 發(fā)表于 09-26 16:05 ?2388次閱讀

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

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

    共模電感定制的注意事項(xiàng)

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

    LiFePO4設(shè)計(jì)注意事項(xiàng)

    電子發(fā)燒友網(wǎng)站提供《LiFePO4設(shè)計(jì)注意事項(xiàng).pdf》資料免費(fèi)下載
    發(fā)表于 09-03 09:24 ?0次下載
    LiFePO4設(shè)計(jì)<b class='flag-5'>注意事項(xiàng)</b>

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

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

    電子發(fā)燒友

    中國(guó)電子工程師最喜歡的網(wǎng)站

    • 2931785位工程師會(huì)員交流學(xué)習(xí)
    • 獲取您個(gè)性化的科技前沿技術(shù)信息
    • 參加活動(dòng)獲取豐厚的禮品