在PIC单片机中为系列号保留ROM空间的方法

描述

问:我想把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。

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分