egipts escreveu:const unsigned char txtL01[16] @0x8000 = " INCENDIO L01 ";
O compilador dá a seguinte mensagem de exclamação:
C3401 Resulting String is not zero terminated
const unsigned char txtL01[] @0x8000 = " INCENDIO L01 ";
egipts escreveu: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)
void LCD_write_string (char *c)
{
while (*c)
LCD_write_char(*c++);
}
egipts escreveu:OUtra coisa, como faço para limpar uma Struct com esta a seguir, mas sem ser bit a bit? Tem como apagar o byte todo se fazer uma union?
struct rtc_func_ // registrador de configuração das funções do RTC (real time clock)
{
char bat_charge : 1;
char bat_nok : 1;
char sem_bat : 1; //
char incendio : 1;
char sirene_stat : 1;
char open_load : 1;
char falta_rede : 1;
char rede_nok : 1;
} rtc_func;
memset(&rtc_func, 0, sizeof(rtc_func) / sizeof(char));
egipts escreveu: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..
egipts escreveu:Outra dúvida é de com configuro o NV_FPROT, coloquei apenas " NV_FPROT = 0b00111000 " e não funcionou...
cfreund escreveu:egipts escreveu:const unsigned char txtL01[16] @0x8000 = " INCENDIO L01 ";
O compilador dá a seguinte mensagem de exclamação:
C3401 Resulting String is not zero terminated
A string tem 16 caracteres, logo o array deve ser definido para 17 caracteres.
Deixe isso por conta do compilador:
- Código: Selecionar todos
const unsigned char txtL01[] @0x8000 = " INCENDIO L01 ";
egipts escreveu: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)
O erro está na string, não na função. Corrija o tamanho para acomodar o NULL no final da string e faça:
- Código: Selecionar todos
void LCD_write_string (char *c)
{
while (*c)
LCD_write_char(*c++);
}
cfreund escreveu:egipts escreveu: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..
https://www.nxp.com/docs/en/application-note/AN4587.pdf
egipts escreveu:Eu estava seguindo pelo AN4347... mas ainda estou confuso
na página 56 dele tem a sentença a seguir, que pelo que entendi ela lê o ADC_R até limpar o flag FEMPTY, correto?
while( !ADC_SC2_FEMPTY )
{
uiADC_Result[ucCount++] = ADC_R;
}
O resultado é o total das somas e não a média, correto?
int soma, i;
for (soma = 0, i = 0; i < ucCount; ++i)
{
soma += uiADC_Result[i];
}
media = soma / ucCount;
cfreund escreveu:egipts escreveu:Eu estava seguindo pelo AN4347... mas ainda estou confuso
na página 56 dele tem a sentença a seguir, que pelo que entendi ela lê o ADC_R até limpar o flag FEMPTY, correto?
while( !ADC_SC2_FEMPTY )
{
uiADC_Result[ucCount++] = ADC_R;
}
O resultado é o total das somas e não a média, correto?
Está sendo salvo todas as leituras no vetor uiADC_Result.
Para média, pode ser feito:
- Código: Selecionar todos
int soma, i;
for (soma = 0, i = 0; i < ucCount; ++i)
{
soma += uiADC_Result[i];
}
media = soma / ucCount;
cfreund escreveu:egipts escreveu:Outra dúvida é de com configuro o NV_FPROT, coloquei apenas " NV_FPROT = 0b00111000 " e não funcionou...
Página 86 @ https://www.nxp.com/docs/en/reference-m ... _Rev.1.pdf
"During the reset
sequence, the FPROT register is loaded with the contents of the flash protection byte in
the flash configuration field at global address 0xFF7C in flash memory. "
Exemplo está no rodapé da página 13: https://www.nxp.com/docs/en/application-note/AN4570.pdf
egipts escreveu:cfreund escreveu:egipts escreveu:const unsigned char txtL01[16] @0x8000 = " INCENDIO L01 ";
O compilador dá a seguinte mensagem de exclamação:
C3401 Resulting String is not zero terminated
A string tem 16 caracteres, logo o array deve ser definido para 17 caracteres.
Deixe isso por conta do compilador:
- Código: Selecionar todos
const unsigned char txtL01[] @0x8000 = " INCENDIO L01 ";
egipts escreveu: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)
O erro está na string, não na função. Corrija o tamanho para acomodar o NULL no final da string e faça:
- Código: Selecionar todos
void LCD_write_string (char *c)
{
while (*c)
LCD_write_char(*c++);
}
Você acertou na mosca: são 17 bytes... Mas como eu não sabia e havia deixado espaço menor entre os arrays(16), o compilador dava erro na hora de gravar..
const unsigned char txtL01[] @0x8000 = " INCENDIO L01 ";
const unsigned char txtL02[] @0x8010 = " INCENDIO L02 ";
const unsigned char txtL03[] @0x8020 = " INCENDIO L03 ";
...
Sendo o correto:
const unsigned char txtL01[] @0x8000 = " INCENDIO L01 "; // ARRAY COM 17 BYTES
const unsigned char txtL02[] @0x8011 = " INCENDIO L02 ";
const unsigned char txtL03[] @0x8022 = " INCENDIO L03 ";
Dessa forma a função LCD_write_string funcionou perfeitamente...
Muito obrigado!!!
Vou verificar as demais respostas... Grato.
cfreund escreveu:
A string tem 16 caracteres, logo o array deve ser definido para 17 caracteres.
Deixe isso por conta do compilador:
- Código: Selecionar todos
const unsigned char txtL01[] [color=#FF0000][b]@0x8000[/b] [/color]= " INCENDIO L01 ";
egipts escreveu:O alerta na definição das variáveis sumiu, mas o da LCD_write_string continua (mas funciona... rs):
C1825 Indirection to different types ('const unsigned char *' insted of 'unsigned char *')
Tenho que montar outra LCD_write_string com outra configuração de parâmetro (const)?
Grato.
cfreund escreveu:egipts escreveu:OUtra coisa, como faço para limpar uma Struct com esta a seguir, mas sem ser bit a bit? Tem como apagar o byte todo se fazer uma union?
struct rtc_func_ // registrador de configuração das funções do RTC (real time clock)
{
char bat_charge : 1;
char bat_nok : 1;
char sem_bat : 1; //
char incendio : 1;
char sirene_stat : 1;
char open_load : 1;
char falta_rede : 1;
char rede_nok : 1;
} rtc_func;
- Código: Selecionar todos
memset(&rtc_func, 0, sizeof(rtc_func) / sizeof(char));
Outra forma é utilizando enum, coloque um variável do tamanho da struct.
Voltar para NXP (ex-FreeScale (ex-Motorola))
Usuários navegando neste fórum: Nenhum usuário registrado e 1 visitante