PIC18单片机中如何将数组常量分配到小于64K的地址空间
定义一个变量aa,想通过变量访问数组常量。由于aa只能访问64K以内的地址,但数组常量被定义在64K地址以外了,请问怎么样将数组常量定义在64K地址以内。我在程序中这样定...
定义一个变量aa,想通过变量访问数组常量。由于aa只能访问64K以内的地址,但数组常量被定义在64K地址以外了,请问怎么样将数组常量定义在64K地址以内。我在程序中这样定义的:unsigned char aa; //这个aa位于0x0002a7rom const unsigned char tt[4] = {2,3,4,5}; //这个tt位于0x0101cf。aa = tt[2]; // 现在aa不能访问tt[2],目前aa是个随机值。
展开
5个回答
2013-12-03
展开全部
去掉rom描述,有const即可。然后看数组被分配的地址是在哪里?这个数组被分配到某个地址,是由连接器确定的,连接器中有连接文件,你看连接文件中关于数组常量的分配区域在哪些地址空间?如果连接器中被分配到64K之后,那么你就需要确定MCU本身是否容许把这个放置到64K之前的空间,如果容许,则你可以修改相关的连接器文件中的语句,然后重编译即可。为何aa只能访问64K内的地址空间?是哪里限制了它?
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
2013-12-03
展开全部
没有用外部,我用的是片子是67K22,片上的程序空间是64K,目前用了大概55%。我看了一下C18的用户指南,说变量只能访问16位的地址,也就是0xFFFF以内的。后来我把一部分代码去掉,程序变小点,编译后看map文件,那个常量数组的地址就位于0xCBE8,这个时候变量就可以访问常量数组了。我尝试使用near限定符,也不能把那个常量数组分配到0xFFFF以内。请问这是怎么回事。如何解决。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
2013-12-03
展开全部
因为我不希望数组里的数据被修改,所以就定义为常量了,要不然也不会这么纠结。只是变量只能访问16位的地址空间,但是程序计数器却是21位的,我们知道程序存储器的地址不是从0x0000开始的,这样就造成像我这样的情况发生,程序存储器的空间没有用完,但是所定义的常量数组却位于0xFFFF以外,造成变量没法访问了
本回答被网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
2013-12-03
展开全部
这个.....你用了外部的rom么....还是什么情况...我也不知道怎么回事...
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
2013-12-03
展开全部
有人遇到这种问题吗?
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询