AVR Assembler
Information sur le langage "assembleur" (langage machine) des chips utilisés par l'Arduino.
°
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
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
Microcontroleur
avr_assembler.html
( = http://www.juggling.ch/gisin/microcontroleur/avr_assembler.html )
Page mise à jour le 4 avril 2018 par Bernard Gisin
( Envoyer un e-mail )
Hébergement par : www.infomaniak.ch