关于NIOS II 数据类型的几点疑问
我定义的alt_u64 x=0xaaaaaaaaaaaaaaaa;//16个a,正好64位
但是编译一下后就出错。
但是我写成:
alt_u64 x=0xaaaaaaaa;//8个a,32位
编译就正确。
我现在怀疑一个问题,就是NIOS II 是32位的处理器,他怎么可能会有64位长的数据类型?
也就是alt_types.h文件里面的:
#ifndef ALT_ASM_SRC
typedef signed charalt_8;
typedef unsigned charalt_u8;
typedef signed short alt_16;
typedef unsigned short alt_u16;
typedef signed long alt_32;
typedef unsigned long alt_u32;
typedef long long alt_64;
typedef unsigned long long alt_u64;
#endif
它虽然提供了alt_u64数据类型,但是在目前32位的NIOS II的核上面是不能正常使用的,也就是说,他实际上也是只有32位宽度.
不知我的猜想是否正确? ?????????????????????????????????????? 回复【楼主位】number007cool
-----------------------------------------------------------------------
cpu 32位 指的寻址的位宽, 也就是 2 ^ 32 的 寻址空间, 一个地址空间 代表一个 bytes, 就是 8 bits 数据,
而软件中 的 long long int 等,是指的就是 一个数据 的 范围 和 内存储存储存 空间, 64 bits 要 8 bytes 的内存来储存,
所以32 位 cpu 和 数据的 为数无关。 回复 【2楼】 zzsoft
但是我在NIOS II 里面像下面定义变量时就提示出错
alt_u64 x=0xaaaaaaaaaaaaaaaa;//16个a,正好64位
也就是说,alt_64是不能够正确使用的。 报的是什么错? 你可以采用位移 试试:
alt_u64 x=0xaaaaaaaa;
x = (x << 32 ) | 0xaaaaaaaa;
看看可以吗。 报错信息如下
/hello_world.c:561: warning: integer constant is too large for "long" type 这是一个 warning, 很正常。
并不是一个 error.
你可以忽视它。
几乎说有的c,c++ 编译器 都会这样 提示。 编译的时候 加 -w 试试,可以去掉 warning 信息 但是我实际做过测试,它的有效位确实只有32位。 回复【9楼】number007cool
-----------------------------------------------------------------------
你怎么做的测试? 例如令
alt_u64=0xaaaaaaaa;
然后通过移位分离出他的高32位和低32位,然后分别用发光二极管显示出来 long long x=0xaaaaaaaaaaaaaaaa;
alt_u64 ? 什么 东东?
NIOS II的C编译器特有数据类型? 看提示.此数据类型只是long而已, long默认与CPU位宽一样. 也许是为了扩展 预留的吧 0xaaaaaaaaaaaaaaaaULL 0xaaaaaaaaaaaaaaaaULL
页:
[1]