1

对于 DMA 连续请求,程序只会在 DMA1_Channel1_IRQHandler 中循环,并且 FreeRTOS 线程没有运行。

有谁知道如何解决这个问题?

{

  HAL_Init();


  /* Configure the system clock */
  SystemClock_Config();

  /* Initialize all configured peripherals */
  MX_GPIO_Init();
  MX_DMA_Init();
  MX_ADC1_Init();
  MX_I2C2_Init();
  MX_IWDG_Init();
  MX_USART1_UART_Init();
  MX_USART2_UART_Init();
  /* USER CODE BEGIN 2 */
  uprintf("Before dma\n");
  HAL_ADC_Start_DMA(&hadc1, adcBuffer, 2);
  uprintf("After dma\n");

  /* Call init function for freertos objects (in freertos.c) */
  MX_FREERTOS_Init();

  /* Start scheduler */
  osKernelStart();

  /* We should never get here as control is now taken by the scheduler */

  /* Infinite loop */
  /* USER CODE BEGIN WHILE */
  while (1)
  {
    /* USER CODE END WHILE */

    /* USER CODE BEGIN 3 */
  }
  /* USER CODE END 3 */
}
4

1 回答 1

2

听起来您的 DMA 通道具有比 FreeRTOS 任务(NVIC 优先级)更高的优先级(NVIC 优先级),并且正在使调度程序处于饥饿状态。对于故障排除,请尝试设置您的 DMA 通道以匹配 FreeRTOS 任务设置(NVIC 优先级),或将 FreeRTOS 提升到比 DMA 更高的优先级。

将 DMA 设置为连续请求可能不是您的应用程序所需的配置,或者它可能只是。

于 2019-08-18T16:34:34.430 回答