【求助】IAR单片机C语言,Error[Pe0280]错误。

baoyz 2017-09-29 08:58:10
用C语言写的单片机程序。ATmel64单片机,IAR编译器。
在头文件中定义一个在flash中的数组。
__flash INT8U cu8v_MfData[49]={初始化若干值……}; //厂商数据
在后面的调用这个数组的值初始化。
__eeprom INT8U egu8v[49][3]=
{
cu8v_MfData[0], cu8v_MfData[0], cu8v_MfData[0], //0 ep_S1; //从这里开始报错
cu8v_MfData[1], cu8v_MfData[1], cu8v_MfData[1], //1 ep_S2; //一直报错
……
};

Error[Pe028]: expression must have a constant value
求助,我怎么才能用cu8v_MfData里的数值初始化egu8v数组?
程序目的
1、简化初始化书写
2、程序中有需要初始化egu8v的地方,直接用for(i){egu8v[i][0]=cu8v_MfData[i];}
3、cu8v_MfData不能在系统初始化时,赋值给egu8v[。
...全文
1443 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
baoyz 2017-09-30
  • 打赏
  • 举报
回复
算了,不费事搞这个了。用一堆常量赋初值算了。谢谢大家。
C_Rabbit 2017-09-29
  • 打赏
  • 举报
回复
那,试试const关键字?
baoyz 2017-09-29
  • 打赏
  • 举报
回复
是这样的,在头文件中使用“__eeprom ”定义的变量,会被编译器认定为eeprom变量,第一次上电是赋予定义时被赋的值。当用户改变这些变量值后,值被保存,当断电后,再次通电时,这些变量将使用新的(用户设定的)值。 所以就有了“cu8v_MfData不能在系统初始化时,赋值给egu8v”。 如果cu8v_MfData在系统初始化时,赋值给egu8v,则用户设定的值再断电后将失效。
C_Rabbit 2017-09-29
  • 打赏
  • 举报
回复
不是太懂你的意思 换个思路,定义数组的时候不赋值,后续初始化过程中调用函数进行赋值应该不会有这个问题 如果目的是简化初始化函数……那么你直接用#define来代替cu8v_MfData[49]会不会更直接一些
baoyz 2017-09-29
  • 打赏
  • 举报
回复
谢谢。 问题是:egu8v是eeprom变量,第一次开机时才初始化这些数,以后用户设定新的数据后被保存,初始化的数据就不能用了。所以就如我程序目的3中所说“cu8v_MfData不能在系统初始化时,赋值给egu8v” cu8v_MfData用“__flash ”写在flash中已经是静态变量了吧?别处调用都正常,唯有这里不能用于新数组的初始化。 VC里这么写完全正常。
worldy 2017-09-29
  • 打赏
  • 举报
回复
初始化的值必须是常数,不能使用变量; 使用一个循环来初始化 __eeprom INT8U egu8v[49][3]; for(inti=0;i<49;i++) for(j=0;j<3;j++) { egu8v[i][j]=cu8v_MfData[j]; }
tianxj001 2017-09-29
  • 打赏
  • 举报
回复
__eeprom 在IAR里面必须用常数初始化,这个肯定是你在编译时候出错的原因。 因此你想这么方法来实现第一次开机用一系列初始数据自动初始化EEPROM这个方法是不行的。 __eeprom unsigned char p[ ]; //定义一个数组存放在EEPROM空间。 编译器会自动调用__EEPUT(ADR,VAL),__EEGET(VAR, ADR)宏函数来对EEPROM变量的操作。需要注意的是,这个方法,不能在环境设置里面附加产生EEPROM烧写文件的命令,否则报错。 因此建议使用__EEPUT(ADR,VAL),__EEGET(VAR, ADR)来操作,并用一个标志EEPROM存储位,来区别用户是不是对EEPROM进行过存储(设定)。没有进行过用户设定的,用一串特定数据来写EEPROM。 或者__eeprom unsigned char p[ ];来定义,自己做一个EEPROM烧写文件,用于芯片EEPROM数据初始化。然后用户任何对该变量写操作,都会被自动保存在EEPROM。

27,373

社区成员

发帖
与我相关
我的任务
社区描述
硬件/嵌入开发 单片机/工控
社区管理员
  • 单片机/工控社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