成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

IO 異常輸出排查指南

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

[[411567]]

本文轉載自微信公眾號「魚鷹談單片機」,作者魚鷹Osprey。轉載本文請聯系魚鷹談單片機公眾號。

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

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

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

3、維護別人的程序,代碼太多,不知道哪些地方會修改這個 IO。

針對這些情況,本篇筆記魚鷹將討論如何快速排查異常輸出問題(軟件問題,非單片機本身問題)。

一、全局搜索

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

當然,我們也可以借助 SI 之類的工具查看相關定義的使用情況。

總之,這個方法,比較笨,但對付一般的異常輸出,問題不大。

二、斷點神器

如果上述方法還是沒法查出問題,那么只能請出我們的終極殺人王“火云邪神”,不,終極調試神器——斷點出場了(關于該調試方法使用與介紹,可以查看歷史筆記《打了多年的單片機調試斷點到底應該怎么設置?| 顛覆認知》)

既然從源碼很難分析這些問題,那就只能靠單片機本身提供的調試手段來查了。

比如,輸出時,我們一般都會調用 GPIOB->BSRR 之類的寄存器設置高電平或低電平,所以我們可以使用我們的調試神器跟蹤這個寄存器的寫入情況,比如我們可以通過設置如下窗口跟蹤 GPIOB->BSRR 寫入情況:

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

當然,除了要查 BSRR,還有 BRR、ODR 等寄存器,還有別忘了,位綁定的地址操作。

總之,這些地址全部跟蹤一遍,如果是軟件問題,99% 都能查出來。

另外魚鷹再教大家一個快速找到寄存器地址方法,比如在調試模式下,可以在命令行中輸入下面這個,就能得到對應的地址,當然綁定地址只能通過變量中轉一下了,或者直接看匯編代碼也很快。

總之,找地址的方法很多,千萬不要傻傻的自己手工算,不然怎么早點下班玩游戲啊。

而對于有些 IO 的配置莫名的改變了,比如輸入變輸出,輸出變輸入,那還要跟蹤 CRL 、 CRH 寄存器。

該方法從根本上跟蹤指令,基本上所有代碼都將無所遁形(除了 DMA 的操作,不過一般人應該不會用 DMA 去控制 IO 吧),即使你的代碼是指針或者其他騷操作,甚至是異常篡改 IO 寄存器這種情況。

如何避免?

一般來說,上面兩種方法基本上就可以排查問題了,但是有些情況很復雜,就需要根據情況選擇適合自己的方法了,方法二絕對是神器級別的,一般問題不大。

所以現在討論一下怎么盡量避免這個問題。

1、每個 IO 操作盡量封裝在單獨一個函數中,或者使用一個枚舉參數進行控制,比如一個枚舉 OUT_PIN_LED,這樣在全局搜索時,搜索這個函數或者枚舉就可找出所有操作該 IO 的位置,這也是魚鷹為什么要實現這個 IO 框架的原因之一(簡單實用IO輸入輸出框架)。絕對不建議直接操作庫函數或者寄存器。

2、使用 LCKR (鎖定)寄存器。很多道友可能聽說或者見過這個寄存器,但在實際項目中很少使用。事實上這個寄存器很有用處,特別是你不確定這個 IO 配置是否會被別人的代碼修改的情況。如果很確定這個 IO 從始至終只會有一個配置(輸入或輸出等),那么建議大家在配置完后使用該寄存器鎖定對應的引腳,這樣,你就不怕別人意外修改這個 IO 的配置了(只要鎖定了,就無法修改配置,除非重新上電)。之后你的關注點集中在 IO 輸出即可,而不必懷疑配置被修改的可能。當然,在鎖定這個 IO 之前的代碼問題,可不敢保證。

 

責任編輯:武曉燕 來源: 魚鷹談單片機
相關推薦

2024-08-14 14:20:00

2019-12-09 10:40:15

YAMLBashKubernetes

2025-06-16 07:40:00

2019-11-25 15:32:30

虛擬化IO故障

2023-02-10 21:18:10

IO測試磁盤

2022-03-11 10:21:30

IO系統日志

2024-12-04 16:44:51

2021-06-07 09:37:05

異常Bug排查

2022-09-24 13:21:34

Java服務異常

2024-10-28 11:07:33

磁盤目錄文件

2018-11-26 08:49:42

CPU排查負載

2021-05-07 20:01:23

IO輸入輸出

2013-03-25 09:19:10

Linux服務器故障排查

2013-03-26 09:21:40

Linux服務器故障排查

2025-05-13 08:15:00

PoE供電網絡

2013-07-11 09:25:52

2024-02-20 16:55:14

K8S云計算

2009-04-10 09:43:00

Java輸出流異常

2010-07-21 14:25:24

Perl格式化輸出

2020-11-01 20:00:26

命令行ShellLinux
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 国产一区电影 | 北条麻妃国产九九九精品小说 | 欧美一区二区在线观看 | www.久久久久久久久久久久 | 久久亚洲精品国产精品紫薇 | 97成人免费| 成人福利在线 | 欧美一级欧美三级在线观看 | 一本久久a久久精品亚洲 | 精品视频一区二区三区四区 | 亚洲一区二区av | 成人片免费看 | 亚洲第一天堂无码专区 | 欧美综合一区二区三区 | 伊人网国产 | 久亚州在线播放 | 日日摸日日爽 | 欧美一区二区免费视频 | 中文字幕在线观看一区二区 | 亚洲精品大片 | 99pao成人国产永久免费视频 | 国产日韩精品在线 | 午夜精品91| 在线一区观看 | 国产成人99久久亚洲综合精品 | 好婷婷网 | 久久久久久高潮国产精品视 | 国产有码 | 成人一区二区三区在线观看 | 亚洲视频在线一区 | 国产在线观看av | 欧美不卡视频 | 国产真实乱全部视频 | 国产乱码久久久久久 | 嫩草网 | 精产国产伦理一二三区 | 国产三级在线观看播放 | 亚洲欧美日韩精品久久亚洲区 | 欧美5区| 日韩三级精品 | 免费成人在线网 |