免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12下一页
最近访问板块 发新帖
查看: 3887 | 回复: 10
打印 上一主题 下一主题

[算法] 如何修改数组的地址 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2008-09-23 18:11 |只看该作者 |倒序浏览
char a[];   /*  此代码存在在第1块内存 */
char a[];   /* 此代码存储在第2块内存 */

为了节省flash空间,我编译了2个文件,一模一样的文件名,定义了一模一样的变量(符号),
但是第1个文件很小,第2个文件很大(比如a在第1个文件是空的内容,但是在第2个文件是
很大的内容)。

在程序运行之后,由于只把第1个文件进行了链接,所以真正要访问的内容是第1个文件的,
但是其内容为空。现在要求做一个映射,访问第2个文件的变量(只是一个目标文件,但是和第1个文件的变量
不在1个地址)。

比如第1个文件的a的地址为addr_1;
第2个文件的a的地址为addr_2;
程序默认是访问地址addr_1,现在要求访问addr_2,但是是通过唯一的一个符号a来进行访问。


如何操作?是否有可能?

论坛徽章:
0
2 [报告]
发表于 2008-09-23 18:17 |只看该作者
不明白你在说什么。

论坛徽章:
0
3 [报告]
发表于 2008-09-23 18:22 |只看该作者
数组的地址是编译时确定的, 你不能够在运行时修改.

论坛徽章:
0
4 [报告]
发表于 2008-09-23 18:24 |只看该作者
>>>一模一样的变量(符号)
如何理解?

论坛徽章:
36
IT运维版块每日发帖之星
日期:2016-04-10 06:20:00IT运维版块每日发帖之星
日期:2016-04-16 06:20:0015-16赛季CBA联赛之广东
日期:2016-04-16 19:59:32IT运维版块每日发帖之星
日期:2016-04-18 06:20:00IT运维版块每日发帖之星
日期:2016-04-19 06:20:00每日论坛发贴之星
日期:2016-04-19 06:20:00IT运维版块每日发帖之星
日期:2016-04-25 06:20:00IT运维版块每日发帖之星
日期:2016-05-06 06:20:00IT运维版块每日发帖之星
日期:2016-05-08 06:20:00IT运维版块每日发帖之星
日期:2016-05-13 06:20:00IT运维版块每日发帖之星
日期:2016-05-28 06:20:00每日论坛发贴之星
日期:2016-05-28 06:20:00
5 [报告]
发表于 2008-09-23 19:21 |只看该作者
LZ把你的需求和做法描述清楚一下啊

论坛徽章:
0
6 [报告]
发表于 2008-09-23 19:52 |只看该作者
gnu工具链的话,可以尝试ld脚本

论坛徽章:
0
7 [报告]
发表于 2008-09-23 22:02 |只看该作者
比如可执行文件test.bin是由3个目标文件链接而成:
a.o, b.o, c.o
但是发现这样编译之后,test.bin很大,不能用1块flash进行存储,恰好系统有2块flash,所以使用下面的方法分开制作软件:
1.保留c.o里面的符号,但是内容都定义为空。
2.还是链接为test.bin,但是这个test.bin明显小于之前的test.bin,因为c.o很小了;
3.纯粹编译一个c.o,但是这个c.o是原来需要的c.o,很大;
4.将test.bin和c.o合并为一个文件test_merge.bin;
5.升级软件的时候将test_merge.bin分开升级,test.bin部分放到第1块flash,c.o放到第2块;
6.这样其实就有2个c.o的内容了,一个是test.bin里面的,在第1块flash,一个是第2块flash 的c.o;
7.c.o里面假设有一个符号a,它的地址是addr_1,那么在第2块flash里面的c.o也会有1个a,地址为addr_2;
8.程序在运行的时候,访问a的时候的是地址addr_1,但是内容为空;
9.现在如何做可以访问符号a的其实是addr_2了,而不是addr_1?

不知道明白了没有。

论坛徽章:
0
8 [报告]
发表于 2008-09-24 09:57 |只看该作者
估计找到办法了,在ld的时候,通过将符号重新定义即可:
即使用如下参数:

-defsym a=addr_2

论坛徽章:
0
9 [报告]
发表于 2008-09-24 11:54 |只看该作者
原帖由 arnina 于 2008-9-24 09:57 发表
估计找到办法了,在ld的时候,通过将符号重新定义即可:
即使用如下参数:

-defsym a=addr_2

又学到新知识了~~
通过动态连接库是不是可以阿?

论坛徽章:
0
10 [报告]
发表于 2008-09-24 12:03 |只看该作者
原帖由 haohao06 于 2008-9-23 19:54 发表

又学到新知识了~~
通过动态连接库是不是可以阿?


用动态库肯定是可以的。估计楼主就是想要静态链接。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP