我是 Freertos 的新手。我有一个关于两个线程的练习项目。一个线程用于AD7606的数据采集,另一个线程用于
labview中uart的数据传输。不幸的是,当我在 LabVIEW 中显示从线程 2 获取的数据时,我发现它会丢失数据或采样率不一致。我该如何解决这个问题?
到目前为止,我不知道解决方案是否是 freertos 中的定时器中断。
请给我提示或一些我可以参考的教程。有需要请指教。
非常感谢你。
- void StartDefaultTask(void const * argument)
- {
- /* USER CODE BEGIN 5 */
- /* Infinite loop */
- for(;;)
- {
- xSemaphoreTake(DeliverHandle,portMAX_DELAY);
- // START read AD7607
- Read_AI();
- float value = (float)aio_data.c2_values_in[0];
- // END read AD7607
- // Send data in MyQueue
- xQueueSendToBack(MyQueue, (void*)&value, (tickType_t)1);
- xSemaphoreGive(DeliverHandle);
- osDelay(20);
- }
- }
- /* USER CODE END 5 */
- /* USER CODE BEGIN Header_StartTask02 */
- /**
- * @brief Function implementing the myTask02 thread.
- * @param argument: Not used
- * @retval None
- */
- /* USER CODE END Header_StartTask02 */
- void StartTask02(void const * argument)
- {
- /* USER CODE BEGIN StartTask02 */
- /* Infinite loop */
- int messagesWaiting,j;
- float value_f;
- uint32_t value_u32;
- for(;;)
- {
- //START test queue number
- messagesWaiting = uxQueueMessagesWaiting(MyQueue);
- xSemaphoreTake(DeliverHandle, portMAX_DELAY);
- if ( messagesWaiting >= 8 ) {
- for(j = 0; j < messagesWaiting; j++){
- xQueueReceive(MyQueue, &value_f, (TickType_t)1);
- value_u32 = Convert_float_To_U32(value_f);
- Covert_U32_To_4U8(value_u32, Tx_data+4*j);
- }
- HAL_UART_Transmit(&huart2, Tx_data, 32, 1000);
- }
- osDelay(20);
- xSemaphoreGive(DeliverHandle);
- }
- /* USER CODE END StartTask02 */
- }