地址0被HCS08上的NULL指针覆盖

Nic*_*k T 2 c embedded null 8-bit 68hc11

在我的8位飞思卡尔HCS08微型计算机上,每当我调用一个库函数,它返回值指向我传递它,我真的不想要它们,我扔了一个NULL,例如

UART_SendBlock((char *)txstr, strlen(txstr), NULL);
Run Code Online (Sandbox Code Playgroud)

最后一个参数的类型是 uint16_t *并返回实际发送的字符数,这是我不关心的值.

但是,每当调用该函数时,我的微型端口上的端口A出现了问题,并且调试向我指出了这个问题搞砸了.端口A的配置寄存器位于地址0x0000和0x0001,这是NULL(aka (void *)0)指向的地方.我认为NULL它实际上并不是什么魔法,但它似乎并不是这样.

我的解决方法感觉非常黑客:

#define MNUL (void *)(&mynull)
uint32_t mynull;
Run Code Online (Sandbox Code Playgroud)

有更好的解决方案吗?我尝试将MNUL定义到处理器上未使用的内存段,但这会导致立即重置.

nos*_*nos 9

除非UART_SendBlock的文档声明传递NULL指针是正常的,否则你可能会得到未定义的行为 - 在这种情况下,似乎函数只是写入你传递它的地址,地址0 - 这将在"undefined"下面行为".

只需用参数调用它,没有理由对它"聪明".

uint16_t unused_16;
UART_SendBlock((char *)txstr, strlen(txstr), &unused_16);
Run Code Online (Sandbox Code Playgroud)

如果您受资源限制,请创建unused_16全局并在其他位置重复使用它