在线看毛片网站电影-亚洲国产欧美日韩精品一区二区三区,国产欧美乱夫不卡无乱码,国产精品欧美久久久天天影视,精品一区二区三区视频在线观看,亚洲国产精品人成乱码天天看,日韩久久久一区,91精品国产91免费

<menu id="6qfwx"><li id="6qfwx"></li></menu>
    1. <menu id="6qfwx"><dl id="6qfwx"></dl></menu>

      <label id="6qfwx"><ol id="6qfwx"></ol></label><menu id="6qfwx"></menu><object id="6qfwx"><strike id="6qfwx"><noscript id="6qfwx"></noscript></strike></object>
        1. <center id="6qfwx"><dl id="6qfwx"></dl></center>

            新聞中心

            EEPW首頁 > 嵌入式系統(tǒng) > 設計應用 > 戰(zhàn)經(jīng)驗 | Cortex-M核除0操作的報錯機制話題

            戰(zhàn)經(jīng)驗 | Cortex-M核除0操作的報錯機制話題

            作者: 時間:2025-01-21 來源:STM32 收藏

            1. 前言

            本文引用地址:http://www.biyoush.com/article/202501/466513.htm

            除0操作屬于錯誤操作,在ARM 平臺上會有相應的報錯機制。但這邊會涉及到整型數(shù)的除0以及浮點數(shù)的除0,另外還會涉及錯誤產(chǎn)生后的報錯機制,是中斷還是錯誤位,本文會對這個報錯機制加以說明。使用H723做為測試芯片。

            2. 整形數(shù)除0操作報錯

            默認情況下,H723對整形數(shù)的除0操作,會忽略掉錯誤,原因在于默認情況下 SCB->CCR寄存器默認配置中這個除0操作是非捕獲狀態(tài),如果想要系統(tǒng)報錯,需要把 DIV_0_TRP這個位置1,這樣,當執(zhí)行除0操作的時候會進入hardfault,并且有標志位產(chǎn)生。

            ▲ 圖1. SCB CCR默認地址和復位初值



            ▲ 圖2. DIV_0_TRP位于bit4

            ▲ 圖3. DIV_0_TRP參數(shù)說明

            測試執(zhí)行整型數(shù)除0操作代碼。












            /* Enable System clock */  __HAL_RCC_SYSCFG_CLK_ENABLE();  /* Enable DIV_0_TRP */  SCB->CCR |= (1<<4);  /* Div value set to 0 */  IDiv = 0;  /* Exctue div 0 */  Iout = Iin/IDiv;

            ▲ 圖4. Fault Report-除0錯誤

            ▲ 圖5. 查看進入Hardfault的程序位置

            ▲ 圖6. 找到因為除0導致的進入Hardfault

            3. 浮點數(shù)除0的報錯機制

            浮點數(shù)的除0操作,沒有專門的Hardfault觸發(fā)機制,也就不能產(chǎn)生中斷,只能通過對FPU單元的讀取進行判別,而且在調(diào)試模式下,通過IAR讀取寄存器的結(jié)果是正確的,而通過Keil的讀取會有錯誤,實際已經(jīng)發(fā)生了浮點除0操作,但Keil的FPU->SCR寄存器DZC沒有置位。

            ▲ 圖7. FPSCR寄存器

            執(zhí)行浮點除0的測試代碼:













            static volatile float fin = 0.9f,fout,fdiv; static volatile uint16_t Mark; /* Div value set to 0 */ fdiv = 0.0f; /* Exctue float div 0 */ fout  = fin/fdiv; /* Get wrong mask value */ Mark = __get_FPSCR();



            ▲ 圖8. IAR的浮點除0后DZC標志位置位

            ▲ 圖9. Keil浮點除0后DZC標志位有誤

            讀取FPSCR寄存器,返回錯誤碼0x02(除0操作)。



            ▲ 圖10. 讀取FPSCR

            4. 結(jié)論

            本文通過對除0操作的報錯機制做細致說明,可以看到整型除0可以有Hardfault的中斷產(chǎn)生,而浮點的除0只能通過標志位判別,實際使用過程中盡量避免這種錯誤的操作。



            關(guān)鍵詞: STM32 Cortex-M

            評論


            相關(guān)推薦

            技術(shù)專區(qū)

            關(guān)閉