AVR Assembler

Information sur le langage "assembleur" (langage machine) des chips utilisés par l'Arduino.
° La liste des instructions assembleur, du site de microchip.
C'est une référence.
° AVR-LibC Project. Peu accessible.
° The AVR-LibC package provides a subset of the standard C library for AVR 8-bit RISC microcontrollers.
Du site GitHub.
° Inline Assembly in Arduino sketches.
° Inline Assembler Cookbook
° Document : "8-bit AVR Microcontroller with 32K Bytes In-System Programmable Flash"
Donne la memory Map de l'ATMega328P. C'est un document de 294 pages.
° Atmel AVR 8-bit Instruction Set
Toutes les instructions de l'Assembleur, bien présenté. Document de 152 pages.
Les pages : "Complete Instruction Set Summary" 11 à 14 sont très utiles.
C'est un document que j'apprécie particulièrement.
° AVR® Instruction Set Manual
Un autre manuel donnant la liste des instruction. Document de 166 pages.
° Atmel AVR instruction set, la page de Wikipedia.
° Assembly via Arduino (part 1) - Introduction
Le début d'une suite de vidéos sur l'assembleur dans l'IDE de Arduino.
Très bien fait.
° La playliste des vidéos sur l'assembleur dans l'IDE de Arduino.
° Using Assembler within an Arduino Sketch - easy to do!
Une autre vidéo expliquant comment écrire des lignes de code en assembleur dans l'IDE de Arduino.
Un peu trop de blablabla qui rend la vidéo trop longue, mais il y a des informations intéressantes.
°
°
° AVR Assembler tutorial 1
.
° AVR Assembler tutorial 3
.
° AVR Assemble, lecture 6.
.
° Arduino inline Assembly
.
° Arduino assembler examples.
.
Chercher : arduino inline assembly
https://www.google.ch/url?sa=t&rct=j&q=&esrc=s&source=web&cd=3&ved=0ahUKEwjm2qaC0KDaAhVRzKQKHSxUC_oQFgg6MAI&url=https%3A%2F%2Fucexperiment.wordpress.com%2F2016%2F03%2F10%2Farduino-inline-assembly-tutorial-4%2F&usg=AOvVaw1HCeOMwX18sb-qwFPpiAhz
https://www.google.ch/url?sa=t&rct=j&q=&esrc=s&source=web&cd=4&cad=rja&uact=8&ved=0ahUKEwjm2qaC0KDaAhVRzKQKHSxUC_oQFghDMAM&url=https%3A%2F%2Fucexperiment.wordpress.com%2F2016%2F03%2F31%2Farduino-inline-assembler-tutorial-11-tables%2F&usg=AOvVaw1qUpvkJhmN9UKaa7bHKoBx
https://www.google.ch/url?sa=t&rct=j&q=&esrc=s&source=web&cd=5&cad=rja&uact=8&ved=0ahUKEwjm2qaC0KDaAhVRzKQKHSxUC_oQFghMMAQ&url=https%3A%2F%2Fucexperiment.wordpress.com%2F2016%2F03%2F16%2Farduino-inline-assembly-tutorial-7-bit-shifts%2F&usg=AOvVaw15UHzp4PU9okwxXSm3xKY1
https://www.google.ch/url?sa=t&rct=j&q=&esrc=s&source=web&cd=6&cad=rja&uact=8&ved=0ahUKEwjm2qaC0KDaAhVRzKQKHSxUC_oQFghVMAU&url=https%3A%2F%2Fucexperiment.wordpress.com%2F2016%2F03%2F11%2Farduino-inline-assembly-tutorial-5-2%2F&usg=AOvVaw0Sek8XqPtyUbVIMjltoaTR
https://www.google.ch/url?sa=t&rct=j&q=&esrc=s&source=web&cd=7&cad=rja&uact=8&ved=0ahUKEwjm2qaC0KDaAhVRzKQKHSxUC_oQFgheMAY&url=https%3A%2F%2Fucexperiment.wordpress.com%2F2016%2F04%2F02%2Farduino-inline-assembly-tutorial-12-functions%2F&usg=AOvVaw3mh86aDOlxeGMiNfstmCIC
° Un livre sur l'Arduino inline assembly
.
° One second delay in assembly language.
.
° Port Registers
Comment accéder à 8 pins d'un coup.
°
.
°
.

