当我使用以下命令创建 Freertos StreamBuffer 时,它似乎挂起:
StreamBufferHandle = xStreamBufferCreate(3,10);
IM 使用 stm32h743 mcu 和 CubeMX 在 KEIL uvision 编译器中生成的代码。
我编写了一个代码来简单地检查流缓冲区的创建
#include "cmsis_os.h"
#include "stream_buffer.h"
static StreamBufferHandle_t StreamBufferHandle = NULL;
uint8_t data_send[4];
int app_tocheck(void)
{
// STM32CubeMX initialization code here
// Create StreamBuffer
StreamBufferHandle = xStreamBufferCreate(3, 10);
if (StreamBufferHandle != NULL) {
// StreamBuffer creation successful
data_send[0] = 0x5C; // means succesfull
} else {
// StreamBuffer creation failed
data_send[0] = 0xCC; // means failed
// Handle the error or take appropriate action
}
// Code below osKernelStart() should not be executed as the scheduler has started
while (1) {
// Handle any non-RTOS tasks or activities here
}
}
所以 data_send[0] 保持 0x00,我在调试器中看不到它。如果我将 data_send[0] 放在
StreamBufferHandle = xStreamBufferCreate(3, 10);
之前 - data_send[0] 更改为指定值。
我的 Freertos 堆大小是默认值
#define configTOTAL_HEAP_SIZE ((size_t)15360)
我错过了什么?
我不确定您在问什么,因为您没有显示发送到流缓冲区的代码。发布的代码显示 data_send[0] 设置为两个常量之一,这两个常量都不为零 - 所以如果 data_send[0] 为零,我猜代码根本不会运行。
请注意,您的流缓冲区大小为 4,触发级别为 10,因此永远不会达到触发级别。