ZHCACD3A march   2023  – april 2023 TMS320C28341 , TMS320C28342 , TMS320C28343 , TMS320C28343-Q1 , TMS320C28344 , TMS320C28345 , TMS320C28346 , TMS320C28346-Q1

 

  1.   1
  2.   摘要
  3.   商标
  4. 1引言
  5. 2字节与字术语
  6. 3需要考虑的要点
    1. 3.1 不支持 8 位数据类型
    2. 3.2 存储器大小用 16 位表示
    3. 3.3 数组和结构:各个元素偏移量是不同的
    4. 3.4 标准数据类型宽度的差异
    5. 3.5 处理 8 位通信协议
  7. 4参考文献
  8. 5修订历史记录

不支持 8 位数据类型

在基于 C28x CPU 的项目中,不支持 8 位数据类型。char 为 16 位宽,uint8_t 和 INT8_t 类型不是由 C28x 编译器定义的。C2000Ware 将这些数据重映射到 uint16_t 和 int16_t 数据类型。有关数据类型的更多信息,请参阅 TMS320C28x 优化 C/C++ 编译器 v22.6.0.LTS 用户指南

但是,C28x 编译器为字节访问提供了内在 __byte()。有关详细信息,请参阅 https://software-dl.ti.com/ccs/esd/documents/c2000_byte-accesses-with-the-c28x-cpu.html

  • 在将应用从 8 位可寻址架构(例如 Arm)移植到 C28x 时,由于这种差异,您可能会发现存储器要求有所增加。

    示例:

    struct
    {
       uint8_t a;
       uint8_t b;
       uint16_t c;
    } myStruct; 

    在 Arm 器件中,myStruct 的大小为 8 + 8 + 16 = 32 位。而在 C28x 中,大小为 16 + 16 + 16 = 48 位。

  • C28x 中的 int8 或 char 数据类型为 16 位宽,因此编译器在执行算术或移位运算时不会在 0xFF 处执行回绕。

    示例:

    uint8_t a = 0xFF;
    a += 1;
    if (a == 0)
    {
         //Condition is true for Arm and false for C28x
    }
  • 在将较大的数据类型转换为较小的数据类型或将较小的数据类型转换为较大的数据类型时,应注意正确类型转换、使用掩码并注意器件字节序。基于 C28x 的器件是小字节序器件。
    GUID-20230313-SS0I-GL1K-Q50Z-7ZGMCZZ8XF83-low.png
  • 需要重新讨论使用联合体的问题。
    GUID-20230206-SS0I-WR4Z-2NBK-QPSDPNWFMK5J-low.png