Chce zaladowac do r22 pierwsza wartość z tablicy a[] czyli '1' ; do r23 pierwszą z tablicy b[] -> '5' ;Wskaznik [ptr_row] "x" (_ptr), nie działa poprawnie i mam w obu rejestrach tą samą wartość równa '5'.
a i jeszcze tablice a[] i b[] w moim kodzie beda bardzo duze wiec nie moge ich zmienic prog_char[] na char[]
#include <avr/io.h>
#include <avr/interrupt.h>
#include <avr/sleep.h>
#include <avr/pgmspace.h>
prog_char a[3] = {'1','2','3'};
prog_char b[3] = {'5','6','7'};
int main(void)
{
char * _ptr;
char * _ptr1;
_ptr= a[0];
_ptr1= b[0];
asm("\n\t"
"ld r22, %a[ptr_row] \n\t"
"lpm \n\t"
"mov r23,r0 \n\t"
"ld r22, %a[ptr_sym] \n\t"
"lpm \n\t"
"mov r22,r0 \n\t"
:
:
[ptr_row] "x" (_ptr),
[ptr_sym] "z" (_ptr1),
[_SPDR] "I" (_SFR_IO_ADDR(SPDR))
:
"r25","r24","r23","r22","r21","r18"
);
}
+0000001F: E2E9 LDI R30,0x29 Load immediate
+00000020: E0F0 LDI R31,0x00 Load immediate
+00000021: E2A6 LDI R26,0x26 Load immediate
+00000022: E0B0 LDI R27,0x00 Load immediate
+00000023: 916C LD R22,X Load indirect
+00000024: 95C8 LPM Load program memory
+00000025: 2D70 MOV R23,R0 Copy register
+00000026: 8160 LDD R22,Z+0 Load indirect with displacement
+00000027: 95C8 LPM Load program memory
+00000028: 2D60 MOV R22,R0 Copy register a i jeszcze tablice a[] i b[] w moim kodzie beda bardzo duze wiec nie moge ich zmienic prog_char[] na char[]