精品国产人成在线_亚洲高清无码在线观看_国产在线视频国产永久2021_国产AV综合第一页一个的一区免费影院黑人_最近中文字幕MV高清在线视频

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

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

3天內不再提示

如何快速排查IO異常輸出問題

strongerHuang ? 來源:魚鷹談單片機 ? 作者:魚鷹談單片機 ? 2022-03-09 17:55 ? 次閱讀

嵌入式開發過程中,IO 操作是不可避免的,很多時候 IO 操作很正常,但有些時候可能因為某些原因導致異常輸出,或者說不是你想要的輸出(本來應該一直輸出高電平,突然出現一個低電平)。

1、時間太久,不知道在哪里操作了這個 IO。

2、程序異常篡改 IO 輸出。

3、維護別人的程序,代碼太多,不知道哪些地方會修改這個 IO。 針對這些情況,本篇筆記魚鷹將討論如何快速排查異常輸出問題(軟件問題,非單片機本身問題)。

一、全局搜索

一般來說,IO 輸出肯定有跡可查,比如我們可以全局搜索 GPIOB 和 GPIO_Pin_0 之類的。

如何快速排查IO異常輸出問題

當然,我們也可以借助 SI 之類的工具查看相關定義的使用情況。 總之,這個方法,比較笨,但對付一般的異常輸出,問題不大。

二、斷點神器

如果上述方法還是沒法查出問題,那么只能請出我們的終極殺人王“火云邪神”,不,終極調試神器——斷點出場了(關于該調試方法使用與介紹,可以查看歷史筆記《打了多年的單片機調試斷點到底應該怎么設置?| 顛覆認知》) 既然從源碼很難分析這些問題,那就只能靠單片機本身提供的調試手段來查了。 比如,輸出時,我們一般都會調用 GPIOB->BSRR 之類的寄存器設置高電平或低電平,所以我們可以使用我們的調試神器跟蹤這個寄存器的寫入情況,比如我們可以通過設置如下窗口跟蹤 GPIOB->BSRR 寫入情況:

如何快速排查IO異常輸出問題

(這里設置為 4 字節訪問,是因為這里的寄存器是 32 位的)

如何快速排查IO異常輸出問題

當然,除了要查 BSRR,還有 BRR、ODR 等寄存器,還有別忘了,位綁定的地址操作。 總之,這些地址全部跟蹤一遍,如果是軟件問題,99% 都能查出來。 另外魚鷹再教大家一個快速找到寄存器地址方法,比如在調試模式下,可以在命令行中輸入下面這個,就能得到對應的地址,當然綁定地址只能通過變量中轉一下了,或者直接看匯編代碼也很快。 總之,找地址的方法很多,千萬不要傻傻的自己手工算,不然怎么早點下班玩游戲啊。

如何快速排查IO異常輸出問題

而對于有些 IO 的配置莫名的改變了,比如輸入變輸出,輸出變輸入,那還要跟蹤 CRL 、 CRH 寄存器。 該方法從根本上跟蹤指令,基本上所有代碼都將無所遁形(除了 DMA 的操作,不過一般人應該不會用 DMA 去控制 IO 吧),即使你的代碼是指針或者其他騷操作,甚至是異常篡改 IO 寄存器這種情況。

如何避免?

一般來說,上面兩種方法基本上就可以排查問題了,但是有些情況很復雜,就需要根據情況選擇適合自己的方法了,方法二絕對是神器級別的,一般問題不大。 所以現在討論一下怎么盡量避免這個問題。 1、每個 IO 操作盡量封裝在單獨一個函數中,或者使用一個枚舉參數進行控制,比如一個枚舉 OUT_PIN_LED,這樣在全局搜索時,搜索這個函數或者枚舉就可找出所有操作該 IO 的位置,這也是魚鷹為什么要實現這個 IO 框架的原因之一(簡單實用IO輸入輸出框架)。絕對不建議直接操作庫函數或者寄存器。2、使用 LCKR (鎖定)寄存器。很多道友可能聽說或者見過這個寄存器,但在實際項目中很少使用。事實上這個寄存器很有用處,特別是你不確定這個 IO 配置是否會被別人的代碼修改的情況。如果很確定這個 IO 從始至終只會有一個配置(輸入或輸出等),那么建議大家在配置完后使用該寄存器鎖定對應的引腳,這樣,你就不怕別人意外修改這個 IO 的配置了(只要鎖定了,就無法修改配置,除非重新上電)。之后你的關注點集中在 IO 輸出即可,而不必懷疑配置被修改的可能。當然,在鎖定這個 IO 之前的代碼問題,可不敢保證。

原文標題:IO 異常輸出排查指南

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

審核編輯:湯梓紅

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

    關注

    6032

    文章

    44514

    瀏覽量

    632975
  • 嵌入式
    +關注

    關注

    5068

    文章

    19017

    瀏覽量

    303241
  • 代碼
    +關注

    關注

    30

    文章

    4747

    瀏覽量

    68348

原文標題:IO 異常輸出排查指南

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

