完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
我按照以往编程方法:正常情况下,它说我的data超过了128 如果改成这个样子,那么编译不会提示有出错了。①那么我想问下以前我是用variables in data在程序中声明变量是这样声明的int a;那么现在我已经改成variables in xdata是不是程序中声明变量就要这样声明int xdata a;?②那么其它模块调用本模块变量是不是也要这样声明:extern int xdata a;?③改成variables in xdata会有什么变化呢?或者要注意些什么问题呢? |
|
相关推荐
6个回答
|
|
云汉达人
1、 是的。 2、 是的。 3、 xdATa: 外部扩展RAM,一般指外部0x0000-0xffff空间,用DPTR访问。 4、 extern int xdata a 5、 或是运行时产生的临时变量会在内部ram中的。也就是data占用的。 |
|
|
|
云汉达人
该错误提示说明data空间已经不够用,原因是你可能有好多函数,而函数内部的局部变量又没有定义其空间,这种情况下,系统会将变量分配到你在Otions for Target 对话框里的设置的空间。如果你在下图所示中的 Memory Model 里设置成 Small:variables in DATA,则DATA空间很快便用完,导致data空间不够用。 解决的办法有两种,一是通过更改Memory Model设置,可以设置成pdata或xdata,以便有足够大的空间,但这又带来新的问题,程序运行速度减慢,而且code代码也会加大,因为如果一个局部变量被存放在了xdata空间,汇编语言访问xdata空间的代码大小要比访问data空间的代码大,变量一旦很多,程序的代码也会逐渐增大;二是根据自己的要求设置变量的空间。 所以这涉及到代码优化的问题,遇到具体问题时,在运行速度和代码大小之间取得适合自己的情况。 |
|
|
|
④如果我不想改成variables in xdata,而是想继续用variables in data方法,那么程序是不是这样声明:int xdata a;然后有其它模块想调用a变量,是不是就要这样声明:extern int xdata a;还是这样声明:extern int a;?
|
|
|
|
⑤还有个问题:为什么我都改成variables in xdata了,但是编译结果还是说:program size:data=30.6这里面的30.6是怎么冒出来的。
|
|
|
|
|
|
|
|
只有小组成员才能发言,加入小组>>
710 浏览 0 评论
1120 浏览 1 评论
2497 浏览 5 评论
2836 浏览 9 评论
移植了freeRTOS到STMf103之后显示没有定义的原因?
2677 浏览 6 评论
使用eim外接fpga可是端口一点反应都没有有没有大哥指点一下啊
662浏览 9评论
673浏览 7评论
请教大神怎样去解决iMX6Q在linux3.0.35内核上做AP失败的问题呢
792浏览 6评论
638浏览 5评论
681浏览 5评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-11-27 18:56 , Processed in 1.091554 second(s), Total 88, Slave 69 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号