chinese直男口爆体育生外卖, 99久久er热在这里只有精品99, 又色又爽又黄18禁美女裸身无遮挡, gogogo高清免费观看日本电视,私密按摩师高清版在线,人妻视频毛茸茸,91论坛 兴趣闲谈,欧美 亚洲 精品 8区,国产精品久久久久精品免费

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

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

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

實(shí)戰(zhàn)經(jīng)驗(yàn) | 數(shù)據(jù)意外變化導(dǎo)致條件判斷流程異常

STM32單片機(jī) ? 來(lái)源:未知 ? 2023-12-07 10:00 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群


關(guān)鍵詞:數(shù)據(jù)意外變化導(dǎo)致條件判斷流程異常


目錄預(yù)覽

1、問(wèn)題描述

2、問(wèn)題分析

3、小結(jié)


01

問(wèn)題描述


用戶使用的 MCU 型號(hào)是 STM32H750VB。


在客戶的代碼中有多個(gè)條件語(yǔ)句,在條件里面的變量數(shù)值沒(méi)有變化的情況下執(zhí)行了條件里面的邏輯。有點(diǎn)類似如下 C 語(yǔ)句 :



即變量 A 在明明沒(méi)有變化且條件不滿足的情況下, 程序運(yùn)行時(shí)偏偏執(zhí)行了條件內(nèi)部的代碼. 很奇怪的現(xiàn)象。一時(shí)很難判斷是編譯器的問(wèn)題還是芯片問(wèn)題.


了解到客戶的代碼中使用了第三方庫(kù), xx.o 文件, 像這樣的條件有 80 多個(gè), 每次出現(xiàn)問(wèn)題的具體變量并不是固定哪一個(gè), 但是在大概 10 分鐘內(nèi)肯定會(huì)有其中一個(gè)出現(xiàn)執(zhí)行邏輯問(wèn)題。隨意動(dòng)一下代碼問(wèn)題就不出現(xiàn), 或者出現(xiàn)的位置發(fā)生變化 ; 用 KEIL 編譯器去設(shè)置斷點(diǎn), 想看該變量信息, 也會(huì)導(dǎo)致問(wèn)題不再出現(xiàn)。


02

問(wèn)題分析


一開(kāi)始查看 errta sheet, 看到以下相關(guān)內(nèi)容 :



即懷疑問(wèn)題跟 AXI SRAM 相關(guān). 查看客戶的這些變量, 確實(shí)是存放在 AXI SRAM 中. 由于任何修改代碼都可能導(dǎo)致問(wèn)題不再出現(xiàn), 因此所有嘗試須建立在不修改代碼的基礎(chǔ)上, 不然無(wú)法說(shuō)明問(wèn)題。


于是讓客戶用 STM32CubeProgrammer 以 hot plug 模式連接 MCU, 按照勘誤手冊(cè)中 2.2.9 節(jié)所描述的 workaround 方式將 AXI_TARG7_FN_MOD 寄存器的 READ_ISS_OVERRIDE 位通過(guò)地址的方式直接修改 :



結(jié)果發(fā)現(xiàn)并沒(méi)什么效果. 于是排除了這種可能性.


一開(kāi)始也懷疑問(wèn)題可能跟 Cache 有關(guān), 于是測(cè)試下關(guān)閉 Cahce 會(huì)怎么樣. 通過(guò) KEIL 調(diào)試模式下,暫停住 CPU 運(yùn)行, 然后手動(dòng)關(guān)閉 D-Cache :



結(jié)果發(fā)現(xiàn)問(wèn)題消失不見(jiàn) ! 說(shuō)明問(wèn)題肯定跟 Cache 有關(guān).


但客戶的代碼最終肯定是不能關(guān)閉 Cache 的, 想到內(nèi)核中有一個(gè)寄存器可以打開(kāi)全局 Cache 的write throght 模式, 如下編程手冊(cè)中的 CACR 寄存器的 FORCEWT 位 :



結(jié)果發(fā)現(xiàn), 客戶的代碼本身就已經(jīng)打開(kāi) :



看樣子此模式與此問(wèn)題無(wú)關(guān). 得換個(gè)思路.


考慮到問(wèn)題跟內(nèi)存數(shù)據(jù)有關(guān), 代碼又不能動(dòng). 但是得想辦法讓內(nèi)存中數(shù)據(jù)的位置動(dòng)動(dòng), 看看會(huì)有什么效果 ?


