ZHCUCF7 October 2024 TMS320C28341 , TMS320C28342 , TMS320C28343 , TMS320C28343-Q1 , TMS320C28344 , TMS320C28345 , TMS320C28346 , TMS320C28346-Q1
数据类型差异 - 表 2-2 中总结并突出显示了此上下文中的主要差异。
类型 | C28 | CLA | C29 | ARM |
---|---|---|---|---|
char | 16 | 16 | 8 | 8 |
short | 16 | |||
int | 16 | 32 | 32 | 32 |
long | 32 | |||
long long (COFF) | 64 | 32 |
不适用 |
64 |
long long (EABI) | 64 | |||
float | 32 | |||
double (COFF) | 32 | 32 |
不适用 |
64 |
double (EABI) | 64 | |||
long double (COFF) | 64 | 32 |
不适用 |
64 |
long double (EABI) | 64 | |||
指针 | 32 | 16 | 32 | 32 |
用户需要特别注意数据类型:
sizeof(char) | sizeof(short) | sizeof(int) | sizeof(long) | |
---|---|---|---|---|
C28 | 1 | 1 | 1 | 2 |
C29 | 1 | 2 | 4 | 4 |
memset(buf,5,2 * sizeof(char));
Byte address offset at buf: 0 8 16 24 32 40 48 56 64
C28: 5 5
C29: 5 5
memset(buf,5,2 * sizeof(short));
Byte address offset at buf: 0 8 16 24 32 40 48 56 64
C28: 5 5
C29: 5 5 5 5
memset(buf,5,2 * sizeof(int));
Byte address offset at buf: 0 8 16 24 32 40 48 56 64
C28: 5 5
C29: 5 5 5 5 5 5 5 5
其他函数(如 memcpy)也会出现行为差异,即使它们不是按字节操作也是如此。请考虑以下 memcpy 示例。memcpy(dst,src,4 * sizeof(char));
Byte address offset at dst: 0 8 16 24 32 40 48 56 64
C28: 1 2 3 4 5 6 7 8
C29: 1 2 3 4
注意 memcpy 的使用方法,为了在 C28 和 C29 上获得相同的行为,可以使用 CHAR_BIT(在 limits.h 中定义)。#if(CHAR_BIT == 16)
memcpy(dst,src,4 * sizeof(char));
#endif
#if(CHAR_BIT == 8)
memcpy(dst,src,4 * sizeof(char) * 2);
#endif
Byte address offset at dst: 0 8 16 24 32 40 48 56 64
C28: 1 2 3 4 5 6 7 8
C29: 1 2 3 4 5 6 7 8