打印

d1d2前辈 你给的例子有个小问题

[复制链接]
1727|4
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
biehoff|  楼主 | 2008-11-29 11:44 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
这样COMMONCALC.O的RO部分在链接时定位在SRAM中。
但是这部分代码还需要程序拷贝到SRAM才能执行。下面是main中的部分代码:

extern char Load$$SRAM$$Base[];
extern char Image$$SRAM$$Base[];
extern unsigned int Image$$SRAM$$Length;
extern char Image$$SRAM$$Limit[];


为什么是 声明一个数组呢
而不是直接
extern char Image$$SRAM$$Base;
我知道 Image$$SRAM$$Base其实是代表一个地址

我用过 extern unsigned int Image$$SRAM$$Base
然后
unsigned int a;
a=(unsigned int)Image$$SRAM$$Base;

我设置的Image$$SRAM$$Base的值是 0x0c008000;
最后得到的 a 不是 0x0c008000 而是 0x0c008000地址处的内容;
靠 ! 强制类型转换也没用啊  ADS编译器一定要把 Image$$SRAM$$Base当指针用 改都改不过来

当然 声明改成
extern unsigned int Image$$SRAM$$Base[]
unsigned int a;
a=(unsigned int)Image$$SRAM$$Base;
a就得到值 0x0c008000了

这个是编译器问题呢 还是我C学的不好呢···· 前辈帮看看

相关帖子

沙发
biehoff|  楼主 | 2008-11-29 12:14 | 只看该作者

RE

我验证过 取指针本身值 和 取指针内容的两种程序
unsigned int image[10]={0};  这个数组被固定在 0x0c008000 这点是确定的
unsigned int a;
unsigned int *p;
a=*p;                 a得到的值是0;
a=(unsigned int)p;    a得到的值是0x0c008000;

怎么用到 Image$$SRAM$$Base  符号就不行了呢?

使用特权

评论回复
板凳
biehoff|  楼主 | 2008-11-29 12:16 | 只看该作者

程序少COPY了一句

unsigned int image[10]={0};  这个数组被固定在 0x0c008000 这点是确定的
unsigned int a;
unsigned int *p;
p=(unsigned int *)image;
a=*p;                 a得到的值是0;
a=(unsigned int)p;    a得到的值是0x0c008000;

使用特权

评论回复
地板
dld2| | 2008-11-30 09:01 | 只看该作者

回bieh0ff同学


    unsigned int a;
    unsigned int b[10];
以上是两个全局变量。编译器设置它们的符号属性:
    符号名称a        长度4        段.bss
    符号名称b        长度40    段.bss
连接器根据以上内容,为符号a和b分配具体的值。
    对变量a来说,这个值是a的存储地址。
    对数组b来说,这个值是数组的起始地址。
在如下代码中:
    unsigned int c;
    c = (unsigned int)a;            //编译器把a当作整型变量,把符号a对应的地址下的内容给c。
    c = (unsigned int)b;            //编译器把b当作指针变量,把符号b的值给c。
可见:
    是编译器对不同类型的变量进行了不同处理。


猜想:
    Load$$SRAM$$Base是连接器产生的符号。对编译器来说是外部符号。
    程序中声明Load$$SRAM$$Base变量的方式,决定了编译器处理它的方式。

使用特权

评论回复
5
biehoff|  楼主 | 2008-11-30 18:57 | 只看该作者

谢谢


谢谢前辈讲解 看了看这个图我就明白  那个符号该怎么引用了
   unsigned int a;
   unsigned int b[10];
引用 a和b 的区别   一个会得到内容 一个会得到地址 
还是怪我C语言太烂了····

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

21

主题

138

帖子

0

粉丝