衡阳派盒市场营销有限公司

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

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

3天內不再提示

嵌入式程序基于源代碼仿真調試

CHANBAEK ? 來源:郎哥編程課堂 ? 作者:郎宏林 ? 2023-11-01 09:24 ? 次閱讀

前面一課設計了51單片機最小系統電路,使用51單片機的I/O口控制發光二極管的狀態,并裝載運行了使用keil編寫的嵌入式程序。本次實驗應用proteus結合keil對嵌入式C程序進行源代碼級調試。

關于上次實驗遺留的問題

在上次實驗中,我們遺留了一個問題沒有解決。觀察上次實驗結果,單片機P0口的所有位顏色為灰色方塊,表示該端口的電壓為不確定狀態。

為什么P0口所有位的電壓為不確定狀態呢?因為P0同P1、P2、P3的I/O口電路不同,P1、P2、P3屬于帶上拉電阻(將I/O不確定的電位鉗位在高電平,同時起限流作用)型的I/O口,當單片機加電后I/O被鉗位在高電平,P0不帶上拉電阻,因此I/O的電位不確定。

若需要把P0口鉗位在高電平,只需要將P0口外接一個上拉電阻即可,上拉電阻的阻值一般設置為4.7K,也可以根據負載大小選擇合適的阻值。

圖片

實驗目的

在開發嵌入式程序過程中,源代碼級的仿真調試可以幫助開發者快速定位問題代碼,糾正程序錯誤,極大提高開發效率。本次實驗在前面實驗成果的基礎上,將proteus和keil結合在一起,在proteus仿真調試嵌入式程序的過程中,能夠將執行點定位到程序源代碼行,在源代碼級別跟蹤執行程序。

實驗步驟

實驗步驟如下:①輸出可以進行源代碼調試的OMF文件;②配置基于源代碼仿真調試環境;③執行調試,單步跟蹤代碼,查看和驗證程序執行結果。

輸出可以進行源代碼調試的OMF文件

啟動keil開發工具,打開前面課程建立的項目文件,修改項目內的C源文件代碼。

#include
sbit led1 = P1^0;
void main()
{
       led1 = 0;
       led1 = 1;
       led1 = 0;
       led1 = 1;
}

main()函數修改為四條語句,對P1端口的第0位led1進行賦0或賦1操作。第1條語句將led1端口賦值為低電平,此時發光二極管被點亮,第2條語句將led1端口賦值為高電平,此時發光二極管不再處于被點亮狀態。第3條和第4條語句分別重復了第1條和第2條語句。

代碼跟蹤調試時,從第1條語句開始跟蹤,單步執行到第4條語句,觀察發光二極管的狀態和led1端口的狀態。

proteus源代碼仿真調試需要Keil編譯后輸出omf文件,在Keil工作窗口,展開【Project】菜單,選擇“Options for Targets”命令,在彈出的對話框中,選擇“Output”標簽頁,確定在“Name of Executable”輸入域輸入了omf文件名稱。

圖片

完成配置后重新編譯,keil會把omf文件輸出到項目的Objects目錄下。

圖片

配置基于源代碼仿真調試環境

要進行源代碼級仿真調試,還需要配置調試環境,不然proteus會找不到程序的源代碼。配置方法是將C源代碼文件、OMF文件、電路模型文件放置在同一個目錄。可以將擴展名為“DSN”電路模型文件復制到OMF文件所在的目錄,同時將C源代碼文件也復制到OMF文件所在目錄。也可以將C源代碼文件、OMF文件、電路模型文件放置到一個專門用于調試的目錄。

圖片

調試環境配置完成后,使用proteus打開電路模型文件,設置單片機的裝載程序為omf文件。

圖片

執行調試

啟動proteus,打開待調試的電路模型文件,展開【Debug】菜單,選擇“Start/Restart Debugging”命令或按下Ctrl+F12快捷鍵啟動調試。

proteus會初始化單片機,并執行單片機內的嵌入式程序,程序在main()函數的第1條語句之前停止執行,等待開發者的下一步調試操作。默認情況下,proteus會同時打開源代碼窗口,顯示嵌入式程序的源代碼和執行狀態。

圖片

“8051 CPU Source Code-U1”為源代碼調試窗口,在源代碼調試窗口可以執行“Step Over Source line(單步跳過)”、“Step Into Source line(單步執行)”、“Step Out From Source line(單步跳出)”,其調試過程和Keil單步調試完全相同。