Comment voir le code Assembleur généré par l'IDE Arduino après compilation ?

Il faut en premier installer le programme : avr-objdump
Pour l'installer, taper dans un Terminal :
sudo apt install binutils-avr

La commande suivante permet de voir le code assembleur généré.
avr-objdump -h -S -z ex5040_ASM_blink_pin13.ino.elf

Pour mettre le résultat dans un fichier .asm
avr-objdump -h -S -z ex5040_ASM_blink_pin13.ino.elf > ex5040_ASM_blink_pin13.asm

Sous windows :
D:\LocalData\user\Downloads\arduino-1.8.5\avr-objdump -S -z C:\Users\user\AppData\Local\Temp\arduino_build_956846/sketch_sep10a.ino.elf > D:\LocalData\user\Downloads\arduino-1.8.5\myskeych.asm



° ex0400_timer_interrupt.ino
.
° ex0401_timer_interrupt.ino
.

Avec la colorisation syntaxique   ...   Sans la colorisation syntaxique

ex0400_timer_interrupt.ino   TOP
Un petit exemple d'utilisation du timer du ATmega328 de l'Arduino, pour qu'il génère des "interrupt", qui accèdent régulièrement à une fonction.


ex0400_timer_interrupt.ino
Il n'y a pas d'images associée, car le but est juste de tester les timers, sans connexions hardware.

ex0401_timer_interrupt.ino   TOP
.
int16_t _atoi(const char *s) {
#pragma GCC diagnostic push
#pragma GCC diagnostic ignored "-Wuninitialized"
  //sign & c are initialized inside inline asm code
  register uint8_t sign, c;
#pragma GCC diagnostic pop
  //force result into return registers
  register int16_t result asm("r24"); 
   
  asm (
    "ldi  %A0, 0x00         \n" //result = 0
    "ldi  %B0, 0x00         \n"
 
  "1:                       \n"
    "ld   %2, Z+            \n" //fetch char
    "cpi  %2, '-'           \n" //negative sign?
    "brne 2f                \n"
    "ldi  %3, 0x01          \n" //sign = TRUE
 
  "2:                       \n"
    "cpi  %2, '/' + 1       \n" //step over whitespace/garbage
    "brcc 3f                \n"
    "rjmp 1b                \n"
 
  "3:                       \n"
    "rjmp 5f                \n"
 
  "4:                       \n"
    "ldi  r23, 10           \n" //result *= 10
    "mul  %B0, r23          \n"
    "mov  %B0, r0           \n"
    "mul  %A0, r23          \n"
    "mov  %A0, r0           \n"
    "add  %B0, r1           \n"
    "clr  __zero_reg__      \n" //r1 trashed by mul
    "add  %A0, %2           \n" //result += new digit
    "adc  %B0, __zero_reg__ \n"
    "ld   %2, Z+            \n" //fetch next digit char
   
  "5:                       \n"
    "subi %2, '0'           \n" //convert char to 0-9
    "cpi  %2, 10            \n" //end of string?
    "brlo 4b                \n"
 
    "cpi  %3, 0             \n" //negative?
    "breq 6f                \n"
    "com  %B0               \n" //negate result
    "neg  %A0               \n"
    "sbci %B0, -1           \n"
   
  "6:                       \n"
    : "+r" (result) : "z" (s), "a" (c), "a" (sign) : "memory"
  );
 
  return result;
}
ex0401_timer_interrupt.ino
Il n'y a pas d'images associée, car le but est juste de tester les timers, sans connexions hardware.


TOP

Plan du Site : Home   arrow   Microcontroleur   arrow   avr_assembler.html ( = http://www.juggling.ch/gisin/microcontroleur/avr_assembler.html )


Page mise à jour le 26 novembre 2024 par Bernard Gisin     ( Envoyer un e-mail )
Hébergement par : www.infomaniak.ch