|
是这样的,我就创建了一个ADC采集任务,然后ADC任务是等待这个外部上升沿给一个信号量通知,但是我信号量,任务都创建成功了,我调试也能进入中断了,不知道为什么这个函数没有调用,请教一下大家
#define TOTAL_SAMPLES 256 //总共多少组数据
#define ADC_DATA_LENGTH 256 //一组数据采集多少个点
uint16_t data[TOTAL_SAMPLES][ADC_DATA_LENGTH];
void HAL_GPIO_EXTI_Callback(uint16_t GPIO_Pin) {
BaseType_t xHigherPriorityTaskWoken = pdFALSE;
if (GPIO_Pin == GPIO_PIN_11) {
printf("EXTI Callback triggered for GPIO_PIN_11\n");
if (semphore_handle != NULL) {
printf("Semaphore handle is valid. Releasing semaphore...\n");
xHigherPriorityTaskWoken = xSemaphoreGiveFromISR(semphore_handle, &xHigherPriorityTaskWoken);
if (xHigherPriorityTaskWoken != pdFALSE) {
printf("Higher priority task is ready. Requesting context switch...\n");
portYIELD_FROM_ISR(xHigherPriorityTaskWoken);
} else {
printf("No higher priority task is ready.\n");
}
}
}
}
void HAL_ADC_ConvCpltCallback(ADC_HandleTypeDef *hadc)
{
if (hadc->Instance == ADC3)
{
HAL_ADC_Stop_DMA(&hadc3);
current_sample_index++;
// g_adc3_dma_complete_flag = 1;
}
}
void ADCTask_Task( void * arg)
{
TickType_t previousWakeTime = xTaskGetTickCount();
while(1)
{
if (xSemaphoreTake(semphore_handle, portMAX_DELAY) == pdTRUE) {
printf("Semaphore taken, starting ADC DMA...\n");
HAL_ADC_Start_DMA(&hadc3, (uint32_t *)data[current_sample_index], ADC_DATA_LENGTH);}
// 每 1ms 自动启动下一次采集
vTaskDelayUntil(&previousWakeTime,pdMS_TO_TICKS(1));
}
}
xTaskCreate(ADCTask_Task,"ADCTask",1024,NULL,5,(TaskHandle_t *)&ADCTaskHandle);
vTaskStartScheduler();
|
|