嵌入式 Rust 之書 第二章 入門(裸機)

2021-09-26 01:56:09 字數 2493 閱讀 7803

目錄

2.2 裸機

2.2.1 了解您的裸板資源

2.2.2 配置

2.2.3 除錯 

到目前為止,您應該對工具和開發過程有所了解。在本節中,我們將切換到真正的硬體;這一過程將基本保持不變。我們繼續吧。

在開始之前,您需要確定目標裝置的一些特性,因為這些特性將用於配置專案:

以上資訊,您都可以通過晶元的datasheet或開發板參考手冊中找到。 

我們將從乙個新的模板例項開始。關於如何使用模板,可以參考《嵌入式 rust 之書---第二章 入門(qemu)》 

第一步是在.cargo/config中設定預設編譯目標。

我用的是cortex-m3的晶元,所以這裡不用修改。如有不同,可以注釋掉31行,選擇其他target。

第二步是將記憶體區域資訊輸入到memory.x檔案中。

確保debug::exit()呼叫被注釋掉或刪除,它只用於在qemu中執行。 

現在可以使用cargo build交叉編譯程式,並像前一篇博文那樣使用cargo binutils檢查二進位制檔案。cortex-m-rtcrate 可以處理讓晶元執行所需的所有magic,同樣,幾乎所有cortex-m cpu都能以同樣的方式啟動。

除錯看起來會有點不同。事實上,根據目標裝置的不同,第一步看起來可能不同。在本節中,我們將展示在stm32f103zet6開發板上除錯程式所需的步驟。 

和前一篇博文一樣,我們將進行遠端除錯,客戶機將是乙個gdb程序。不過,這次伺服器將是openocd。

關於開發板、pc和st-link的連線,與openocd的使用,可以參考《嵌入式 rust 之書---第一章 引言》

在終端上執行openocd連線到發現板上的st-link。從模板的根目錄執行此命令;openocd將獲取openocd.cfg檔案,該檔案指示要使用的介面檔案和目標檔案。

在另乙個終端上執行gdb,也從模板的根目錄執行。 

接下來,將gdb連線到openocd,它正在等待埠3333上的tcp連線。 

現在,使用load命令將程式flash (載入)到微控制器上。 

程式現在已載入。這個程式使用semihosting ,所以在進行任何semihosting 呼叫之前,我們必須告訴openocd啟用semihosting 。 您可以使用monitor命令向openocd傳送命令。

您可以通過呼叫monitor help命令來檢視所有openocd命令。 

就像前面的博文一樣,我們可以使用斷點和continue命令一直跳到main。 

接著使用next命令,將在openocd的終端中列印「hello world!」字串。

列印完字串之就是乙個死迴圈函式,再執行next命令,就會進入死迴圈函式,進入後就只能使用ctrl+c暫停晶元執行死迴圈。

不想進入死迴圈,可以使用quit命令退出gdb。 

現在除錯需要更多的步驟,所以我們已經將所有這些步驟打包到乙個名為openocd.gdb的gdb指令碼中。 

現在執行-x openocd.gdb $program將立即將gdb連線到openocd,啟用semihosting,引導程式並啟動程序。 

或者,您可以將-x openocd.gdb轉換為自定義執行程式,以使cargo run構建程式並啟動gdb會話。 此執行程式包含在.cargo/config中,但已被注釋掉,這裡去掉注釋。

這一節到此結束! 本節與原文有所不同,由於我的軟硬體與原文使用的有所不同,所以會所區別。但所演示的步驟都是一樣的,效果也是一樣的!大家可以根據自己的實際情況作出適當的調整。

嵌入式第二章

1.在搭建嵌入式系統交叉開發環境時,宿主機與目標板 或目標機 有哪幾種連線方式,請畫圖說明這些連線方式,並說明每種連線方式的用途。串列埠通訊 廣泛應用於工控裝置 電信裝置 終端裝置等。乙太網 乙太網介面進行通訊的速度較快,可以實現nfs檔案共享和tftp網路檔案傳輸等。usb介面 usb已經成為個人...

嵌入式系統第二章 嵌入式的開發概念與流程

一 it的生態系統概述 1.1 計算機cpu四大體系結構 1.2嵌入式系統的定義 1.3 何為arm?advance risc machine 1.4嵌入式系統的分類 嵌入式系統是不單獨以計算機面目出現的計算機系統,它的開發需要專用工具和特殊方法。使用mcu設計嵌入式系統,資料與程式空間採用不同儲存...

第二章 入門

第二章 入門 1 django 安裝 使用 django 的唯一先決條件是安裝 python 在 linux 平台可能包括如下步驟 2 tar xzvf django tar.gz。3 cd django 4 sudo python setup.py install。2 匯入 django模組 im...