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定义到处理器上未使用的内存段,但这会导致立即重置.
除非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全局并在其他位置重复使用它
| 归档时间: |
|
| 查看次数: |
322 次 |
| 最近记录: |