【问题标题】:Why does FreeRTOS use short and long type, but not int type?为什么 FreeRTOS 使用 short 和 long 类型,而不使用 int 类型?
【发布时间】:2015-08-30 15:29:12
【问题描述】:

使用 FreeRTOS 实时内核 - 标准版,p143,我注意到:

从不使用int类型——只有long和short

我想知道为什么,但是在它的官网找不到答案,google了也没有结果。

08/31 更新:

也许我的问题不是很清楚,简而言之,我只是想知道为什么 FreeRTOS 将 BaseType_t 定义为 long 而不是 int(并且其他 FreeRTOS 定义的类型也从不使用 int)。在其Coding-Standard-and-Style-Guide 页面上,它说:

BaseType_t

这被定义为架构中最有效、最自然的类型。例如,在 32 位架构上,BaseType_t 将被定义为 32 位类型。在 16 位架构上,BaseType_t 将被定义为 16 位类型。如果 BaseType_t 定义为 char,则必须特别注意确保函数返回值使用带符号的字符,该值可能为负值以指示错误。

从上面的描述,我认为intlong更合适,因为int总是符合架构的字长。

【问题讨论】:

    标签: c freertos


    【解决方案1】:

    FreeRTOS coding standard 不同意您的引用。

    实际要求是您使用已由 RTOS 定义的 typedef,或在 stdint.h 中找到的整数 typedef,例如 uint32_t。通常情况下,stdint.h 中的类型是可以接受的,因为这些整数的大小在不同的体系结构中没有变化。

    【讨论】:

    • 抱歉,我认为您提供的链接与我的参考文献之间没有分歧,请在上方说出我的更新
    • @Cifer:引用你的话:从上面的描述中,我认为 int 比 long 更合适,因为 int 总是符合架构的字长。 那不是真的.
    【解决方案2】:

    无论如何都不是官方答案,我想他们想确保明确定义他们的类型,因此决定使用 3 个 int 类型:char (uint8_t)、short (unit16_t ) 和long (uint32_t)。这样就可以避免混淆int 的大小。

    【讨论】:

    • 您提到的所有类型都必须具有相应的固定大小类型。
    • @black 根据FreeRTOS Coding Standard and Style Guide 这些是明确定义的固定大小类型。他们只需要为这 3 种类型想出 3 个名称,然后发现 int 太容易混淆而无法用于其中一种。
    猜你喜欢
    • 1970-01-01
    • 2020-04-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-02-05
    • 2016-12-16
    • 1970-01-01
    相关资源
    最近更新 更多