色哟哟视频在线观看-色哟哟视频在线-色哟哟欧美15最新在线-色哟哟免费在线观看-国产l精品国产亚洲区在线观看-国产l精品国产亚洲区久久

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

如何判斷CPU是否正在執行中斷函數?

5RJg_mcuworld ? 來源:未知 ? 作者:胡薇 ? 2018-09-04 17:30 ? 次閱讀

1.這是一個有許多經驗的攻城獅都遇到過的坑,本文教你正確繞過這個坑;

2.教大家了解__get_CONTROL的用法,及xQueueSend和xQueueSendFromISR的區別;

Ⅰ問題來源

今天在FreeRTOS系統上移植了部分別人寫的代碼,移植前仔細看了下源碼,確認沒問題后,編譯,下載,運行,突然“死機了”······

于是,我又再次確認了移植的代碼,沒有發現Bug所在。此時,我開啟了在線調試功能,發現程序死在了“vPortEnterCritical”函數中的斷言語句里。如下:

Ⅱ解決問題的過程

我解決問題還是按照常規思維,一步一步跟蹤,很多問題其實都是類似道理,有規律可循。

1.查看configASSERT斷言做了什么事?

跟蹤代碼:

#define configASSERT( x ) if( ( x ) == 0 ) { taskDISABLE_INTERRUPTS(); for( ;; ); }

其中,里面taskDISABLE_ INTERRUPTS();就是關中斷的意思。緊跟著后面執行了for( ;; );

看到這里,我明白了一點,就是死在for( ;; );里面了。

2.進一步查找問題

我又開始了思考,為什么會執行到這里來呢?為什么會執行portDISABLE_INTERRUPTS(); uxCriticalNesting++; if( uxCriticalNesting == 1 )等這些語句呢?

這就是我們常說的“臨界段”,這一點我學習RTOS的時候已經明白了,這一個函數肯定會被調用。于是,我把目標鎖定了portNVIC_INT_CTRL_REG這個參數

#define portNVIC_INT_CTRL_REG ( * ( ( volatile uint32_t * ) 0xe000ed04 ) )

0xe000ed04? 這個地址,相信之前了解過NVIC的都知道,就是Interrupt control state register.即中斷控制狀態寄存器

3.確定問題點

從上面的分析,其實問題都已經浮現出來了。于是查看了【Cortex-M3權威指南】中相關的內容。(PS:這本手冊真的能解決很多問題,翻譯成中文,對大部分朋友來說是一件好事)

其實,有這個一個寄存器:控制寄存器(CONTROL),里面講述的非常清楚:

看上圖,大概意思就是:在中斷模式下,CONTROL[1]為0。于是,又把思路轉向了core_cm3.c文件中的源碼:

__ASM uint32_t __get_CONTROL(void) { mrs r0, control bx lr }

懂一點匯編的,相信在這里都已經明白,大概意思就是過去控制寄存器狀態,這也是我開篇說的,讓大家了解的__get_CONTROL。

4.在線調試,分析結論

上面分析出來控制寄存器CONTROL,那么我們需要驗證是否符合我們預期的效果,通過在線調試,斷電就可得出,如下面兩圖:

a.在非中斷情況下的值0x02

b.在中斷情況下的值0x00

至此,問題已經查明就是CONTROL。

Ⅲget_CONTROL的應用

一般在RTOS實時操作系統中,常常使用隊列來處理我們的數據,也就是常說的FIFO(先入先出)。

比如:我們在FreeRTOS系統中,要將UART發送、或者接收的數據加入隊列:在中斷里加入隊列,在非中斷里加入隊列。這個時候,就需要使用get_CONTROL來判斷當前是否處于中斷函數里。

當然,類似的情況很多,像CANI2C、SPI等一樣的道理。

舉例,CAN總線發送數據加入隊列:

Ⅳ多說兩句

以上的分析,看似很簡單,其實包含的內容很多,可能有很多人覺得:這些問題對于我來說是小菜一碟。

說句實話,我和大家一樣,都是慢慢學習過來的,這里面跳過的坑其實很多,是因為我跳過了太多的坑,所以才會對一些問題更加了解。

上面類似的問題,在我學習RTOS、移植CANOpen等等那些時候都有遇到過,想要知道我遇到那些問題,處理起來難不難,明確回答:很多問題在初學的時候都很難,但我還是走過來了。

說到這里,多說一句,關于問問題的話,后臺每天都有許多人問我問題,但是有些問題其實真的很簡單,比如:編譯有個變量未調用的警告、重復定義,多了一個分號等,這些看一下提示都知道。不要告訴我你英語差,我英語初高中從來都沒有及格過,依然還是得看英文手冊。確實不懂,安裝一個翻譯軟件不難吧。

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • cpu
    cpu
    +關注

    關注

    68

    文章

    10877

    瀏覽量

    212132
  • 代碼
    +關注

    關注

    30

    文章

    4799

    瀏覽量

    68728

原文標題:如何判斷CPU是否正在執行中斷函數?

