大家好!问题是这样的:我在 CubeMX 中创建了一个队列,并使其与我的结构大小相同sizeof( params )
。
#define ITEM_SIZE_QUEUE_1 sizeof( params )
以下是结构和列表。
typedef enum {
L1 = 1,
L2 = 2,
L3 = 3
} phaseId;
typedef struct {
float avg;
float maxImp;
float minImp;
float rms;
float eff;
phaseId id;
} params;
队列:
/* definition and creation of xQueueDMtoSD */
osMessageQStaticDef(xQueueDMtoSD, 640, ITEM_SIZE_QUEUE_1, xQueueDMtoSDBuffer, &xQueueDMtoSDControlBlock);
xQueueDMtoSDHandle = osMessageCreate(osMessageQ(xQueueDMtoSD), NULL);
osMessageQId xQueueDMtoSDHandle;
uint8_t xQueueDMtoSDBuffer[ 640 * sizeof( ITEM_SIZE_QUEUE_1 ) ];
我从任务中将数据发送到队列,并相应地发送结构。
void vFunDataManager(void const * argument)
{
/* USER CODE BEGIN vFunDataManager */
params queue1;
params queue2;
params queue3;
/* Infinite loop */
for (;;) {
if (xQueueReceive(xQueueADCHandle, ©1, portMAX_DELAY) == pdTRUE) {
//
/**
* Отправка очереди в задачу vSD
*/
if (uxQueueSpacesAvailable(xQueueDMtoSDHandle) > 0) {
if (xQueueSend(xQueueDMtoSDHandle, &queue2, portMAX_DELAY) != pdTRUE) {
dbF++;
osDelay(100);
}
} else {
osDelay(100);
}
}
} else {
dbF++;
}
osDelay(10);
}
/* USER CODE END vFunDataManager */
}
在另一个任务中,我从队列接收数据。
void vSD(void const * argument)
{
/* USER CODE BEGIN vSD */
params queue1;
/* Infinite loop */
for(;;)
{
if (xQueueReceive(xQueueDMtoSDHandle, &queue1, portMAX_DELAY) == pdPASS) {
if (osMutexWait(xMutexSPIHandle, osWaitForever) == osOK) {
writeArchive(&queue1);
}
osMutexRelease(xMutexSPIHandle);
}
osDelay(10);
}
/* USER CODE END vSD */
}
并且在 vSD 任务中队列中的数据已被损坏。由于某种原因,队列中存在不同的数据。不是那些被发送的。
数据发送
数据接收
中断设置
SYS 定时器