问:我想把Page1的ROM空间里最高地址的128个字节放到一边,我们会用外部的软硬件来额外地写入这些字节位置(我将会在生产线上对这些单片机做带有系列号的串行编程SQTP),显然,这些字节是只读的。有没有什么建议来把这样一块ROM放到一边呢?
答:我们有如下建议;在你的C模块里放置下面的代码:
extern const char myarray[]; // 这里不要声明数组的大小
#asm
psect reserved,class=CODE,delta=2
global _myarray
_myarray:
ds 128 ;保留128个字
#endasm
现在来加入linker options,把下面的PICC命令行加入:
-l-preserved=0F80h
于是你就在F80地址开始得到了128个字的空间,而且这个地址空间会被链接器在分配代码空间时避开。
如果你需要预初始化这些单元到FF或者其他值,那么它应该象这样:
#asm
psect reserved,class=CODE,delta=2
global _myarray
_myarray:
retlw 0xFF
retlw 0xFF
; 重复你需要的次数
#endasm
如果要在C代码中访问这些SQTP的系列号,可以这样:
#define SQTP_table(name,size)
extern const char name[];
asm("global _" ___mkstr(name));
asm("psect " ___mkstr(name) ",class=CODE,delta=2"); asm("_" ___mkstr(name) ":"); asm("rept " ___mkstr(size)); asm("retlw 0"); asm("endm");
SQTP_table(XXX,YYY);//把XXX改成你想要的表格名称,并把YYY改成表格的大小。例如:SQTP_table(sqtp,16);
C代码可以这样访问这些系列号:
main()
{
char ch;
ch = sqtp[3]; //把表格的第四个字节赋给变量ch。
}
你可以通过额外的命令行选项来把这个表格放置到任何你需要的地址位置:(build option->global->additional command line options)。
加入
-l-pXXX=0YYYh
这里XXX是你使用的表格的名称,YYY是地址。例如:-l-psqtp=01000h
这将把表格sqtp放置到地址0x1000。
-
单片机
+关注
关注
6037文章
44562浏览量
635809 -
ROM
+关注
关注
4文章
572浏览量
85796 -
编译器
+关注
关注
1文章
1634浏览量
49149
发布评论请先 登录
相关推荐
评论