若用下面这种写入方式
void testcom()
{
uint8_t mybuf[16] = {0x00, 0x11, 0x22, 0x33, 0x44, 0x55, 0x66, 0x77, 0x88, 0x99, 0xaa, 0xbb, 0xcc, 0xdd, 0xee, 0xff};
rt_device_write(upper_com_serial, 0, mybuf, 16);
}
MSH_CMD_EXPORT(testcom, testcom);
串口写入还未完成,函数就退出了,随后局部变量mybuf的内存就被释放
串口打印数据为:00 11 22 20 0B 8A 00 08 0C 1A 42 00 E7 E7 00 08
可见前两位是正常的,后面就出错了。
如果改成如下代码,将mybuf改为全局变量,就不会出问题:
uint8_t mybuf[16] = {0x00, 0x11, 0x22, 0x33, 0x44, 0x55, 0x66, 0x77, 0x88, 0x99, 0xaa, 0xbb, 0xcc, 0xdd, 0xee, 0xff};
void testcom()
{
rt_device_write(upper_com_serial, 0, mybuf, 16);
}
MSH_CMD_EXPORT(testcom, testcom);
串口打印数据正常:00 11 22 33 44 55 66 77 88 99 AA BB CC DD EE FF。
原作者:龙王赘婿