TI中文支持网
TI专业的中文技术问题搜集分享网站

F2812中基本数据类型的位宽?

在TI提供的库中,几种基本的数据类型的定义如下:

#ifndef DSP28_DATA_TYPES
#define DSP28_DATA_TYPES
typedef intint16;// = 2?
typedef longint32; // = 4?
typedef long longint64; // = 8?
typedef unsigned intUint16; // = 2?
typedef unsigned longUint32; // = 4?
typedef unsigned long long  Uint64; // = 8?
typedef floatfloat32;
typedef long doublefloat64;
#endif

但是,在实际的sizeof代码测试中,返回的值结果并不一样:

使用的代码是:

int sizeChar,sizeShort,sizeInt,sizeLong,sizeLongLong,sizeLongDouble,sizeFloat;

int main(void) {
	sizeChar = sizeof(char);
	sizeShort = sizeof(short);
	sizeInt = sizeof(int);
	sizeLong = sizeof(long);
	sizeLongLong = sizeof(long long);
	sizeFloat = sizeof(float);
	sizeLongDouble = sizeof(long double);

	return 0;
}

后续,继续测试,使用一个共同体,测试如下:

union u_temp{
	Uint32 _int32;
	unsigned char  _int8[4];
}temp;

int main(void) {
	temp._int32 = 0x12345678;
	return 0;
}

也就是说,假如char是正常的8位宽度的话,实际标注的Uint32的宽度实际上也仅仅是16位。只有使用到longlong才能提供32位宽度的数据类型。

Jason Wu4:

由于2812数据总线位16位,虽然char的数据长度为8位,但在2812中还是存放在16位的空间中,所以2812中定义的char实际为16位的大小,Uint32为32位,longlong为64位

在TI提供的库中,几种基本的数据类型的定义如下:

#ifndef DSP28_DATA_TYPES
#define DSP28_DATA_TYPES
typedef intint16;// = 2?
typedef longint32; // = 4?
typedef long longint64; // = 8?
typedef unsigned intUint16; // = 2?
typedef unsigned longUint32; // = 4?
typedef unsigned long long  Uint64; // = 8?
typedef floatfloat32;
typedef long doublefloat64;
#endif

但是,在实际的sizeof代码测试中,返回的值结果并不一样:

使用的代码是:

int sizeChar,sizeShort,sizeInt,sizeLong,sizeLongLong,sizeLongDouble,sizeFloat;

int main(void) {
	sizeChar = sizeof(char);
	sizeShort = sizeof(short);
	sizeInt = sizeof(int);
	sizeLong = sizeof(long);
	sizeLongLong = sizeof(long long);
	sizeFloat = sizeof(float);
	sizeLongDouble = sizeof(long double);

	return 0;
}

后续,继续测试,使用一个共同体,测试如下:

union u_temp{
	Uint32 _int32;
	unsigned char  _int8[4];
}temp;

int main(void) {
	temp._int32 = 0x12345678;
	return 0;
}

也就是说,假如char是正常的8位宽度的话,实际标注的Uint32的宽度实际上也仅仅是16位。只有使用到longlong才能提供32位宽度的数据类型。

HY Dee:

回复 Jason Wu4:

也就是说,因为数据总线是16位的关系,所以即使向一个char类型中存储0x01,实际存储进去的也是0x0001。因为这个原因,所以,我的共同体的实际样式为:

{

    int32 a;

    char b[2];

}

然后一个char类型的数据,实际上能够存下0xFFFF。

在TI提供的库中,几种基本的数据类型的定义如下:

#ifndef DSP28_DATA_TYPES
#define DSP28_DATA_TYPES
typedef intint16;// = 2?
typedef longint32; // = 4?
typedef long longint64; // = 8?
typedef unsigned intUint16; // = 2?
typedef unsigned longUint32; // = 4?
typedef unsigned long long  Uint64; // = 8?
typedef floatfloat32;
typedef long doublefloat64;
#endif

但是,在实际的sizeof代码测试中,返回的值结果并不一样:

使用的代码是:

int sizeChar,sizeShort,sizeInt,sizeLong,sizeLongLong,sizeLongDouble,sizeFloat;

int main(void) {
	sizeChar = sizeof(char);
	sizeShort = sizeof(short);
	sizeInt = sizeof(int);
	sizeLong = sizeof(long);
	sizeLongLong = sizeof(long long);
	sizeFloat = sizeof(float);
	sizeLongDouble = sizeof(long double);

	return 0;
}

后续,继续测试,使用一个共同体,测试如下:

union u_temp{
	Uint32 _int32;
	unsigned char  _int8[4];
}temp;

int main(void) {
	temp._int32 = 0x12345678;
	return 0;
}

也就是说,假如char是正常的8位宽度的话,实际标注的Uint32的宽度实际上也仅仅是16位。只有使用到longlong才能提供32位宽度的数据类型。

Jason Wu4:

回复 HY Dee:

没错,不过高八位可能为0,也可能为随机数

在TI提供的库中,几种基本的数据类型的定义如下:

#ifndef DSP28_DATA_TYPES
#define DSP28_DATA_TYPES
typedef intint16;// = 2?
typedef longint32; // = 4?
typedef long longint64; // = 8?
typedef unsigned intUint16; // = 2?
typedef unsigned longUint32; // = 4?
typedef unsigned long long  Uint64; // = 8?
typedef floatfloat32;
typedef long doublefloat64;
#endif

但是,在实际的sizeof代码测试中,返回的值结果并不一样:

使用的代码是:

int sizeChar,sizeShort,sizeInt,sizeLong,sizeLongLong,sizeLongDouble,sizeFloat;

int main(void) {
	sizeChar = sizeof(char);
	sizeShort = sizeof(short);
	sizeInt = sizeof(int);
	sizeLong = sizeof(long);
	sizeLongLong = sizeof(long long);
	sizeFloat = sizeof(float);
	sizeLongDouble = sizeof(long double);

	return 0;
}

后续,继续测试,使用一个共同体,测试如下:

union u_temp{
	Uint32 _int32;
	unsigned char  _int8[4];
}temp;

int main(void) {
	temp._int32 = 0x12345678;
	return 0;
}

也就是说,假如char是正常的8位宽度的话,实际标注的Uint32的宽度实际上也仅仅是16位。只有使用到longlong才能提供32位宽度的数据类型。

HY Dee:

回复 Jason Wu4:

刚刚尝试使用0xFFFF灌入一个char类型,得到的观测值还是0xFFFF。应该是没有清零。

那么,问题来了,我在实际编程中,需要如何注意此问题呢。

比如,sizeof得到的值就变得轻易不可用,对于header中没有定义的char的宽度和short的宽度,也就不敢轻易使用了。

赞(0)
未经允许不得转载:TI中文支持网 » F2812中基本数据类型的位宽?
分享到: 更多 (0)