*(uint16_t *)(&cmd.D_len+1+cmd.D_len)=activeParams.ES_Num.Val++;
cmd是一个结构体,定义时用到过 __attribute__ ((packed)),比较复杂,我就不贴出来了。上边那行代码在stm32 cubeIDE中编译后下载到stm32单片机中没有问题。CH32V307中编译无问题,下载到单片机后,运行就进 HardFault_Handler。
把代码改成:
uint8_t *p=&cmd.D_len+1+cmd.D_len;
p[0]=activeParams.ES_Num.byte.LB;
p[1]=activeParams.ES_Num.byte.HB;
运行就没有问题了。看样子是指针寻址的对齐问题。后来又做测试,发现 1 如果是1,3,5,都不行,如果是2,4,6,程序可以正常运行。
请问:这是两种内核的区别么?如果我还是想用最开始那种代码写,有啥办法能解决吗?谢谢!