日本黄色一级经典视频|伊人久久精品视频|亚洲黄色色周成人视频九九九|av免费网址黄色小短片|黄色Av无码亚洲成年人|亚洲1区2区3区无码|真人黄片免费观看|无码一级小说欧美日免费三级|日韩中文字幕91在线看|精品久久久无码中文字幕边打电话

當前位置:首頁 > 單片機 > 單片機
[導讀] 通過CMSIS-utrealos項目中的CTBUG調(diào)試,使我對裸機C編程加深了認識。那個BUG調(diào)試,現(xiàn)象是出現(xiàn)hard fault,但是fault出現(xiàn)地的匯編指令看著貌似沒啥問題,解決一處的fault后,其他處又出現(xiàn)fault了。最后我看到原來是

 通過CMSIS-utrealos項目中的CTBUG調(diào)試,使我對裸機C編程加深了認識。那個BUG調(diào)試,現(xiàn)象是出現(xiàn)hard fault,但是fault出現(xiàn)地的匯編指令看著貌似沒啥問題,解決一處的fault后,其他處又出現(xiàn)fault了。最后我看到原來是fault出現(xiàn)地的指令中源地址錯誤了,源地址應(yīng)該在數(shù)據(jù)段中,卻意外地落到了代碼段中。這個現(xiàn)象我忙活了半天才找到。

然后通過看那奇怪的源地址,對照它四周的現(xiàn)象代碼,最終才發(fā)現(xiàn)是我的demo C文件中的頭文件包含錯誤了(這個錯誤顯然易見,但是在review代碼時卻沒發(fā)現(xiàn))。導致該問題指令的那個源地址計算錯誤,落到了代碼段中。

調(diào)試時間花了不少,最后這段調(diào)試經(jīng)歷使我對裸機C編程發(fā)生了興趣,從而認真讀了armcm3編程權(quán)威指南一書。

還有王SAN那個棧溢出調(diào)試,王SAN本來還想研究是否是內(nèi)存分配方面的錯誤,但是和我最后討論后,結(jié)果用arm權(quán)威指南及我們組項目筆記文章中的那個棧溢出調(diào)試方法,很快就找出BUG原因了。

我的那個BUG調(diào)試告訴我ARMCM3上沒有MMU那種保護功能,也沒有操作系統(tǒng)(linux操作系統(tǒng)中的那種開啟MMU保護以及虛存訪問權(quán)限檢查的功能這里沒有)。雖然有MPU,但是這個是可選器件。

linux下的MMU及虛存保護,使得我們PC機編程中,可以不用C指針時,及時將其置為空從而起到保護程序的作用,但是回到裸機下,尤其沒MMU部件時,空指針的作用意義在這里都消失了。這也就是嵌入式編程的復(fù)雜性。

但是通過嵌入式編程,尤其王san那個BUG調(diào)試,畢竟能加深對C編程底層調(diào)試的認識。比如現(xiàn)在嵌入式調(diào)試,可以直接通過觀看內(nèi)存地址處的數(shù)據(jù)信息是否異常,各個匯編指令和cpu寄存器值變化是否異常,嵌入式調(diào)試使人真正回到了二進制時代。

不可否認,MMU和虛擬存儲的設(shè)計,真正簡化了上層程序的設(shè)計,提供給用戶一個好的開發(fā)應(yīng)用程序的界面。詳情見uclinux與linux的不同一文。

但是由于MMU的存在必要,這延緩了CPU訪問內(nèi)存的速度。為了解決這一問題,又帶來cache,還有TLB(之前作linux性能檢證搞過TLB的性能分析一文可以參考)。而ARM CM3中沒有這一切,畢竟cortex-m3和A5的應(yīng)用范圍是不同的。

本站聲明: 本文章由作者或相關(guān)機構(gòu)授權(quán)發(fā)布,目的在于傳遞更多信息,并不代表本站贊同其觀點,本站亦不保證或承諾內(nèi)容真實性等。需要轉(zhuǎn)載請聯(lián)系該專欄作者,如若文章內(nèi)容侵犯您的權(quán)益,請及時聯(lián)系本站刪除( 郵箱:macysun@21ic.com )。
換一批
延伸閱讀
關(guān)閉