关于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中收到的地址就不对呢???
不太明白这两种定义的方式有什么区别,按理说后边的函数都强制将数值转换成指针了呀?? 好像这个代码不像FPGA的;
两个都是指针,没错;不过一个是指向16位无符号数据,一个是指向未知类型数据的(和编译器有关) 修正:是指向未知长度数据的
加上大小端编译工具,指向的位置可能不同 mcu5i51 发表于 2017-2-19 17:27
好像这个代码不像FPGA的;
两个都是指针,没错;不过一个是指向16位无符号数据,一个是指向未知类型数据的(和编 ...
这段代码是DSP的,通过EMIFA访问FPGA 你确定你学过C语言?
这个函数只是把pAddr所指向的内存中的数据读出来返回而已,而且根本不需要声明sTemp,直接return *pAddr;完事,不过这个函数有啥用?
((int16u*)0x60000000)中的0x60000000表示一个保存着int16u类型数据内存地址,他的地址是60000000 xuplastic 发表于 2017-2-19 23:04
((int16u*)0x60000000)中的0x60000000表示一个保存着int16u类型数据内存地址,他的地址是60000000 ...
不写int16u*的话,按照函数中的写法,应该也可以读到60000000地址的数据吧? 很好 PanDaerr 发表于 2017-2-19 23:13
不写int16u*的话,按照函数中的写法,应该也可以读到60000000地址的数据吧? ...
没有指定数据类型可以读到数据,你不是也说可以读到吗;
没有指定类型就是默认类型,在C中默认数据是int型,int数据长度没有明确的定义,在多数的32位机是32位数据;
如果指针为1000,这个地址的数据为(1000):12,34,56,(1003)78;你用这里的16位;就就有两种情况:
大端: 5678
小端: 3412
PanDaerr 发表于 2017-2-19 23:13
不写int16u*的话,按照函数中的写法,应该也可以读到60000000地址的数据吧? ...
((int16u*)0x60000000)+0x4031的计算结果和0x60000000+0x4031的计算结果是不一样的!
因为int16u类型数据占用两个字节,所以int16u*的指针在你写“+1”的时候实际是“+2”了!!!
mcu5i51 发表于 2017-2-20 10:22
没有指定数据类型可以读到数据,你不是也说可以读到吗;
没有指定类型就是默认类型,在C中默认数据是int型,i ...
谢谢你啦!10楼的答案更符合我想问的问题!不过你的也很棒! xuplastic 发表于 2017-2-20 12:38
((int16u*)0x60000000)+0x4031的计算结果和0x60000000+0x4031的计算结果是不一样的!
因为int16u类型数 ...
谢谢谢谢!!!应该就是这个原因!我明天去公司确认下! 同解,破题。我也是刚开始了解fpga Dsp 处理问题
页:
[1]