что то у меня не клеится с указателем на flash в Mega128
(«Телесистемы»: Конференция «Микроконтроллеры и их применение»)

миниатюрный аудио-видеорекордер mAVR

Отправлено Romario 10 сентября 2004 г. 14:14

необходимо считать массив с адреса 0x2800 флэш размером 93023 байт
(пересечение через границу 64К)


/*


u8_t __farflash *pf;

static void func(void) {

u32_t cnt;
u8_t a;

pf = (u8_t __farflash *)0x2800;
for (cnt=0;cnt<98023;cnt++) {
a = *pf++;
wrSPI(a);
}

while(1);
}


\ In segment CODE, align 2, keep-with-next
125 static void Enter(void) {
\ Enter:
\ 00000000 ........ CALL ?PROLOGUE4_L09
126
127 u32_t cnt;
128 u8_t a;
129
130
131
132 pf = (u8_t __farflash *)0x2800;
\ 00000004 E000 LDI R16,0
\ 00000006 E218 LDI R17,40
\ 00000008 .... LDI R30,LOW(pf)
\ 0000000A .... LDI R31,(pf) >> 8
\ 0000000C 8300 ST Z,R16
\ 0000000E 8311 STD Z+1,R17
\ 00000010 8302 STD Z+2,R16
133 for (cnt=0;cnt<98023;cnt++) {
\ 00000012 EE87 LDI R24,231
\ 00000014 E79E LDI R25,126
\ 00000016 E0A1 LDI R26,1
\ 00000018 E0B0 LDI R27,0
134 a = *pf++;
135 wrSPI(a);
\ ??Enter_0:
\ 0000001A 91E0.... LDS R30,pf
\ 0000001E 91F0.... LDS R31,(pf + 1)
\ 00000022 9130.... LDS R19,(pf + 2)
\ 00000026 BF3B OUT 0x3B,R19
\ 00000028 9107 ELPM R16,Z+
\ 0000002A 93E0.... STS pf,R30
\ 0000002E 93F0.... STS (pf + 1),R31
\ 00000032 9330.... STS (pf + 2),R19
\ 00000036 .... RCALL wrSPI
136 }
\ 00000038 5081 SUBI R24,1
\ 0000003A 4090 SBCI R25,0
\ 0000003C 40A0 SBCI R26,0
\ 0000003E 40B0 SBCI R27,0
\ 00000040 2F08 MOV R16,R24
\ 00000042 2B09 OR R16,R25
\ 00000044 2B0A OR R16,R26
\ 00000046 2B0B OR R16,R27
\ 00000048 F741 BRNE ??Enter_0
137
138
139 while(1);
\ ??Enter_1:
\ 0000004A CFFF RJMP ??Enter_1
140 }
141



*/


RAMPZ он грузит из R19
а потом сохраняет R19 в "pf"
Но при инкременте pf, Z переносит в "pf"
а пересечение границы как бы не учитывает

в описании сказано что Max object size of __far = 65535 bytes
но вот как это приплести к проблеме?

Вобщем как выйти из положения?

Составить ответ  |||  Конференция  |||  Архив

Ответы



Перейти к списку ответов  |||  Конференция  |||  Архив  |||  Главная страница  |||  Содержание  |||  Без кадра

E-mail: info@telesys.ru