在线观看www成人影院-在线观看www日本免费网站-在线观看www视频-在线观看操-欧美18在线-欧美1级

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

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

3天內不再提示

淺析基于STM32的除以0運算話題

茶話MCU ? 來源:茶話MCU ? 作者:Miler ? 2021-11-26 11:42 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

有人使用STM32G4系列芯片開發產品。他發現程序中如果遇到除以0的操作時,會跑進出錯異常中斷而影響程序運行。他想知道能否通過設置,即使發生除以0操作也不讓程序跑進異常中斷,并期望此時的除法運行結果【也就是商】直接等于當前變量類型所支持的最大值,比如,若被除數為16位變量,則經過該除以零操作后直接為其賦值為0xffff。【實際應用中客戶的需求往往也是五彩斑斕的。^_^】

事實上是否可以如該STM32用戶所愿呢?我們不妨一起看看。

首先,這個問題不屬于STM32外設相關的,而是內核相關的。客戶選用的是Cortex M4的內核STM32芯片,那我們就從M4內核手冊中尋找相關內容。

我們通過查看ARM M4的內核手冊,可以看到除以0操作會導致用法異常[UsageFault],同時它又說了,該操作和非對齊訪問操作是否觸發異常是可以配置的。詳見下方綠色方框內文字。

68412096-4ddc-11ec-9eda-dac502259ad0.png

那么對該用法異常的監測控制是通過哪個寄存器進行配置的呢?經瀏覽手冊得知它是通過配置控制寄存器[SCB-》CCR]進行配置的。

68a05afc-4ddc-11ec-9eda-dac502259ad0.png

690568ac-4ddc-11ec-9eda-dac502259ad0.png

根據上面描述可知,當CCR寄存器的DIV_0_TRP位被配置0時,即使發生除以0操作也不會觸發異常,只有當該位被置1前提下,當發生除以0操作時才觸發異常事件并產生相應中斷。

下面我們具體驗證下。我找了塊M4內核的STM32芯片的開發板。我們先使用ARM MDK來驗證。

測試代碼很簡單,就是下面截圖中的幾行,簡單的閃燈操作,里面夾了一句除法操作。SCB-》CCR被賦值0x00000210即置位了DIV_0_TRP,當被賦值0x00000200時對其進行清零。

6976770e-4ddc-11ec-9eda-dac502259ad0.png

經過測試,當我們置位上面CCR寄存器的DIV_0_TRP位,在發生除以0操作時就會進入HardFault中斷,同時被除數的結果【Result】即商變為0.

69e1d44a-4ddc-11ec-9eda-dac502259ad0.png

而當我們對DIV_0_TRP位清零,即SCB-》CCR被賦值0x00000200時發生除以0操作不會觸發Hardfault中斷,但被除數除以0后其結果依然保持為0。整個程序運行起來感覺不到任何阻滯。

上面是基于ARM MDK環境測試的,我們換為IAR IDE測試看看。

我們依然先驗證CCR寄存器的DIV_0_TRP位被置1的情況。經測試,結果跟ARM MDK環境下的測試結果完全一致。

6a73de8a-4ddc-11ec-9eda-dac502259ad0.png

當我們對CCR寄存器的DIV_0_TRP位清零時,測試結果也跟ARM MDK環境下的一致。

顯然,結合Cortex M4內核手冊的描述和實際驗證,當發生除以0操作時是否觸發異常事件是可以配置的,至于發生除以0操作后的商,它始終是0,這個結果其實在上面截圖有明確提及,這里再單獨截圖出來。

6adaa07a-4ddc-11ec-9eda-dac502259ad0.png

不過,這個結果跟開篇客戶所期望的不一致,這是由硬件決定的,不同的硬件在這個地方處理不盡相同。其實,其它Cortex M內核芯片這個地方約定是一樣的。

