simavr هو محاكي AVR لنظام التشغيل Linux، أو أي نظام أساسي يستخدم avr-gcc. ويستخدم تعريف السجل الخاص بـ avr-gcc لتبسيط إنشاء أهداف جديدة لأجهزة AVR المدعومة. تم تصميم النواة لتكون صغيرة الحجم وصغيرة الحجم وقابلة للاختراق، لذا تسمح بالنماذج الأولية السريعة لمشروع AVR. أصبح نواة AVR الآن مستقرًا للاستخدام مع الأجزاء التي تحتوي على فلاش بحجم <= 128 كيلو بايت، ومع دعم أولي للأجزاء الأكبر حجمًا. يقوم المحاكي بتحميل ملفات 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 دول مجلس التعاون الخليجي بأنها تحتاج إلى تجميع، ولكن لن يتم ربطها في برنامجك، لذلك فهي لا تأخذ حرفيًا صفر بايت، وهذا قسم كود خاص بـ 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 وتحديد الآثار لرؤية وما إلى ذلك.
هناك عدد غير قليل من الأمثلة الأخرى المتاحة!