simavr是一個適用於 Linux 或任何使用 avr-gcc 的平台的 AVR 模擬器。它使用 avr-gcc 自己的暫存器定義來簡化為支援的 AVR 裝置建立新目標的過程。核心設計得小而緊湊,可修改,因此可以快速建造 AVR 專案的原型。 AVR 核心現在可以穩定地與快閃記憶體 <= 128KB 的零件一起使用,並初步支援更大的零件。模擬器直接載入 ELF 文件,甚至可以使用 .elf 部分直接在模擬程式碼中指定模擬參數。您也可以載入多部分 HEX 檔案。
- _simavr_ is provided **AS IS**. If you think you should report "security vulnerabilities"
- and waste everyones time with them, you are either a grifter OR an idiot, or both. And
- anyone checking the CV you brag about it will see this paragraph, first.
在 OSX 上,我們建議使用自製程序:
brew tap osx-cross/avr
brew install --HEAD simavr
在 Ubuntu 上,SimAVR 可在 Bionic 軟體套件來源中找到:
apt-get install simavr
(請注意,該命令以simavr
名稱而不是run_avr
名稱提供。)
否則, make
足以開始使用bin/simavr 。若要在系統範圍內安裝simavr指令, make install RELEASE=1
。
補丁總是受歡迎的!請透過 Github 拉取請求提交您的變更。
simavr可以輸出其大部分引腳、韌體變數、中斷和其他一些內容作為訊號轉儲到檔案中,可以使用 gtkwave 繪製該檔案以進行進一步的精確分析。韌體可以包含讓simavr了解要追蹤的內容的指令,並且檔案會自動產生。例子:
const struct avr_mmcu_vcd_trace_t _mytrace[] _MMCU_ = {
{ AVR_MCU_VCD_SYMBOL("UDR0"), .what = (void*)&UDR0, },
{ AVR_MCU_VCD_SYMBOL("UDRE0"), .mask = (1 << UDRE0), .what = (void*)&UCSR0A, },
};
每次 UDR0 暫存器變更和每次引發中斷(在 UCSR0A 中)時,都會告訴simavr產生追蹤。 MMCU標記告訴 gcc 它需要編譯,但它不會連結到您的程式中,因此它實際上需要零字節,這是simavr私有的程式碼部分,它是免費的!使用這些指令運行並寫入串行端口的程式將產生一個文件,該文件將顯示:
$ ./simavr/run_avr tests/atmega88_example.axf
AVR_MMCU_TAG_VCD_TRACE 00c6:00 - UDR0
AVR_MMCU_TAG_VCD_TRACE 00c0:20 - UDRE0
Loaded 1780 .text
Loaded 114 .data
Loaded 4 .eeprom
Starting atmega88 - flashend 1fff ramend 04ff e2end 01ff
atmega88 init
avr_eeprom_ioctl: AVR_IOCTL_EEPROM_SET Loaded 4 at offset 0
Creating VCD trace file 'gtkwave_trace.vcd'
Read from eeprom 0xdeadbeef -- should be 0xdeadbeef..
Read from eeprom 0xcafef00d -- should be 0xcafef00d..
simavr: sleeping with interrupts off, quitting gracefully
當檔案載入到 gtkwave 中時,您會看到:
您可以對新增至追蹤的任何變更進行非常精確的時序細分,直至 AVR 週期。
simavr確實是模擬您自己的 AVR 專案的中心,不僅僅是一個調試器,還可以模擬您將在韌體中使用的外設,因此您可以離線測試和開發,然後不時地在硬體上嘗試。
您也可以使用simavr對您的出廠韌體進行測試單元,以便在發布新版本之前對其進行驗證,以防止回歸或錯誤。
simavr有一些「完整的專案/」證明了這一點,其中大多數是在某個時候使用真實硬體製作的,並且韌體二進位檔案正是在硬體上運行的。這裡的關鍵是模擬連接到 AVR 的零件或週邊設備。當然,您不必模擬完整的硬件,您只需產生適當的激勵,以便愚弄 AVR。
此範例板將 Atmega48 連接到類比 HD44780 LCD,並在「lcd」中顯示運行計數器。一切都是模擬的,韌體在真實硬體上的運作完全一樣。
這是韌體正在執行的操作的 gtkwave 追蹤。您可以在 gtkwave 中進行放大、測量等操作,選擇跡線進行檢視等。
還有很多其他範例可用!