[STM32F0] 如何解决“表达式必须是指向完整对象类型的指针”错误?

[复制链接]
1131|28
我的牙白 发表于 2025-9-6 08:57 | 显示全部楼层 |阅读模式
在代码中遇到了错误:

((uint8_t)(CB[arr_index].baseaddress + (CB[arr_index].position*sizeof(uint8_t)))) = ((uint8_t)data);

使用STMCube IDE时没有出现此错误,但将项目导入IAR嵌入式工作台后,该行出现错误。

有人知道为什么会出现这个错误吗?

评论

IAR 的错误源于对左值严格的语法检查  发表于 2025-9-13 13:52
sesefadou 发表于 2025-9-8 09:15 | 显示全部楼层
最终转换必须为 uint8_t* 指针类型,才能正确解引用。
uiint 发表于 2025-9-8 09:29 | 显示全部楼层

*((uint8_t *)(CB[arr_index].baseaddress + (CB[arr_index].position * sizeof(uint8_t)))) = data;
plsbackup 发表于 2025-9-8 15:25 | 显示全部楼层
baseaddress 必须是能参与算术运算的类型
jcky001 发表于 2025-9-8 16:00 | 显示全部楼层
IAR 可能认为 (uint8_t)(...) 是一个临时值,不能作为左值。
classroom 发表于 2025-9-8 16:01 | 显示全部楼层
指针解引用方式可能错误了。
cr315 发表于 2025-9-8 16:02 | 显示全部楼层
(uint8_t)(...) 不能作为左值。
duo点 发表于 2025-9-8 18:02 | 显示全部楼层
GCC 可能允许某些非标准写法,但 IAR 会报错。IAR 更严格点吧。
sheflynn 发表于 2025-9-8 17:34 | 显示全部楼层
如何使用指针运算来避免复杂的类型转换
mattlincoln 发表于 2025-9-9 20:42 | 显示全部楼层
错误的类型转换链              
ccook11 发表于 2025-9-10 11:55 | 显示全部楼层
将地址计算结果保留为指针类型,再解引用赋值
houjiakai 发表于 2025-9-10 12:34 | 显示全部楼层
强制类型转换的结果是一个临时值              
claretttt 发表于 2025-9-10 13:39 | 显示全部楼层
将结果转换为volatile uint8_t*类型指针,表示该地址指向一个易变的8位数据。
hudi008 发表于 2025-9-10 15:00 | 显示全部楼层
在C语言中,赋值运算符=的左侧必须是一个可修改的左值
wilhelmina2 发表于 2025-9-13 11:59 | 显示全部楼层
左侧表达式是值类型(非左值),无法作为赋值目标。
yorkbarney 发表于 2025-9-13 13:06 | 显示全部楼层
指向uint8_t的指针              
tpgf 发表于 2025-9-13 13:52 | 显示全部楼层
类型转换和指针解引用的方式不符合 IAR 的严格语法要求
sesefadou 发表于 2025-9-13 14:02 | 显示全部楼层
通过*操作符解引用指针,实现将data写入目标内存地址。
qiufengsd 发表于 2025-9-13 14:48 | 显示全部楼层
将data赋值给目标地址。              
usysm 发表于 2025-9-13 20:01 | 显示全部楼层
赋值操作(=)的左侧必须是一个可修改的内存位置
您需要登录后才可以回帖 登录 | 注册

本版积分规则

54

主题

54

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部