通過(guò)修改 KEIL 的鏈接配置文件.sct 文件, 將變量隨意動(dòng)動(dòng), 結(jié)果發(fā)現(xiàn)問(wèn)題也會(huì)消失不見(jiàn) ! 這說(shuō)明,數(shù)據(jù)的地址跟問(wèn)題絕對(duì)有關(guān)聯(lián).那么具體是哪些數(shù)據(jù)呢 ?


為了精確定位到與哪些變量有關(guān), 查看 KEIL 生成的 map 文件, 按地址倒序?qū)⒚總€(gè)程序中所用到的.o 的對(duì)應(yīng)變量逐個(gè)挪移動(dòng) DTCM RAM 中.



為什么要倒序呢? 主要是因?yàn)? 假如先挪低地址的變量, 肯定會(huì)導(dǎo)致高地址的變量向低地址移動(dòng).這好比, 如果先抽掉下面的磚頭, 那么上面的磚頭會(huì)自動(dòng)移動(dòng)下面去. 假如先抽掉上面的磚頭情況就不一樣了, 下面的磚頭還會(huì)保持不動(dòng). 這就是為什么先挪移上面的磚頭的意義, 也就是所謂的倒序.


通過(guò)這種方式, 最終定位到問(wèn)題跟 heap_4.o 文件以及用戶使用到的第三方提供的 xx.o 文件中的ZI 數(shù)據(jù)有關(guān). 只要保持這兩種數(shù)據(jù)位置不變, 那么問(wèn)題就可以穩(wěn)定觸發(fā), 一旦其中任何一個(gè)位置有所變動(dòng), 問(wèn)題就消失不見(jiàn).



現(xiàn)在我們知道規(guī)律了, 那么只要固定好這兩種 ZI 數(shù)據(jù)位置不變的情況下, 再去嘗試修改代碼, 結(jié)果發(fā)現(xiàn), 此時(shí)修改代碼不再會(huì)對(duì)結(jié)果產(chǎn)生影響! 換句話說(shuō), 現(xiàn)在可以自由修改代碼了.


考慮到此問(wèn)題與 Cache 有關(guān), 于是接下來(lái)通過(guò) MPU 設(shè)置將 heap_4.o 所在區(qū)域的 Cache 功能關(guān)閉, 結(jié)果發(fā)現(xiàn)問(wèn)題消失.




Heap_4.o 的 ZI 數(shù)據(jù)是存放在 SRAM2 中的 0x3002 E050 位置.



現(xiàn)在的現(xiàn)象是,Heap_4.o 的 ZI 數(shù)據(jù)只需要固定在這個(gè)位置, 問(wèn)題就能穩(wěn)定重現(xiàn),只不過(guò)將其對(duì)應(yīng)的cache 關(guān)閉, 問(wèn)題則消失.


那么此區(qū)域默認(rèn)的 Cache 屬性是怎么樣的呢? 這個(gè)在 AN4839 中可以找到其默認(rèn)屬性:



于是我們通過(guò)代碼, 將其 MPU 屬性再次配置其默認(rèn)屬性:




結(jié)果問(wèn)題可以重現(xiàn). 這再次說(shuō)明, cache 屬性對(duì)結(jié)果有影響.


但是此時(shí)還無(wú)法對(duì)其產(chǎn)生的過(guò)程細(xì)節(jié)進(jìn)行解釋.


與此同時(shí), 嘗試關(guān)閉客戶使用第三方庫(kù) xx.o 文件中的數(shù)據(jù) cache, 問(wèn)題也同樣會(huì)消失。這說(shuō)明, 此問(wèn)題跟客戶所使用的第三方庫(kù)是有關(guān)系的, 其數(shù)據(jù)在 cache 中產(chǎn)生了一致性問(wèn)題.


于是詢問(wèn)客戶這個(gè)第三方庫(kù)是如何來(lái)的? 他們回復(fù)是一家歐洲公司提供的, 且是以 M4 內(nèi)核編譯的.


很明顯, 在使用原則上, M4 編譯出來(lái)的.o 文件, 就不應(yīng)該用在 H7 工程上.


以 M4 為內(nèi)核編譯的.o 文件放到 M7 工程中會(huì)產(chǎn)生什么樣的影響? 雖然理論上, M7 內(nèi)核的指令集是向下兼容的, 但是也需要考慮 M7 內(nèi)核相關(guān)的一些特性, 比如 Cache, memory barrier 等等. 不能完全確保不會(huì)出問(wèn)題, 最保險(xiǎn)就是重新以 M7 內(nèi)核編譯這個(gè).o 文件.


