Quando aloco o dados sem inicializar os valores, como abaixo, o dado fica no local correto...
- Código: Selecionar todos
unsigned int Buffer_A [256] absolute 0x4000 ;
Quando fuço no .list, o dado está alocado realmente no endereço 0x4000 (endereço inicial da DPRAM dos canais de DMA).
- Código: Selecionar todos
0x4000 ics Buffer_A
Porém se inicializo meu buffer, como abaixo, o compilador joga os dados para o endereço 0x8000...
- Código: Selecionar todos
unsigned int Buffer_B [256] = {Dado1, Dado2...Dado256} absolute 0x4300 ;
- Código: Selecionar todos
0x8000 ics Buffer_B
Eu já tentei mudar a declaração para "volatile" e outras cositas más, pero o compilador sempre aloca em 0x8000...
É claro que se eu declarar sem inicializar (como no Buffer_A) e preencher depois meu buffer com algo do tipo abaixo (preencher o buffer), a coisa funciona, mas...
- Código: Selecionar todos
for (int i =0 ; i <= 255 ; i++) {
Buffer_B [i] = i +5 ;
} ;
Como referência, tô usando os canais 1 e 2 do DMA para transferir dados para o canal de Output Compare 1 e para a porta SPI para gerar video, respectivamente...DsPic33FJ128GP802 e Mikroc Pro DsPic V6.2