This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

[参考译文] TMS320F280039C:对 CPU 到 CLA 存储器使用 int16_t/uint16_t 与 int32_t/uint32_t

Guru**** 2224910 points
请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1220847/tms320f280039c-using-int16_t-uint16_t-vs-int32_t-uint32_t-for-cpu-to-cla-memory

器件型号:TMS320F280039C

亲爱的香榭丽舍大街,

我是为我们的客户提出这个问题的。

他们希望对数据使用 CPU 到 CLA 存储器。

现在、我们测试后、发现 int16_t/uint16_t 和 int32_t/uint32_t 都起作用。

请注意、用户使用 driverlib、因此  int16_t/uint16_t 和 int32_t/uint32_t 的定义遵循我们的 driverlib。

在 main.c 中、

Fullscreen
1
2
3
4
5
6
7
8
#pragma DATA_SECTION(testStructData1,"CpuToCla1MsgRAM");
TestStructType testStructData1 =
{
.a = 1234567, .b = -2, .c = 0.1234
};
#pragma DATA_SECTION(int16Example,"CpuToCla1MsgRAM");
int16_t int16Example = 500;
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

在 share.h 中

Fullscreen
1
2
3
4
5
6
7
8
9
10
typedef struct
{
int32_t a; // Because int definition in C28x and CLA are different, int32_t/uint32_t (32-bit integer) is suggested.
int16_t b;
float c;
} TestStructType;
extern TestStructType testStructData1;
extern int16_t int16Example;
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

任务

Fullscreen
1
2
3
4
5
6
7
8
9
10
interrupt void Cla1Task1()
{
__mdebugstop();
volatile int16_t aaa;
volatile int16_t bbb;
aaa = int16Example;
bbb = testStructData1.b;
...
}
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

我们发现的唯一区别是、在 CCS 监视窗口中、int16_t 未正确显示、但我们仍然可以使用本地 aaa、bbb (如上所示)进行调试。

Question:

1.我们了解 CLA 本身是32位浮点。 如果用户 在 CLA 上使用 int16_t/uint16_t 或 int32_t/uint32_t、这是否重要? 例如、计算周期就有很大不同? 如果它们使用 int16_t/uint16_t、CLA 仍然使用32位数据字。 对吗?

2.  对于 C28与 CLA 之间的数据通信、我们是否需要建议用户使用 int32_t/uint32_t 而不是 int16_t/uint16_t 进行数据通信?

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    亲爱的香榭丽舍大街,

     您有任何更新吗?

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好!

    我能够重现此问题。 我观察到的是 uint16变量实际上在占用32位空间。 调试器对该变量的读取会在值实际写入的另一半位置进行读取。

    让我向编译器专家核实这一点

    此致、

    Veena

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    尊敬的 Veena:

    是的、这是我在我身边看到的。 如果您将其声明为 int16_t/uint16_t、则 CCS 监视窗口无法正确显示它 但是、如果你 在 CLA 任务中使用另外一个本地 int16_t/uint16_t 来读取这些变量、那么它们可以正确读取32位空间的较低16位、因此 结果似乎不错。

    用户仍希望 TI 确认从数据完整性/计算角度是否存在任何问题。 在它们的用例中、int16_t/uint16_t 足以满足它们的要求。 例如、他们可以使用此信息来传达 ADC 结果以及一些基于 ADC 结果的计算结果。

    这就是我们提出这些问题的原因。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    尊敬的 Veena:

    当使用 int16_t/uint16_t  与 int32_t/uint32_t ( 如果它们的结果都正确)时、用户对 CLA 计算时间(指令周期)特别感兴趣。

    因为它们将在 C28和 CLA 之间共享 ADC 结果、PWM 占空比、周期等的信息、这些都是基于16位的寄存器。

    他们想知道是否都应该将它们更改为32位整数类型、因为 CLA 是一个32位浮点处理器、或者他们可以像在 C28x 端一样将它们用在16位整数类型中。

    请帮助确认这些问题?

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    韦恩,只是为了确保我们都在同一个页面-我假设你已经看到了这些信息:

    https://software-dl.ti.com/C2000/docs/cla_software_dev_guide/faq.html#how-are-data-types-different-on-c28x-and-cla

    用户可以在 C28x 和 CLA 上使用 stdint.h 类型、这一点很好。  在 C28x 端也应定义共享变量。

    用户仍希望 TI 确认是否存在任何有关数据完整性/计算的问题。

    我提供的链接中有一些示例说明了差异可能导致的原因以及如何处理这些情况。

    他们想知道是否都要将它们更改为32位整数类型,因为 CLA 是一个32位浮点处理器,或者他们只能像在 C28x 端一样使用16位整数类型的处理器。

    如果 CLA 只是四处移动值、它们可以保持 uint16_t 格式。

    如果客户也使用数据进行了若干次计算、那么 CLA 将以浮点方式以快得多的速度执行这些计算。  从整数类型转换为浮点型是一条单指令。  

     

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    尊敬的 Lori:

    是的、我们知道您提供的链接。

    总之、您意味着如果用户仅使用 CLA 在 CPU  和 CLA 之间移动值、则 int16_t/uint16_t 和 int32_t/uint32_t 都很好。

    但是、如果他们要使用数据进行大量计算、那么最好将整数类型转换为浮点并使用浮点进行计算、以减少计算时间。

    对吗?

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    Wayne、是的、是的、正确。  

    我们认为 CLA 更适合浮点处理、它是专门用于数学计算的。 与执行基于整数的数学运算相比、转换为32位浮点然后执行计算要更快。

    此致

    Lori