|
本帖最后由 68336016 于 2021-10-10 08:54 编辑
用的是CH579,M0系列单片机,软件是MDK 5.24,在官方例子上修改的工程,添加了CMSIS-RTX系统。
我定义了数组,通过sscanf %d 往数组成员赋值。
代码这样写在电脑codeblocks和STM32F103是可以正常运行的。
但是在CH579上不能这样用,会无法运行,如果不用数组(数组成员地址是连续的),单独定义3个uint8_t变量(地址打印出来相差4byte),是正常运行的。
如果将数组uint8_t改为uint32_t,也能正常运行。或者改用C99的特性,将%d改成%hhu也可以正常运行。
理论上说sscanf用%d时候,得用整型,但是搞不清楚在STM32F103上和电脑上这样用又是没问题的。
以前这么用,没遇到问题,就没去想那么多,结构体字节对齐的概念知道,但是这里也没用结构体。
再如sscanf %x 提取数据给uint16_t变量,在CH579上也不行,得改为%hx。
- uint8_t *str = "11-22-33";
- uint8_t Val[3];
- sscanf(str, "%d-%d-%d", &Val[0], &Val[1], &Val[2]);
- printf("%d-%d-%d\r\n", Val[0], Val[1], Val[2]);
复制代码 |
|