若源代碼調試窗口沒有彈出,可展開【Debug】菜單,在【Debug】菜單下面選擇彈出源代碼調試窗口的命令。

圖片

從圖中列出的菜單命令可以看出,proteus還提供了查看單片機寄存器狀態、SFR內存數據等窗口,開發者通過這些窗口可以隨時查看單片機的內部狀態。
例如選擇“8051 CPU Registers-U1”命令,proteus會彈出單片機寄存器狀態窗口(見下圖)。

圖片

通過寄存器窗口可以查看單片機內每個寄存器當前存儲的值。其中“PC”寄存器為程序計數器,該寄存器存儲了當前準備要執行的指令地址,指令地址為十六進制000F,指令內容為“CLR P1.0”(對P1口的第0位清零)。再仔細觀察窗口內容,名稱為“P0”、“P1”、“P2”、“P3”寄存器實際上分別對應了單片機P0、P1、P2、P3四個I/O口每位的狀態,當程序修改I/O口的狀態后,這些寄存器的值也會發生相應變化。

調試步驟:

單步跳過第1條語句,P1口第0位被賦值為低電平,發光二級管點亮。觀察寄存器窗口,PC寄存器指向了下一條指令的地址,指令為“SETB P1.0”(對P1口的第0位設置為1),P1寄存器的值由原來的FF變換為FE。

圖片

單步跳過第2條語句,P1口第0位被賦值為高電平,發光二級管熄滅。觀察寄存器窗口,PC寄存器指向了下一條指令的地址,指令為“CLR P1.0”(對P1口的第0位清零),P1寄存器的值由原來的FE變換為FF。

圖片

請同學們自行完成第3、4條語句的調試,并觀察發光二極管和寄存器的狀態。

實驗小結

通過這次實驗,掌握了嵌入式程序源代碼級的調試過程,由keil編寫嵌入式程序,使用proteus執行嵌入式程序的源代碼級調試。

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

    關注

    274

    文章

    5705

    瀏覽量

    124287
  • 程序
    +關注

    關注

    117

    文章

    3795

    瀏覽量

    81402
  • 源代碼
    +關注

    關注

    96

    文章

    2946

    瀏覽量

    66951
  • 最小系統
    +關注

    關注

    9

    文章

    252

    瀏覽量

    29160
  • 仿真調試
    +關注

    關注

    0

    文章

    9

    瀏覽量

    7545
