请教版主:我想在X系列单片机中的EEPROM下定义几个常量,如果我象“定义1”那样定义,取eep1时是从unpaged EEPROM的开始$c00取的,但在s19文件中根本就没有写EEPROM的代码,烧写结果EEPROM是空的。
定义1:
SEGMENTS
EEPROM = READ_ONLY 0x0C00 TO 0x0FFB;
END
PLACE
EEPCONST INTO EEPROM
END
#pragma CONST_SEG EEPCONST
const volatile byte eep0 =0x00;
const volatile byte eep1 =0x00;
const volatile byte eep2 =0x37;
a=eep1; //ldab #$c00
如果我象“定义2“那样定义,EEPROM编程没有问题,但取eep1时却按$800地址取的,请问我应该怎样定义?
定义2:
SEGMENTS
EEPROM_FF = READ_ONLY 0xFF0800 TO 0xFF0BFF;
END
PLACE
EEPCONST INTO EEPROM_FF
END
#pragma CONST_SEG EEPCONST
const volatile byte eep0 =0x00;
const volatile byte eep1 =0x00;
const volatile byte eep2 =0x37;
a=eep1; //ldab #$800
还有一个问题,为什么即便是我使用了volatile,如果eep0我没有使用的话,它还是被优化掉了?肯请版主回答,谢谢!
你可以用这个声明试试:
#pragma CONST_SEG __EPAGE_SEG EEPCONST
用了volatile说明后,只能防止常量不被立即数替代,而不能防止常量被优化掉。要防止常量被优化,可以将常量加在PRM文件的ENTRIES中,如:
ENTRIES /* keep the following unreferenced variables */
/* OSEK: always allocate the vector table and all dependent objects */
//_vectab OsBuildNumber _OsOrtiStackStart _OsOrtiStart
eep0;
eep1;
eep2;
END
[此贴子已经被作者于2008-6-5 14:38:57编辑过]
关于在S19文件中生成EEPROM数据代码的问题,你可以在burner.bbl文件中加入这样一段文字:
/* EEPROM */
len = 0x800
origin = 0x000800
destination = 0x000800
SENDBYTE 1 "%ABS_FILE%"
因为要在S19和GLO文件中都生成EEPROM数据代码,所以要在这个文件中的两处加入这段文字。这样问题就解决了。
欢迎光临 电子技术论坛_中国专业的电子工程师学习交流社区-中电网技术论坛 (http://bbs.eccn.com/) | Powered by Discuz! 7.0.0 |