PanDaerr 发表于 2017-2-19 15:09

关于FPGA寄存器读写问题!

最近遇到一个问题
对于下面这段代码

#define addr_fpga_version                        (addr_base + (0x4031))

int16u Read16uData(int16u *pAddr)
{
        int16u sTemp = *pAddr;
        return sTemp;
}
pgaVersion = Read16uData((int16u *)addr_fpga_version);


为什么当
#define addr_base                                ((int16u*)0x60000000)
时,FPGA中收到的地址是正确的
而当
#define addr_base                                (0x60000000)
时,FPGA中收到的地址就不对呢???
不太明白这两种定义的方式有什么区别,按理说后边的函数都强制将数值转换成指针了呀??

mcu5i51 发表于 2017-2-19 17:27

好像这个代码不像FPGA的;
两个都是指针,没错;不过一个是指向16位无符号数据,一个是指向未知类型数据的(和编译器有关)

mcu5i51 发表于 2017-2-19 17:31

修正:是指向未知长度数据的
加上大小端编译工具,指向的位置可能不同

PanDaerr 发表于 2017-2-19 22:01

mcu5i51 发表于 2017-2-19 17:27
好像这个代码不像FPGA的;
两个都是指针,没错;不过一个是指向16位无符号数据,一个是指向未知类型数据的(和编 ...

这段代码是DSP的,通过EMIFA访问FPGA

xuplastic 发表于 2017-2-19 23:02

你确定你学过C语言?

这个函数只是把pAddr所指向的内存中的数据读出来返回而已,而且根本不需要声明sTemp,直接return *pAddr;完事,不过这个函数有啥用?

xuplastic 发表于 2017-2-19 23:04

((int16u*)0x60000000)中的0x60000000表示一个保存着int16u类型数据内存地址,他的地址是60000000

PanDaerr 发表于 2017-2-19 23:13

xuplastic 发表于 2017-2-19 23:04
((int16u*)0x60000000)中的0x60000000表示一个保存着int16u类型数据内存地址,他的地址是60000000 ...

不写int16u*的话,按照函数中的写法,应该也可以读到60000000地址的数据吧?

shuifengjackcoo 发表于 2017-2-20 08:31

很好

mcu5i51 发表于 2017-2-20 10:22

PanDaerr 发表于 2017-2-19 23:13
不写int16u*的话,按照函数中的写法,应该也可以读到60000000地址的数据吧? ...

没有指定数据类型可以读到数据,你不是也说可以读到吗;
没有指定类型就是默认类型,在C中默认数据是int型,int数据长度没有明确的定义,在多数的32位机是32位数据;
如果指针为1000,这个地址的数据为(1000):12,34,56,(1003)78;你用这里的16位;就就有两种情况:
大端: 5678
小端: 3412

xuplastic 发表于 2017-2-20 12:38

PanDaerr 发表于 2017-2-19 23:13
不写int16u*的话,按照函数中的写法,应该也可以读到60000000地址的数据吧? ...

((int16u*)0x60000000)+0x4031的计算结果和0x60000000+0x4031的计算结果是不一样的!

因为int16u类型数据占用两个字节,所以int16u*的指针在你写“+1”的时候实际是“+2”了!!!

PanDaerr 发表于 2017-2-20 22:51

mcu5i51 发表于 2017-2-20 10:22
没有指定数据类型可以读到数据,你不是也说可以读到吗;
没有指定类型就是默认类型,在C中默认数据是int型,i ...

谢谢你啦!10楼的答案更符合我想问的问题!不过你的也很棒!

PanDaerr 发表于 2017-2-20 22:52

xuplastic 发表于 2017-2-20 12:38
((int16u*)0x60000000)+0x4031的计算结果和0x60000000+0x4031的计算结果是不一样的!

因为int16u类型数 ...

谢谢谢谢!!!应该就是这个原因!我明天去公司确认下!

特拉苏 发表于 2017-2-23 01:24

同解,破题。我也是刚开始了解fpga   Dsp 处理问题
页: [1]
查看完整版本: 关于FPGA寄存器读写问题!