由于這個(gè)第三方.o 文件客戶自己也是無(wú)法知道其內(nèi)部是如何實(shí)現(xiàn)的, 因此, 問(wèn)題的具體產(chǎn)生過(guò)程是沒(méi)辦法進(jìn)一步調(diào)查了. 但定位到這個(gè).o 文件已經(jīng)是當(dāng)前能得到的最終結(jié)果.


03

小結(jié)


本文最終問(wèn)題的真相雖有點(diǎn)匪夷所思, 但這正反映了當(dāng)前國(guó)內(nèi)軟件應(yīng)用上的混亂情況. 本文所描述的問(wèn)題根本原因雖然很另類, 但所涉及到的方法卻對(duì)開(kāi)發(fā)者有一定的參考意義, 在不能動(dòng)代碼的情況下, 需要挪動(dòng)數(shù)據(jù)的位置, 這就必須對(duì)編譯器有一定的了解. 雖也不至于太難, 但對(duì)很多開(kāi)發(fā)都來(lái)說(shuō), 對(duì)編譯器的了解未必很深, 因此, 一開(kāi)始很多人就會(huì)卡住。另外, 對(duì) MPU 的了解也是一大門(mén)檻. 因此, 特奉上此文, 以供參考.


完整內(nèi)容請(qǐng)點(diǎn)擊“閱讀原文”下載原文檔。


原文標(biāo)題:實(shí)戰(zhàn)經(jīng)驗(yàn) | 數(shù)據(jù)意外變化導(dǎo)致條件判斷流程異常

文章出處:【微信公眾號(hào):STM32單片機(jī)】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

聲明:本文內(nèi)容及配圖由入駐作者撰寫(xiě)或者入駐合作網(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)投訴
  • 單片機(jī)
    +關(guān)注

    關(guān)注

    6076

    文章

    45495

    瀏覽量

    670467
  • STM32
    +關(guān)注

    關(guān)注

    2309

    文章

    11162

    瀏覽量

    373482

原文標(biāo)題:實(shí)戰(zhàn)經(jīng)驗(yàn) | 數(shù)據(jù)意外變化導(dǎo)致條件判斷流程異常

文章出處:【微信號(hào):STM32_STM8_MCU,微信公眾號(hào):STM32單片機(jī)】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

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

掃碼添加小助手

