lrfad2 escreveu:
Agora o que significa (U32*) pra mim ainda é um icógnita, pois achei isso num app notes da vida. Se souber e puder me explicar agradeço antecipadamente.
Leandro
Bom, como não mexo com o uVision não saberia te dizer onde realmente isto está declarado, mas tenho quase certeza de que o tipo de dado U32 está definido em algum .h como unsigned long.
Então você resolveu o seu problema criando a variável PointerAddr como sendo uma unsigned long por exemplo, carregando diretamente nela o endereço de memória do bitmap e por fim fazendo um casting (U32*) para a variável de ponteiro Pointer. Acredito que você nem necessite então da variável pointer. Você pode testar isto:
unsigned long PointerAddr;
PointerAddr = 0x0004001F;
E toda vez que quiser referir a variável PointerAddr como sendo um ponteiro para uma posição de memória, seria usando o casting. Ou seja, onde você usa a variável ponteiro (Pointer) atualmente, você poderia substituir por:
(unsigned long*)PointerAddr ou (U32*)PointerAddr
Deve acabar funcionando para ambos os casos.
Abaixo segue um exemplo de código que utilizo para apagar a flash interna de um coldfire para posterior salvamento de dados. O coldfire tem um esquema diferente dos arms para apagamento, por isso o segundo argumento da função que realmente apaga é (unsigned long) 0. Mas serve para demonstrar o uso do casting em C para apontamentos de posição de memória.
- Código: Selecionar todos
int flash_erase( void *pio )
{
unsigned long address;
flash_init();
for( address = FLASH_START; address < FLASH_END; address += PAGE_SIZE )
flash_page_erase( (unsigned long *)address, (unsigned long)0 );
return(0);
}
Abraço
Alexandre