收藏 人收藏

    評論

    相關推薦

    描述mcp內核常見問題的排查方法幫助快速排查定位問題

    任何系統,硬件故障和軟件故障都不可避免。比如車載系統,由于汽車行駛過程中的震動,發熱,電瓶饋電等,很容易影響電子元件的特性,這對設備是致命的影響,會直接改變程序邏輯及運行結果從而產生各種不可預測的異常情況,本文描述常見問題的排查方法幫助
    的頭像 發表于 07-12 09:23 ?2353次閱讀
    描述mcp內核常見問題的<b class='flag-5'>排查</b>方法幫助<b class='flag-5'>快速</b><b class='flag-5'>排查</b>定位問題

    請問快速IO與普通IO有什么區別?

    STM32開發板TFT上定義的快速IO與普通IO有什么區別呀??僅僅是設置IO口時一個要調用函數,所以普通一個不需要調用函數,所以快速嗎?
    發表于 04-16 05:08

    如何排查 CS1237/CS1238 異常問題?

    首先確認處于量產階段,還是開發階段。如果是量產產品,則著重檢查芯片是否損壞。簡單的方法包括:觀察 AD 值是否跳動幅度大;測量工作電流/休眠電流,看是否明顯異常;測量芯片的二極管特性( GND-IO
    發表于 03-02 18:02

    寄存器配置IO輸入輸出問題怎么去解決呢

    寄存器配置IO輸入輸出問題來源:移植原子哥的IIC例程時,想修改一個SDA和SCL的引腳,卻發現原子哥有一部分代碼使用了寄存器編程。原函數如下://IO方向設置#define SDA_IN
    發表于 01-19 08:29

    Labview的一個異常崩潰

    起因:昨天升級程序后產線突然反饋程序異常崩潰,排查到了一個神奇的BUG。Labview異常崩潰報告未知異常:0x0000000000.排查
    發表于 03-17 18:05

    快速IO鏈接PHY大師決議

    快速IO鏈接PHY大師決議
    發表于 04-18 19:36 ?9次下載
    <b class='flag-5'>快速</b><b class='flag-5'>IO</b>鏈接PHY大師決議

    NXP LPC2214 ARM7芯片的引腳無法輸出問題

    NXP LPC2214 ARM7芯片的引腳無法輸出問題:工程是從LPC2138用過來的,增加了P2.3口的控制發現GPIOP2.3 無法輸出高電平/*配置IO管腳映射*/PINSEL0
    發表于 12-04 10:51 ?9次下載
    NXP LPC2214 ARM7芯片的引腳無法<b class='flag-5'>輸出問題</b>:

    在Kubernetes集群發生網絡異常時如何排查

    本文將引入一個思路:“在 Kubernetes 集群發生網絡異常時如何排查”。文章將引入 Kubernetes 集群中網絡排查的思路,包含網絡異常模型,常用工具,并且提出一些案例以供學
    的頭像 發表于 09-02 09:45 ?4740次閱讀

    電壓輸出IO有哪些應用?

    (1)控制執行器: 電壓輸出IO可以用來控制執行器,如繼電器、電磁閥、電機驅動器等。 通過改變輸出電壓的狀態和數值,可以實現對執行器的開關、速度、方向等控制。 (2)驅動顯示器: 電壓輸出
    的頭像 發表于 07-05 08:05 ?770次閱讀

    Android異常日志快速定位分析小技巧

    Android異常日志快速定位分析小技巧
    的頭像 發表于 08-09 10:06 ?2674次閱讀
    Android<b class='flag-5'>異常</b>日志<b class='flag-5'>快速</b>定位分析小技巧

    java內存溢出排查方法

    過程中常見的問題之一,可能導致應用程序崩潰、性能下降甚至系統崩潰。在本文中,將詳細介紹如何排查和解決Java內存溢出問題。 一、什么是Java內存溢出 在開始解決Java內存溢出問題之前,首先需要了解Java內存
    的頭像 發表于 11-23 14:46 ?3107次閱讀

    Java怎么排查oom異常

    據量的應用中。要排查OOM異常,需要經過以下幾個步驟: 理解OOM異常的原因:OOM異常通常有以下幾個原因:內存泄露、內存溢出、內存不足以容納所需的數據等。理解OOM
    的頭像 發表于 12-05 13:47 ?1213次閱讀

    光伏電站絕緣阻抗異常排查方法

    ? 光伏電站絕緣阻抗異常排查方法 【摘要】近幾年,光伏發電技術迅猛發展,光伏扶貧電站及分布式光伏使光伏發電走進千家萬戶。然而光伏發電設備運行期間仍存在隱患。及時發現并解決*常見異常運行故障,可以很大
    的頭像 發表于 01-16 13:57 ?679次閱讀
    光伏電站絕緣阻抗<b class='flag-5'>異常</b><b class='flag-5'>排查</b>方法

    晶振輸出頻率異常怎么辦?

    晶振輸出頻率異常怎么辦? 晶振輸出頻率異常是指晶振輸出信號的頻率與預期不符。晶振作為一種常見的時鐘源,廣泛應用于各種電子設備中,包括計算機、
    的頭像 發表于 01-24 16:11 ?845次閱讀

    令人頭疼的異常重啟,竟然是KV的鍋…

    合宙模組異常重啟原因排查
    的頭像 發表于 09-26 18:14 ?365次閱讀
    令人頭疼的<b class='flag-5'>異常</b>重啟,竟然是KV的鍋…