Estou usando a versão 5.070,que contem muitas melhorias para a família 18,que é a que uso com esse compilador.
Não programo muito com ele,apenas quando vou uso USB HID pois já tenho vários templates feito nele,além de ser rápido a programação,mas conforme acrescento alguma rotina ou lógica algo pode acontecer.
Hoje acrescentei duas rotinas de leitura da eeprom interna do 18F4550,para serem mostradas no programa principal,no PC via USB,os dados gravados,e surgiu um comportamento 'estranho'.
Nos endereços da eeprom interna do PIC,entre os endereços 24 a 144,existem dados que podem ser gravados ou lidos e que são armazenados no boot,em endereços de ram(variáveis) e são usados por uma rotina que lê os valores e faz algo dependendo do byte gravado,ou envia para o PC,em blocos de 64 bytes(HID),pois são 120 bytes.
A rotina de início do PIC,que Lê os valores e carrega nas variáveis, está correta ,pois o micro responde a cada byte corretamente e na gravação do firmware já é estabelecido valores fixos,logo as variáveis foram carregadas corretamente e os valores da eeprom estão corretos,mas ao ler os valores das variáveis e passar para o PC,só a primeira parte(60 bytes)são enviados corretamente,a segunda parte é enviada a 28 bytes a frente do endereço especificado pela rotina

Para melhor compreensão,mostra as rotinas;
- Código: Selecionar todos
static int8 data_pc[120];
---------------------
void Mostra_Keyboard01(void)
{
int8 i;
for(i=24; i<84 ; i++)
{
out_data[i-24] = read_eeprom(i);
// out_data[i-24] = data_pc[i-24];
}
}
void Mostra_Keyboard02(void)
{
int8 i;
for(i=84; i<144 ; i++)
{
out_data[i-84] = read_eeprom(i);
// out_data[i-84] = data_pc[i];
}
}
A primeira rotina funciona corretamente utilizando a variável data_pc,que é onde fica armazenado os valores no boot(primeiros 60 bytes),a segunda não,os valores são mostrados 28 bytes a frente,mas se eu ler diretamente da eeprom,sem mudar nada na rotina,os valores ficam correto.
Para 'resolver' utilizei a leitura direta da eeprom nas duas rotinas.
O que pode estar ocorrendo?
O compilador não está encontrando algum banco da Ram?
Alguem tem alguma ideia?