Pergunta

Em minha micro HCS08 de 8 bits, sempre que eu chamo uma função de biblioteca que retorna valores para os ponteiros, eu passo, e eu realmente não os quero, joguei um nulo, por exemplo

UART_SendBlock((char *)txstr, strlen(txstr), NULL);

O tipo do último argumento é uint16_t * e retorna o número de caracteres realmente enviados, um valor com o qual não me importo.

No entanto, eu estava tendo problemas com a porta A no meu micro sendo mangustado toda vez que essa função era chamada, e depurar me apontava para esse argumento estragando as coisas. Os registros de configuração da porta A ao vivo nos endereços 0x0000 e 0x0001, que é onde NULL (também conhecido como (void *)0) pontos. Eu pensei NULL De alguma forma, era mágica onde não faria nada, mas não parece assim.

Minha solução alternativa parece realmente hacker:

#define MNUL (void *)(&mynull)
uint32_t mynull;

Existe uma solução melhor? Tentei definir o MNUL para um segmento de memória não utilizado no meu processador, mas isso causa uma redefinição imediata.

Foi útil?

Solução

A menos que a documentação para uart_sendblock afirme que passar um ponteiro nulo está ok, você provavelmente recebe um comportamento indefinido se o fizer - e, nesse caso comportamento".

Basta chamá -lo com um parâmetro, não há razão para ser "inteligente" sobre isso.

uint16_t unused_16;
UART_SendBlock((char *)txstr, strlen(txstr), &unused_16);

Se você for restrito a recursos, faça unused_16 um global e reutilizá -lo em outros lugares

Outras dicas

A função está tentando escrever um valor para onde quer que os últimos argumentos apontem. Você está passando no NULL (0x0000), então o resultado está sendo escrito no local da memória 0x0000, ou sua porta A. Normalmente (em programação geral), a função verificaria o argumento e não tentaria escrever no local se fosse NULL, mas parece que essa função não segue essa convenção. Você precisa alocar uma variável para que a função escreva seu resultado, mesmo que você não o não use.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top