Salvar na Flash + CW10 + display 2x16

Olá.
Estou fazendo um programa para MC9s08PA32 com o CodeWarrior 10, em C, e usando display 2x16 com apenas 4 linhas de dados. O circuito funcionou como esperado e consegui usar e configurar os I/Os, timers e display, porém não consegui fazer o display exibir corretamente as mensagens que usam as variáveis salvas na flash. Usei a seguinte sentença para definir os campos:
const unsigned char txtL01[16] @0x8000 = " INCENDIO L01 ";
O compilador dá a seguinte mensagem de exclamação:
C3401 Resulting String is not zero terminated
Consegui corrigir a falha que dá na execução mudando pouca coisa no programa (usei o exemplo do livro do Fabio Pereira - HCS08 Unleashed - p. 356):
void LCD_write_string (char *c)
{
unsigned char count_16 = 16; //
while (*c)
{
LCD_write_char(*c);
c++;
count_16--; //
if(!count_16) break; //
}
}
Basicamente o programa parou de identificar o tamanho da string, então forcei ele a parar no caracter 16 (acrescentei os 3 comandos com comentários). Gostaria de saber qual a forma correta para definir as variáveis salvas na flash de forma que o compilador consiga fazer o programa passar corretamente o tamanho da string.
Outra dúvida é de com configuro o NV_FPROT, coloquei apenas " NV_FPROT = 0b00111000 " e não funcionou...
Por fim, não consegui ler o FIFO do ADC. Não é somente executar n leituras repetidas, de acordo com o tamanho escolhido? Estou usando 8b de resolução..
// mediax = ADC_R; // media do FIFO
// media_4.valor16 = mediax; // 1º level
// mediax = ADC_R; // media do FIFO
// media_4.valor16 = media_4.valor16+mediax; // 2º level
// mediax = ADC_R; // media do FIFO
// media_4.valor16 = media_4.valor16+mediax; // 3º level
// mediax = ADC_R; // media do FIFO
// media_4.valor16 = media_4.valor16+mediax; // 4º level
// media_4.valor16 = media_4.valor16/4; // total
// adc_media = media_4.valor8b; // union com os 8 LSB
Grato.
Estou fazendo um programa para MC9s08PA32 com o CodeWarrior 10, em C, e usando display 2x16 com apenas 4 linhas de dados. O circuito funcionou como esperado e consegui usar e configurar os I/Os, timers e display, porém não consegui fazer o display exibir corretamente as mensagens que usam as variáveis salvas na flash. Usei a seguinte sentença para definir os campos:
const unsigned char txtL01[16] @0x8000 = " INCENDIO L01 ";
O compilador dá a seguinte mensagem de exclamação:
C3401 Resulting String is not zero terminated
Consegui corrigir a falha que dá na execução mudando pouca coisa no programa (usei o exemplo do livro do Fabio Pereira - HCS08 Unleashed - p. 356):
void LCD_write_string (char *c)
{
unsigned char count_16 = 16; //
while (*c)
{
LCD_write_char(*c);
c++;
count_16--; //
if(!count_16) break; //
}
}
Basicamente o programa parou de identificar o tamanho da string, então forcei ele a parar no caracter 16 (acrescentei os 3 comandos com comentários). Gostaria de saber qual a forma correta para definir as variáveis salvas na flash de forma que o compilador consiga fazer o programa passar corretamente o tamanho da string.
Outra dúvida é de com configuro o NV_FPROT, coloquei apenas " NV_FPROT = 0b00111000 " e não funcionou...
Por fim, não consegui ler o FIFO do ADC. Não é somente executar n leituras repetidas, de acordo com o tamanho escolhido? Estou usando 8b de resolução..
// mediax = ADC_R; // media do FIFO
// media_4.valor16 = mediax; // 1º level
// mediax = ADC_R; // media do FIFO
// media_4.valor16 = media_4.valor16+mediax; // 2º level
// mediax = ADC_R; // media do FIFO
// media_4.valor16 = media_4.valor16+mediax; // 3º level
// mediax = ADC_R; // media do FIFO
// media_4.valor16 = media_4.valor16+mediax; // 4º level
// media_4.valor16 = media_4.valor16/4; // total
// adc_media = media_4.valor8b; // union com os 8 LSB
Grato.