硬汉嵌入式论坛

 找回密码
 立即注册
查看: 392|回复: 5
收起左侧

[RTOS] rtos中断里面信号量发送问题

[复制链接]

20

主题

102

回帖

162

积分

初级会员

积分
162
QQ
发表于 2025-4-9 13:28:43 | 显示全部楼层 |阅读模式
是这样的,我就创建了一个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();



回复

使用道具 举报

20

主题

102

回帖

162

积分

初级会员

积分
162
QQ
 楼主| 发表于 2025-4-9 14:46:11 | 显示全部楼层
哦,我查看了一下,发现ADC的数组根本没有被填充
回复

使用道具 举报

12

主题

53

回帖

89

积分

初级会员

积分
89
发表于 2025-4-9 15:50:40 | 显示全部楼层
信号量没初始化吧?
回复

使用道具 举报

20

主题

102

回帖

162

积分

初级会员

积分
162
QQ
 楼主| 发表于 2025-4-9 15:53:48 | 显示全部楼层
capw 发表于 2025-4-9 15:50
信号量没初始化吧?

初始化了
回复

使用道具 举报

20

主题

102

回帖

162

积分

初级会员

积分
162
QQ
 楼主| 发表于 2025-4-9 15:55:29 | 显示全部楼层
capw 发表于 2025-4-9 15:50
信号量没初始化吧?

而且他都打印RUNNING了,说明能接收到信号量和任务通知啊,我两个都测试了,任务通知也通知了,信号量也是,但是ADC没有采集,我不用rtos的时候测试了ADC是可以采集的
回复

使用道具 举报

1万

主题

7万

回帖

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
117530
QQ
发表于 2025-4-9 17:53:56 | 显示全部楼层
将ADC DMA相关代码都注释掉,单纯测试中断发送信号量,任务接收是否正常。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|小黑屋|Archiver|手机版|硬汉嵌入式论坛

GMT+8, 2025-8-13 01:57 , Processed in 0.042057 second(s), 24 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

快速回复 返回顶部 返回列表