加入工程師交流群

    評(píng)論

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

    GPS時(shí)鐘授時(shí)裝置常見(jiàn)問(wèn)題與實(shí)戰(zhàn)經(jīng)驗(yàn)分享

    作為一名長(zhǎng)期關(guān)注時(shí)間同步技術(shù)的網(wǎng)絡(luò)宣傳人員,我經(jīng)常收到用戶關(guān)于GPS時(shí)鐘授時(shí)裝置的各種咨詢。從電力變電站到5G網(wǎng)絡(luò)機(jī)房,從自動(dòng)駕駛測(cè)試場(chǎng)到金融數(shù)據(jù)中心,這些設(shè)備默默守護(hù)著現(xiàn)代社會(huì)的精密運(yùn)轉(zhuǎn)。今天,我想結(jié)合行業(yè)內(nèi)的技術(shù)發(fā)展和實(shí)際應(yīng)用中的經(jīng)驗(yàn),和大家聊聊GPS時(shí)鐘授時(shí)裝置那些
    的頭像 發(fā)表于 03-06 11:03 ?42次閱讀
    GPS時(shí)鐘授時(shí)裝置常見(jiàn)問(wèn)題與<b class='flag-5'>實(shí)戰(zhàn)經(jīng)驗(yàn)</b>分享

    1688 商品詳情 API 調(diào)用與數(shù)據(jù)解析 Python 實(shí)戰(zhàn)

    你想要的是 1688 商品詳情 API 的 Python 調(diào)用與數(shù)據(jù)解析實(shí)戰(zhàn)方案,核心是完成 API 憑證配置、接口請(qǐng)求(含簽名)、響應(yīng)數(shù)據(jù)解析、異常處理 的全
    的頭像 發(fā)表于 02-10 11:23 ?268次閱讀

    RK806中斷處理流程深度解析:從架構(gòu)到調(diào)試實(shí)戰(zhàn)

    RK806 作為瑞芯微主流 PMIC(電源管理芯片),其中斷機(jī)制是實(shí)現(xiàn)“電源鍵響應(yīng)、電壓異常保護(hù)、休眠喚醒、 watchdog 超時(shí)處理” 等核心功能的基礎(chǔ)。Linux 驅(qū)動(dòng)基于regmap_irq框架設(shè)計(jì),屏蔽了底層寄存器操作細(xì)節(jié),但調(diào)試時(shí)若不理解中斷流程,往往會(huì)陷入“
    的頭像 發(fā)表于 02-05 13:46 ?990次閱讀
    RK806中斷處理<b class='flag-5'>流程</b>深度解析:從架構(gòu)到調(diào)試<b class='flag-5'>實(shí)戰(zhàn)</b>

    雪深數(shù)據(jù)精準(zhǔn)采集:激光傳感器抗干擾技術(shù)實(shí)戰(zhàn)指南

    。本文結(jié)合實(shí)戰(zhàn)經(jīng)驗(yàn),拆解激光雪深傳感器的抗干擾技術(shù)細(xì)節(jié)與實(shí)操要點(diǎn),助力搭建穩(wěn)定可靠的監(jiān)測(cè)系統(tǒng)。 一、雪天激光傳感器核心干擾源解析 1. 光學(xué)類干擾 自然強(qiáng)光(陽(yáng)光直射、雪地反射)會(huì)淹沒(méi)激光回波信號(hào),導(dǎo)致接收端信噪比
    的頭像 發(fā)表于 02-02 14:45 ?182次閱讀

    無(wú)線傾角傳感器在房屋監(jiān)測(cè)中的應(yīng)用:用數(shù)據(jù)替代經(jīng)驗(yàn)判斷

    直川科技無(wú)線傾角傳感器精度達(dá)±0.005°,可連續(xù)監(jiān)測(cè)房屋毫米級(jí)傾斜趨勢(shì),彌補(bǔ)人工巡檢盲區(qū)。在江蘇昆山紫竹公寓項(xiàng)目中,成功識(shí)別無(wú)外觀異常的結(jié)構(gòu)變化,實(shí)現(xiàn)早期預(yù)警。設(shè)備IP67防護(hù),3–5年免維護(hù),推動(dòng)房屋安全從經(jīng)驗(yàn)
    的頭像 發(fā)表于 01-20 13:48 ?705次閱讀
    無(wú)線傾角傳感器在房屋監(jiān)測(cè)中的應(yīng)用:用<b class='flag-5'>數(shù)據(jù)</b>替代<b class='flag-5'>經(jīng)驗(yàn)</b><b class='flag-5'>判斷</b>

    車載音頻功放芯片實(shí)戰(zhàn)經(jīng)驗(yàn)與深度疑問(wèn)

    中,因未考慮老舊車型電源紋波問(wèn)題,CD7388 工作時(shí)出現(xiàn)間歇性雜音,加裝二級(jí)濾波電路后,雜音完全消除,連續(xù)工作 3 個(gè)月無(wú)異常。 3. 故障排查與快速定位經(jīng)驗(yàn) 在 CD7377CZ 與 CD7388
    發(fā)表于 12-05 09:53

    UART、SPI、I2C 實(shí)戰(zhàn)對(duì)比:哪個(gè)更適合你的項(xiàng)目?

    在嵌入式開(kāi)發(fā)中,設(shè)備之間的通信是繞不開(kāi)的話題。常見(jiàn)的三種總線接口——UART、SPI、I2C——各有優(yōu)缺點(diǎn)。不同項(xiàng)目需求決定了選擇哪一種協(xié)議最合適。本文結(jié)合實(shí)戰(zhàn)經(jīng)驗(yàn),逐項(xiàng)對(duì)比三者,并附帶實(shí)戰(zhàn)代碼
    的頭像 發(fā)表于 11-24 19:04 ?1171次閱讀
    UART、SPI、I2C <b class='flag-5'>實(shí)戰(zhàn)</b>對(duì)比:哪個(gè)更適合你的項(xiàng)目?

    怎么判斷土壓力計(jì)數(shù)據(jù)正常還是異常?

    土壓力計(jì)數(shù)據(jù)的正常與異常工作性態(tài)是怎樣的?通過(guò)對(duì)大量監(jiān)測(cè)數(shù)據(jù)的分析總結(jié),可識(shí)別出土壓力計(jì)的正常和異常工作模式,這為判斷儀器工作狀態(tài)和評(píng)估工程
    的頭像 發(fā)表于 10-31 14:43 ?245次閱讀
    怎么<b class='flag-5'>判斷</b>土壓力計(jì)<b class='flag-5'>數(shù)據(jù)</b>正常還是<b class='flag-5'>異常</b>?

    如何使用數(shù)據(jù)異常判斷電能質(zhì)量在線監(jiān)測(cè)裝置采樣電阻是否損壞?

    通過(guò)數(shù)據(jù)異常判斷電能質(zhì)量在線監(jiān)測(cè)裝置采樣電阻是否損壞,核心是聚焦電流測(cè)量數(shù)據(jù)異常特征—— 采樣電阻負(fù)責(zé)將電流信號(hào)轉(zhuǎn)為電壓信號(hào),其損壞(開(kāi)路
    的頭像 發(fā)表于 10-22 14:32 ?617次閱讀

    數(shù)據(jù)庫(kù)慢查詢分析與SQL優(yōu)化實(shí)戰(zhàn)技巧

    今天,我將分享我在處理數(shù)千次數(shù)據(jù)庫(kù)性能問(wèn)題中積累的實(shí)戰(zhàn)經(jīng)驗(yàn),幫助你系統(tǒng)掌握慢查詢分析與SQL優(yōu)化的核心技巧。無(wú)論你是剛?cè)腴T(mén)的運(yùn)維新手,還是有一定經(jīng)驗(yàn)的工程師,這篇文章都將為你提供實(shí)用的解決方案。
    的頭像 發(fā)表于 09-08 09:34 ?987次閱讀

    Linux服務(wù)器性能調(diào)優(yōu)的核心技巧和實(shí)戰(zhàn)經(jīng)驗(yàn)

    如果你正在為這些問(wèn)題頭疼,那么這篇文章就是為你準(zhǔn)備的!作為一名擁有10年經(jīng)驗(yàn)的運(yùn)維工程師,我將毫無(wú)保留地分享Linux服務(wù)器性能調(diào)優(yōu)的核心技巧和實(shí)戰(zhàn)經(jīng)驗(yàn)
    的頭像 發(fā)表于 08-27 14:36 ?1057次閱讀

    碳化硅襯底 TTV 厚度測(cè)量數(shù)據(jù)異常的快速診斷與處理流程

    摘要 本文針對(duì)碳化硅襯底 TTV 厚度測(cè)量中出現(xiàn)的數(shù)據(jù)異常問(wèn)題,系統(tǒng)分析異常類型與成因,構(gòu)建科學(xué)高效的快速診斷流程,并提出針對(duì)性處理方法,旨在提升數(shù)
    的頭像 發(fā)表于 08-14 13:29 ?1216次閱讀
    碳化硅襯底 TTV 厚度測(cè)量<b class='flag-5'>數(shù)據(jù)</b><b class='flag-5'>異常</b>的快速診斷與處理<b class='flag-5'>流程</b>

    判斷伺服行星減速機(jī)出現(xiàn)噪音的異常

    伺服行星減速機(jī)出現(xiàn)噪音通常被視為一種異常現(xiàn)象,這種噪音可能會(huì)影響設(shè)備的正常運(yùn)行,甚至對(duì)工作環(huán)境和操作人員的健康造成不良影響。以下是對(duì)伺服行星減速機(jī)出現(xiàn)噪音異常判斷及可能原因的分析: 一、判斷
    的頭像 發(fā)表于 07-31 18:16 ?993次閱讀
    <b class='flag-5'>判斷</b>伺服行星減速機(jī)出現(xiàn)噪音的<b class='flag-5'>異常</b>

    移動(dòng)電源EMC整改:認(rèn)證失敗到一次通過(guò)的實(shí)戰(zhàn)經(jīng)驗(yàn)

    深圳南柯電子|移動(dòng)電源EMC整改:認(rèn)證失敗到一次通過(guò)的實(shí)戰(zhàn)經(jīng)驗(yàn)
    的頭像 發(fā)表于 05-26 11:25 ?854次閱讀
    移動(dòng)電源EMC整改:認(rèn)證失敗到一次通過(guò)的<b class='flag-5'>實(shí)戰(zhàn)經(jīng)驗(yàn)</b>

    錫膏使用避坑指南:50 個(gè)實(shí)戰(zhàn)問(wèn)答幫你解決 99% 的焊接難題(全流程解析)

    問(wèn)題包含“原因分析 + 解決措施”,結(jié)合行業(yè)標(biāo)準(zhǔn)與實(shí)戰(zhàn)經(jīng)驗(yàn),為電子工程師、產(chǎn)線技術(shù)人員、營(yíng)銷工程師提供 “一站式” 缺陷解決方案,助力提升焊接良率與產(chǎn)品可靠性。了解完5
    的頭像 發(fā)表于 04-14 09:45 ?1484次閱讀
    錫膏使用避坑指南:50 個(gè)<b class='flag-5'>實(shí)戰(zhàn)</b>問(wèn)答幫你解決 99% 的焊接難題(全<b class='flag-5'>流程</b>解析)