聊到這里,或許有人發現了一個問題。從手冊上看,這個除以0操作觸發的應該是用法異常【UsageFault】,而我們在實際測試時進入的中斷卻是HardFault異常,這兩個異常并不一樣啊?

6b412dcc-4ddc-11ec-9eda-dac502259ad0.png

這是怎么回事呢?在此拋磚引玉吧,有興趣的話不妨查找相關資料繼續尋找相關答案。

【注:上面部分截圖來自于Cortex-M4的各種手冊,有需要可以到arm網站自行搜索下載】

編輯:jq

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

    關注

    459

    文章

    52412

    瀏覽量

    439352
  • ARM
    ARM
    +關注

    關注

    134

    文章

    9346

    瀏覽量

    376575
  • 寄存器
    +關注

    關注

    31

    文章

    5432

    瀏覽量

    124125
  • MDK
    MDK
    +關注

    關注

    4

    文章

    211

    瀏覽量

    32627

原文標題:基于STM32的除以0運算話題

文章出處:【微信號:stmcu832,微信公眾號:茶話MCU】歡迎添加關注!文章轉載請注明出處。

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

掃碼添加小助手

加入工程師交流群

    評論

    相關推薦
    熱點推薦

    同步電機失步淺析

    純分享帖,需要者可點擊附件免費獲取完整資料~~~*附件:同步電機失步淺析.pdf【免責聲明】本文系網絡轉載,版權歸原作者所有。本文所用視頻、圖片、文字如涉及作品版權問題,請第一時間告知,刪除內容!
    發表于 06-20 17:42

    STM32多通道FFT運算異常的原因?怎么解決?

    問題報告:STM32多通道FFT運算異常 報告人:XXX日期:2025年X月X日硬件平臺:STM32F407VGT6開發環境:STM32CubeMX + KeilCMSIS-DSP庫版
    發表于 06-19 06:27

    0STM32中的SysTick是個啥?咋用?(可下載)

    Cortex-Mx內核內部包含了一個SysTick定時器,SysTick是一個24位的倒計數定時器,當計到0時,將從RELOAD寄存器中自動重裝載定時初值。只要不把它在SysTick控制及狀態寄存器
    發表于 04-01 14:52 ?0次下載

    STM32的H5/U5系列處理器內置運放支持負壓運算嗎?

    STM32的H5/U5系列處理器內置運放支持負壓運算嗎?比如輸入-1V,放大倍數為2時輸出-2V
    發表于 03-11 07:53

    stm32G474RE cordic外設的1~101的ln運算怎么配置?

    有哪位大神用過stm32G474RE cordic外設,咨詢一下1~101的ln運算怎么配置?
    發表于 03-07 08:29

    基本積分運算電路和微分運算電路公式推導(可下載)

    ,可以實現這兩種運算電路。在上圖積分的運算電路中,由于集成運放的同相輸入端通過 R5 接地, Up=Un=0,Un 為虛地。當輸入信號為階躍信號時,若 t0 時刻電
    發表于 02-28 14:26 ?2次下載

    技術科普 | 芯片設計中的LEF文件淺析

    技術科普 | 芯片設計中的LEF文件淺析
    的頭像 發表于 11-13 01:03 ?736次閱讀
    技術科普 | 芯片設計中的LEF文件<b class='flag-5'>淺析</b>

    STM32WB0系列無線微控制器滿足低功耗藍牙應用需求

    藍牙技術作為應用最為廣泛的2.4GHz短距離通信技術,對無線微控制器芯片的集成度、功耗、性能、安全性等有較高要求。STM32WB0系列,是兼具高性價比和低功耗的無線微控制器,可充分滿足無線藍牙應用對芯片的要求。
    的頭像 發表于 10-12 11:03 ?1056次閱讀
    <b class='flag-5'>STM32WB0</b>系列無線微控制器滿足低功耗藍牙應用需求

    STM32到基于Arm的MSPM0的遷移指南

    電子發燒友網站提供《從STM32到基于Arm的MSPM0的遷移指南.pdf》資料免費下載
    發表于 09-07 11:31 ?0次下載
    從<b class='flag-5'>STM32</b>到基于Arm的MSPM<b class='flag-5'>0</b>的遷移指南

    MATLAB(4)--MATLAB基本運算

    )。 當兩個比較量是標量時,直接比較兩數的大小。若成立,關系表達式結果為1.否則為0。 當參與比較的量是兩個同型的矩陣時,比較是對兩矩陣相同位置的元素按標量關系運算規則逐個進行,最終的的結果是一個
    發表于 09-06 10:18

    如何提高單片機的運算效率之FPU

    只要STM32或者其他32位單片機,自帶FPU功能,就可以加速float類型數據的加減乘除運算。在STM32中要啟用FPU,需要啟動滿足兩個宏:(__FPU_PRESENT==1)&&
    的頭像 發表于 08-30 11:47 ?1206次閱讀
    如何提高單片機的<b class='flag-5'>運算</b>效率之FPU

    stm32boot0和boot1對應哪個p引腳

    STM32系列微控制器是一種廣泛應用于嵌入式系統領域的32位微控制器。在STM32系列微控制器中,BOOT0和BOOT1是兩個重要的引腳,它們用于設置設備的啟動模式。 首先,讓我們了解STM3
    的頭像 發表于 08-22 09:40 ?6160次閱讀

    開路電壓除以短路電流是等效電阻嗎

    開路電壓除以短路電流是等效電阻的計算方法之一,但并不是唯一的方法。在電路分析中,等效電阻是一個重要的概念,它可以幫助我們更好地理解和分析電路的行為。 開路電壓和短路電流的概念 開路電壓是指在電路中
    的頭像 發表于 08-07 14:28 ?2589次閱讀

    LMH6554負載電流可以直接按照輸出電壓除以負載來計算嗎?

    手冊里有幾個電流數據要請教一下 上圖的Iout和Isc有啥區別,Iout=+/-150mA是在Vout=0V下定義的輸出電流,是否也可以認為是短路電流。 還有個問題是上圖的Is,為什么在負載
    發表于 08-07 07:32

    STM32CubeIDE環境下使用DSP加速運算,但不能下載DSP庫,為什么?

    STM32CubeIDE 環境下使用DSP 加速運算,但不能下載DSP庫!(芯片為STM32G474RBT6) copy all used libraries into the project folder :復制所有庫文件 ;
    發表于 07-05 07:35
    主站蜘蛛池模板: 天天综合射 | china国语对白刺激videos chinese国产videoxx实拍 | 日本www色视频 | 伊人久久大香线蕉观看 | 你懂的在线视频播放 | 黄视频在线免费看 | 操美女的视频网站 | 美女牲交毛片一级视频 | 婷婷四房综合激情五月性色 | avtt香蕉 | 操人网站| 色噜噜狠狠色综合欧洲selulu | 久久精品视频网站 | 午夜精品在线 | 中国成熟xxx视频 | 国产一区二区三区免费大片天美 | 亚洲卡5卡6卡7国色天香 | 日日噜噜噜夜夜爽爽狠狠视频 | 国产免费私拍一区二区三区 | 天天射天天干天天操 | 久久天天躁夜夜躁狠狠躁2015 | 色偷偷网址 | 日本黄色片黄色片 | 一本到午夜92版免费福利 | se97se成人亚洲网站 | 亚洲一区二区三 | 手机在线观看a | 久久国产乱子伦精品免费看 | 天堂最新版 | 三级理论在线观看 | 美女扒开尿口让男生添 漫画 | 超级淫小黄文大全很污的那种 | 精品视频免费看 | 午夜三级网站 | 久久亚洲精品国产亚洲老地址 | 久久99热久久精品99 | 在线观看永久免费视频网站 | 亚洲第一区视频 | 免费看三级黄色片 | 99久久99这里只有免费费精品 | 欧美日韩中文字幕 |