[开发工具] IAR FOR ARM 7.10编译错误[Pe028]

[复制链接]
3216|10
 楼主| index219 发表于 2015-9-25 20:37 | 显示全部楼层 |阅读模式
问题: 我在使用IAR FOR ARM 7.10编译 stm32f407工程时出现一下错误
Error[Pe028]: expression must have a constant value

1.错误指向IAR工程代码见下图
{  10,  10,  5, (GUI_CONST_STORAGE unsigned char *)(flash_start_address[0]) }

2.经过测试将u32 flash_start_address[19] = {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}中的19个元素改成{  10,  10,  5, (GUI_CONST_STORAGE unsigned char *)(0x1000) };编译及可以通过。

3.上诉类似代码在Keil中编译可以通过。

向各位大神求解:
因为我的变量flash_start_address[19]需要在其他地方计算出值,所以无法一开始就给定固定值。然后作为该处指针的地址传值进去。
问: 网上查资料说IAR编译审核比Keil严谨,我想知道怎么修改该错误【Pe028】,或者说如何配置IAR编译器使它忽略此处错误。

非常感谢大家!
QQ图片20150925202520.png
稳稳の幸福 发表于 2015-9-26 10:41 | 显示全部楼层
因为那个后面是个地址不是数组元素,所以你取地址符也是可以。
 楼主| index219 发表于 2015-9-26 11:22 | 显示全部楼层
稳稳の幸福 发表于 2015-9-26 10:41
因为那个后面是个地址不是数组元素,所以你取地址符也是可以。

谢谢你的回复,但如果是取地址的话,那结果就成取的是变量的地址了,而不是变量值了。我是想用变量值作为使用的地址,而不是变量地址作为使用的地址。 还有什么办法么?奇怪的是在KEIL中类似的操作KEIL编译器不会报错
feiguangliuyue 发表于 2015-9-26 11:33 | 显示全部楼层
可以试一试把强制类型转换放在其它中语句进行.
 楼主| index219 发表于 2015-9-26 13:28 | 显示全部楼层
feiguangliuyue 发表于 2015-9-26 11:33
可以试一试把强制类型转换放在其它中语句进行.

试过了,只要 (GUI_CONST_STORAGE unsigned char *)(flash_start_address[0])中的flash_start_address[0]不是一个常量(像0x1000)的话,在其它地方都会提示同样的错误。焦急求搞定啊。
feiguangliuyue 发表于 2015-9-26 14:59 | 显示全部楼层
index219 发表于 2015-9-26 13:28
试过了,只要 (GUI_CONST_STORAGE unsigned char *)(flash_start_address[0])中的flash_start_address[0] ...

你的这个数组实在初始声明里初始化的么?在创建数组的时候不能赋值一个变化的值.
迪卡 发表于 2015-9-26 17:52 | 显示全部楼层
试试强制类型转换
huangcunxiake 发表于 2015-9-26 23:45 | 显示全部楼层
应该本来就是那么写的不
lefeng 发表于 2015-9-27 22:08 | 显示全部楼层
试一试把强制类型转换放在其它中语句进行
稳稳の幸福 发表于 2015-9-29 19:19 | 显示全部楼层
这个就尽量避免使用自己不太了解的东西吧。
拉克丝 发表于 2015-9-30 20:24 | 显示全部楼层
Error不能忽略吧,忽略了还能运行吗,warning可以忽略,IAR里可以设置
您需要登录后才可以回帖 登录 | 注册

本版积分规则

3

主题

8

帖子

0

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