simavr est un simulateur AVR pour Linux ou toute plate-forme utilisant avr-gcc. Il utilise la propre définition de registre d'avr-gcc pour simplifier la création de nouvelles cibles pour les appareils AVR pris en charge. Le noyau a été conçu pour être petit, compact et piratable afin de permettre un prototypage rapide d'un projet AVR. Le noyau AVR est désormais stable pour une utilisation avec des pièces avec <= 128 Ko de flash, et avec une prise en charge préliminaire pour les pièces plus volumineuses. Le simulateur charge directement les fichiers ELF et il existe même un moyen de spécifier les paramètres de simulation directement dans le code émulé à l'aide d'une section .elf. Vous pouvez également charger des fichiers HEX en plusieurs parties.
- _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.
Sous OSX, nous vous recommandons d'utiliser l'homebrew :
brew tap osx-cross/avr
brew install --HEAD simavr
Sur Ubuntu, SimAVR est disponible dans la source du package Bionic :
apt-get install simavr
(Notez que la commande est disponible sous le nom simavr
et non run_avr
.)
Sinon, make
suffit pour commencer à utiliser bin/simavr . Pour installer la commande simavr à l'échelle du système, make install RELEASE=1
.
Les correctifs sont toujours les bienvenus ! Veuillez soumettre vos modifications via les demandes d'extraction Github.
simavr peut générer la plupart de ses broches, variables de micrologiciel, interruptions et quelques autres éléments sous forme de signaux à transférer dans un fichier qui peut être tracé à l'aide de gtkwave pour une analyse plus approfondie et précise. Un micrologiciel peut contenir des instructions permettant à simavr de savoir ce qu'il faut tracer, et le fichier est automatiquement généré. Exemple:
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, },
};
Dira à simavr de générer une trace à chaque fois que le registre UDR0 change et à chaque fois que l'interruption est déclenchée (dans UCSR0A). La balise MMCU indique à gcc qu'elle doit être compilée, mais elle ne sera pas liée dans votre programme, donc cela prend littéralement zéro octet, c'est une section de code privée à simavr , c'est gratuit ! Un programme exécuté avec ces instructions et écrivant sur le port série générera un fichier qui affichera :
$ ./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
Et lorsque le fichier est chargé dans gtkwave, vous voyez :
Vous obtenez une répartition temporelle très précise de tout changement que vous ajoutez à la trace, jusqu'au cycle AVR.
simavr est vraiment conçu pour être le centre d'émulation de vos propres projets AVR, pas seulement un débogueur, mais aussi l'émulation des périphériques que vous utiliserez dans votre firmware, afin que vous puissiez tester et développer hors ligne, et de temps en temps l'essayer sur le matériel .
Vous pouvez également utiliser simavr pour effectuer des tests unitaires sur votre firmware d'expédition afin de le valider avant d'expédier une nouvelle version, afin d'éviter les régressions ou les erreurs.
simavr a quelques « projets complets » qui le démontrent, la plupart d'entre eux ont été réalisés à l'aide de matériel réel à un moment donné, et le binaire du firmware est exactement celui qui fonctionnait sur le matériel. La clé ici est d'émuler les pièces ou les périphériques connectés à l'AVR. Bien sûr, vous n'avez pas besoin d'émuler tout le matériel, il vous suffit de générer le stimulus approprié pour que l'AVR soit trompé.
Cet exemple de carte connecte un Atmega48 à un écran LCD HD44780 émulé et affiche un compteur en cours sur l'écran LCD. Tout est émulé, le firmware fonctionne exactement comme ça sur un vrai matériel.
Et ceci est une trace gtkwave de ce que fait le firmware. Vous pouvez zoomer, mesurer, etc. dans gtkwave, sélectionner des traces à voir, etc.
De nombreux autres exemples sont disponibles !