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 5memset(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