#pragma GCC optimize "-O0"
#include "ArduinoTrace.h"
volatile uint8_t a[3]={2,3,4}, b=2, i=1, *p=&b; //a,a+1,a+2
void setup() {
// put your setup code here, to run once:
Serial.begin(9600);
addressInfo();
Serial.println("INICIO");
i=2;
b=0;
//------------- Proceso en alto nivel -------------------
// //b=a[0];
// vamos a hacer esta transferencia usando una variable pointer
//p=&a[0]; //p <-- dir de a[0]
asm volatile(
"ldi r18, lo8(a) \n"
"ldi r19, hi8(a) \n"
"sts p, r18 \n"
"sts p+1, r19 \n"
); //
//b=*p;
asm volatile(
"lds r26, p \n"
"lds r27, p+1 \n" //Z<--dir a[0]
"ld r18, X \n" //r18<-- (a[0]); r18<--2
"sts b, r18 \n"
);
//------------------------------------------------------
// DUMP(a);
DUMP(b);
DUMP(i);
}
void loop() {
}
void addressInfo()
{
Serial.println("DIRECCIONES de VARIABLES (HEX):");
Serial.print("a: ");
Serial.println((int)&a,HEX); //direccion de a
Serial.print("b: ");
Serial.println((int)&b,HEX); //direccion de b
Serial.print("i: ");
Serial.println((int)&i,HEX); //direccion de c
}