我正在尝试使用queue
将字符从UART ISR缓冲到后台任务。我希望队列长为512字节。不幸的是,这是不可能的,因为size参数的类型是unsigned portBASE_TYPE
,对于xmega256a3来说,它是单个字节(char
)。队列的最大大小是否因portBASE_TYPE
而浮动?而不是uint16_t?
我很好奇其他人是否遇到了相同的限制,以及他们对此做了什么(如果有的话)。
最佳答案
出于效率考虑,对大多数变量使用portBASE_TYPE
是很自然的。 AVR是8位体系结构,因此处理8位队列算术将比16位更有效。对于某些应用,此效率可能至关重要。
在32位体系结构上使用uint16_t
没有意义,您会注意到ARM内核的portBASE_TYPE
是32位值,因此选择uint16_t
作为默认的队列长度类型将是对这些内核的人为限制。
这里有一些选择:
portBASE_TYPE
重新编译FreeRTOS。我还没有尝试过,但是我不明白为什么除非FreeRTOS中有一些汇编代码(期望8位portBASE_TYPE
),否则无法正常工作。我快速浏览了一下,没有看到期望8位类型的汇编代码的任何明显迹象。 关于embedded - 令人沮丧的FreeRTOS xQueueCreate()限制,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/14449235/