simavr เป็นเครื่องจำลอง AVR สำหรับ linux หรือแพลตฟอร์มใดๆ ที่ใช้ avr-gcc ใช้ข้อกำหนดการลงทะเบียนของ 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, },
};
จะบอก simavr ให้สร้างการติดตามทุกครั้งที่การเปลี่ยนแปลงการลงทะเบียน UDR0 และทุกครั้งที่มีการขัดจังหวะ (ใน UCSR0A) แท็ก 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 เข้ากับจอ LCD HD44780 จำลอง และแสดงตัวนับที่ทำงานอยู่ใน 'lcd' ทุกอย่างถูกจำลอง เฟิร์มแวร์จะทำงานในลักษณะนี้บนฮาร์ดแวร์จริงทุกประการ
และนี่คือการติดตาม gtkwave ของสิ่งที่เฟิร์มแวร์กำลังทำอยู่ คุณสามารถซูมเข้า วัด ฯลฯ ใน gtkwave เลือกร่องรอยเพื่อดู ฯลฯ
มีตัวอย่างอื่นๆ อีกมากมาย!