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.

[参考译文] SW-EK-TM4C123GXL:UART Rx API

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

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/596149/sw-ek-tm4c123gxl-uart-rx-api

器件型号:SW-EK-TM4C123GXL

您好!

在使用 TM4C 微控制器时、我注意到 UART Rx 函数"UARTCharGet"返回一个指向无符号整数的指针、如下所示:

int(*)(unsigned int)

问题:

如果 UART 返回的数据不能大于一个字节-指向无符号整数(32位)的动机是什么?

为什么不指向类型"int8_t"?  

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    Shai,
    一个可能的原因是这个硬件上的标准字大小为4字节。 在这种情况下、根据编译器设置、尝试使用较小的大小实际上可能会导致代码效率较低。 此外、该 API 还有一个 ROM_version、对于该版本、使用较小(也可能不对齐)的输出地址将更不推荐使用该版本。 没有增益尝试优化与硬件寄存器有着如此内在联系的函数。
    但事实上、返回的数据大于一个字节-实际上它有12位。 数据本身位于位7-0上、因此很简单
    char dataRecv = UARTCharGet (UART0_BASE)会将接收到的字节复制到 dataRecv 中。 但是、如果您深入研究位11、10、9和8、则会发现有关溢出、奇偶校验、中断和帧的其他信息。
    此致
    布鲁诺
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您对具有非8位输出非常正确、因此适合使用较大的尺寸。 实际上、我认为它应该是 int 或 int16_t typedef、类似于 UART_char。

    [引用 user="Bruno Saraiva"]此外,该 API 还具有 ROM_版本,对于该版本,使用较小(可能不对齐)的输出地址将更不推荐使用该版本。

    通常是一个问题、但不涉及任何 ARM 架构。

    [引用 user="Bruno Saraiva">没有增益尝试优化与硬件寄存器有着内在联系的函数。 [/报价]

    不正确、尽管公平地优化生成的代码不会改善。 然而、在错误检测和预防方面有很大的增益、并且作为一项令人惊讶的副作用设计改进。 优化人力资源和发展。 这可能会更加显著。

    这是因为、一旦输入的返回值与32位 int 不同、就会应用类型检查、滥用情况很快就会显现出来。 TI 在几乎所有类型的情况下都使用了 int32_t 和 int32_t 指针、因此失去了重大的质量改进机会。

    Robert