【发布时间】:2019-07-23 13:50:09
【问题描述】:
我在 STM32F407 MCU 上使用 ST Link 调试器。我遇到了与数据未在不同的循环缓冲区之间以正确方式加载有关的问题,用于从 USART 中提取字节。我想看看从serial [4000] 数组中提取帧的线程在增加延迟的情况下表现如何。
下面的代码在调试器中运行良好,我可以进入每一行,检查变量的值。
//This callback is automatically called by the HAL when the DMA transfer is completed
void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart) {
// read 50 bytes of raw data to the raw_serial buffer
HAL_UART_Receive_DMA (huart, raw_serial, 50);
//osDelay(10);
//HAL_Delay(10);
// add raw_serial to the serial[4000]
AppendSerial(raw_serial,size);
}
使用这些延迟中的任何一个:
osDelay(10);HAL_Delay(10);
导致程序执行陷入倒计时循环之一,并阻止我到达位于等待语句之后的断点。
阅读此post 在我看来,osDelay 在使用 FreeRTOS 时更合适。
我能想到的唯一原因是 ST Link 缺乏兼容性或驱动程序,或者无法在中断触发的回调函数中包含延迟。
感谢您的帮助。
【问题讨论】:
标签: c debugging delay stm32 freertos