收藏 人收藏

    評論

    相關推薦

    嵌入式硬件調試和軟件調試

    相對于軟件調試而言,使用硬件調試器可以獲得更強大的調試功能和更優秀的調試性能。硬件調試器的基本原理是通過
    發表于 03-10 10:44

    嵌入式Linux下 qt安裝源代碼

    嵌入式Linux下 qt安裝源代碼
    發表于 09-20 11:33

    嵌入式SQL程序是由什么組成的

    概念一個嵌入式SQL程序由一種普通編程語言編寫的代碼(這里是C)和位于特殊標記小節中的SQL命令混合組成。要構建該程序源代碼(.pgc)
    發表于 12-15 07:26

    如何調試嵌入式代碼

    我們在進行嵌入式系統開發調試時,受限于嵌入式芯片資源和性能,一般采用遠程調試。在調試嵌入式底層
    發表于 12-17 06:32

    嵌入式Linux開發基礎知識

     嵌入式系統開發模式嵌入式Linux系統的構成主要任務與流程利用Skyeye仿真開發板開發板使用嵌入式應用程序開發與
    發表于 09-10 11:07 ?39次下載
    <b class='flag-5'>嵌入式</b>Linux開發基礎知識

    實時仿真嵌入式系統

    實時仿真嵌入式系統:Matlab 和VxWorks 是當今工業流行的仿真軟件和嵌入式操作系統, 二者之間的結合極大的方便了程序
    發表于 09-13 10:44 ?21次下載

    基于Valgrind的嵌入式應用程序調試技術

    本文介紹了一種利用調試軟件Valgrind 進行嵌入式應用程序錯誤查找的技術,利用它可以高效、自動地查找出程序中的多種錯誤。首先介紹了嵌入式
    發表于 12-18 15:36 ?17次下載

    基于Proteus的嵌入式應用系統仿真中的源碼調試

    基于Proteus的嵌入式應用系統仿真中的源碼調試 0 引 言    Proteus是功能最強的嵌入式系統(單片機、ARM等)的設計與
    發表于 12-22 17:49 ?2140次閱讀
    基于Proteus的<b class='flag-5'>嵌入式</b>應用系統<b class='flag-5'>仿真</b>中的源碼<b class='flag-5'>調試</b>

    Monitor C語言源代碼調試器設計

    為解決嵌入式系統不支持本地調試且開發周期較長的問題,使用了一種通過PC機去控制嵌入式系統的遠程調試方案。該方案針對32位嵌入式設備,設計并實
    發表于 12-01 15:52 ?56次下載
    Monitor C語言<b class='flag-5'>源代碼</b><b class='flag-5'>調試</b>器設計

    嵌入式開發板的USB驅動程序源代碼資料免費下載

    本文檔的主要內容詳細介紹的是關于嵌入式開發板的USB驅動程序源代碼資料免費下載。
    發表于 03-25 08:00 ?1次下載
    <b class='flag-5'>嵌入式</b>開發板的USB驅動<b class='flag-5'>程序</b><b class='flag-5'>源代碼</b>資料免費下載

    嵌入式Linux應用程序開發詳解的源代碼合集免費下載

    本文檔的主要內容詳細介紹的是嵌入式Linux應用程序開發詳解的源代碼合集免費下載。
    發表于 03-21 08:00 ?24次下載
    <b class='flag-5'>嵌入式</b>Linux應用<b class='flag-5'>程序</b>開發詳解的<b class='flag-5'>源代碼</b>合集免費下載

    關于嵌入式代碼的致命漏洞

    隨著互聯網的發展,嵌入式設備正分布在一個充滿可以被攻擊者利用的源代碼級安全漏洞的環境中。因此,嵌入式軟件開發人員應該了解不同類型的安全漏洞——特別是代碼注入。 術語“
    的頭像 發表于 01-06 15:13 ?1842次閱讀

    嵌入式代碼的致命安全漏洞

    隨著互聯網的發展,嵌入式設備正分布在一個充滿可以被攻擊者利用的源代碼級安全漏洞的環境中。因此,嵌入式軟件開發人員應該了解不同類型的安全漏洞——特別是代碼注入。 術語“
    的頭像 發表于 01-15 15:07 ?2255次閱讀

    用于調試嵌入式系統軟件的硬件仿真

      SoC 是一個成熟的嵌入式系統,需要硬件仿真來驗證它是否正常工作。借助硬件仿真,開發團隊可以更有策略地規劃并實施基于多個抽象級別的調試方法。
    的頭像 發表于 06-19 15:30 ?1824次閱讀

    企業針對嵌入式開發源代碼及電路圖紙如何防泄密?

    文件的泄露問題,我們要知道,如果是嵌入式開發,就必須要通過電腦的硬件接口進行設備代碼的寫入及后期的調試,如果采用隔離的或封堵物理端口的方式來進行源代碼文件防泄密,就會有很多局限性,并且
    的頭像 發表于 07-28 20:00 ?783次閱讀
    企業針對<b class='flag-5'>嵌入式開發源代碼</b>及電路圖紙如何防泄密?
    现金棋牌游戏| 百家乐稳赢技法| 百家乐路单纸下载| 在线百家乐官方网| 真人百家乐试玩游戏| 百家乐娱乐城新澳博| 百家乐开户优惠多的平台是哪家| 百家乐平台注册送现金| 百家乐出千工具价格| 索雷尔百家乐的玩法技巧和规则 | 百家乐官网制胜法| 将军百家乐官网的玩法技巧和规则 | 皇冠网百家乐官网赢钱| 真人百家乐官网怎么对冲| 百家乐官网玩法最多的娱乐城 | 名人百家乐的玩法技巧和规则| 百家乐最新分析仪| 大发8880634| 皇冠网上投注站| 大发888娱乐城下栽| 利记线上娱乐| 战胜百家乐官网的技巧| 百家乐官网赌场分析网| 财富百家乐官网的玩法技巧和规则| 网上百家乐能作弊吗| 百家乐官网真人荷官网| 百家乐全透明牌靴| 线上百家乐平玩法| 狮威国际娱乐| 百家乐官网连长| 做生意带什么招财| 布加迪百家乐的玩法技巧和规则 | 德州扑克 规则| 百家乐官网视频官方下载| 战神百家乐官网的玩法技巧和规则 | CEO百家乐的玩法技巧和规则| 新奥博娱乐城体育投注| 游戏厅百家乐官网技巧| 德州百家乐官网21点桌| 玩百家乐的高手| 威尼斯人娱乐平台最新地址|