文章出處:【微信號:mcuworld,微信公眾號:嵌入式資訊精選】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏

    評論

    相關推薦

    關于CPU中斷技術的理論剖析

    計算機處于執行期間,系統內發生了非尋常或非預期的急需處理事件,CPU暫時中斷當前正在執行的程序而轉去執行
    的頭像 發表于 04-14 10:31 ?5789次閱讀
    關于<b class='flag-5'>CPU</b><b class='flag-5'>中斷</b>技術的理論剖析

    單片機main函數中斷函數執行

    最近看了硬漢分享的一個內容:為什么復位中斷服務程序里面直接調用的main函數,難道所有程序都在復位中斷里面執行的?
    發表于 10-24 11:04 ?977次閱讀

    請問一下中斷是如何執行

    CPU正常執行主程序②定時器TH0,TL0計滿溢出,中斷標志位TF0置1③CPU執行正在進行
    發表于 01-11 06:05

    關于如何判斷CPU是否正在執行中斷函數

    如何判斷CPU是否正在執行中斷函數
    的頭像 發表于 03-12 11:25 ?2615次閱讀

    什么是中斷 stm32中斷服務函數

    中斷概念: 中斷是指在計算機執行期間,系統內發生任何非尋常的或非預期的急需處理事件,使得CPU暫時中斷當前
    的頭像 發表于 07-22 11:09 ?7307次閱讀

    51單片機——中斷

    **## 51單片機——中斷器**計算機正在執行當前程序,有中斷信號到來時,則停止當前程序的執行 ,轉到終端服務子
    發表于 11-20 17:06 ?24次下載
    51單片機——<b class='flag-5'>中斷</b>器

    C51教程 第四個51程序:中斷控制--外部中斷0

    單片機在中斷發生時,就立即停止執行正在執行的內容,而去執行中斷服務
    發表于 11-22 12:06 ?7次下載
    C51教程   第四個51程序:<b class='flag-5'>中斷</b>控制--外部<b class='flag-5'>中斷</b>0

    C51編程13-中斷篇(外部中斷

    CPU執行的過程中,一般來說都是在執行主程序(main函數里面的代碼)。如果希望處理其他的功能,可以通過查詢的方式進行,判斷
    發表于 11-22 12:51 ?9次下載
    C51編程13-<b class='flag-5'>中斷</b>篇(外部<b class='flag-5'>中斷</b>)

    中斷服務子程序是如何被執行的 ?

    筆者在 《程序是如何在 CPU 中運行的(二)》中從 PC 指針寄存器的角度分析了一級函數調用和二級函數調用執行的過程,那么中斷服務子程序.
    發表于 02-07 11:02 ?2次下載
    <b class='flag-5'>中斷</b>服務子程序是如何被<b class='flag-5'>執行</b>的 ?

    單片機C語言函數中斷函數中斷服務程序)

    中斷響應與返回:CPU采集到中斷請求信號,怎樣轉向特定的中斷服務子程序,并在執行完之后返回被中斷
    發表于 02-10 11:21 ?0次下載
    單片機C語言<b class='flag-5'>函數</b>之<b class='flag-5'>中斷</b><b class='flag-5'>函數</b>(<b class='flag-5'>中斷</b>服務程序)

    FreeRTOS用二進制信號量可以減少判斷語句的資源消耗

    系統判斷,會占用CPU的很大資源,以上示例中判斷按鍵是否按下,可以用中斷處理。在中斷中必須調用
    的頭像 發表于 09-15 11:43 ?1061次閱讀

    單重中斷與多重中斷介紹

    單重中斷與多重中斷 ?單重中斷CPU執行中斷服務程序的過程中不能被打斷。當有新的更高優先級的
    的頭像 發表于 10-30 16:46 ?3669次閱讀
    單重<b class='flag-5'>中斷</b>與多重<b class='flag-5'>中斷</b>介紹

    MCS-51單片機外部中斷詳解

    CPU執行的過程中,一般來說都是在執行主程序(main函數里面的代碼)。如果希望處理其他的功能,可以通過查詢的方式進行,判斷
    的頭像 發表于 11-01 17:48 ?2033次閱讀
    MCS-51單片機外部<b class='flag-5'>中斷</b>詳解

    GD32 MCU是如何進入中斷函數

    用過GD32 MCU的小伙伴們都知道,程序是順序執行的,但當有中斷來的時候程序會跳轉到中斷函數執行
    的頭像 發表于 01-30 09:45 ?1121次閱讀
    GD32 MCU是如何進入<b class='flag-5'>中斷</b><b class='flag-5'>函數</b>的

    CPU中斷程序:從硬件看什么是中斷

    CPU響應中斷轉去執行中斷服務程序前,需要把被中斷程序的現場信息保存起來,以便執行
    發表于 03-26 11:36 ?3978次閱讀
    <b class='flag-5'>CPU</b><b class='flag-5'>中斷</b>程序:從硬件看什么是<b class='flag-5'>中斷</b>?
    主站蜘蛛池模板: 大陆极品少妇内射AAAAAA| 亚洲在线国产日韩欧美| 香港日本三级亚洲三级| 99久久免费看国产精品| 久久9精品区-无套内射无码| 香蕉免费高清完整| 国产精品久久久久久久久齐齐| 欧美四虎精品二区免费| 最近中文字幕2019国语4| 久草网国产自偷拍| 亚洲专区区免费| 精品少妇爆AV无码专区| 亚洲精品免费观看| 国产人妻麻豆蜜桃色在线| 无限好资源免费观看| 国产美熟女乱又伦AV| 无套内射CHINESEHD| 国产精品igao视频网网址| 三级黄色a| 国产精品第十页| 亚洲精品久久7777777| 国偷自产AV一区二区三区健身房| 亚洲成A人片在线观看中文L| 国产视频精品在线偷拍| 亚洲精品青青草原avav久久qv | 久久日韩精品无码一区| 中文字幕AV亚洲精品影视| 蜜臀AV浪潮99国产麻豆| 99视频这里只有精品| 乳欲性高清在线| 国产视频精品免费| 淫品色影院| 胖老太与人牲交BBWBBW高潮| 纲手裸乳被爆白浆| 亚洲国产中文字幕在线视频综合| 久久精品国产色蜜蜜麻豆国语版 | 校园刺激全黄H全肉细节文| 久99久热只有精品国产99| 做a爱片的全过程| 色欲AV精品人妻一区二区麻豆 | 欧美激情性AAAAA片欧美 |