打印
[其他ST产品]

FreeRTOS中portDISABLE_INTERRUPTS()函数无法guanb

[复制链接]
356|1
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
duo点|  楼主 | 2022-7-6 11:00 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
参考原子哥《STM32F429 FreeRTOS开发手册》教程,第四章FreeRTOS中断配置和临界段实验,我利用cubemx+f407创建工程,创建start_task和isr_task任务,在isr_task任务中portDISABLE_INTERRUPTS()函数无法关闭TIM中断(TIM3 中断优先级设置为4,TIM5中断优先级设置为6),求大神赐教。代码如下:
1、main函数初始化TIM和FreeRTOS
[mw_shl_code=applescript,true] MX_TIM3_Init();
MX_TIM5_Init();

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

/* Start scheduler */
osKernelStart();[/mw_shl_code]
2、任务函数
[mw_shl_code=applescript,true]/* start_task function */
void start_task(void const * argument)
{
/* USER CODE BEGIN start_task */
/* Infinite loop */
printf("start task\r\n");
taskENTER_CRITICAL(); //??è?áù????
printf("start task ??è?áù????\r\n");
osThreadDef(IsrIask, isr_task, osPriorityHigh, 0, 128);
IsrIaskHandle = osThreadCreate(osThread(IsrIask), NULL);
vTaskDelete(S
1



atartTaskHandle); //é?3y?aê?è???
printf("start task í?3?áù????\r\n");
taskEXIT_CRITICAL(); //í?3?áù????
/* USER CODE END start_task */
}

/* isr_task function */
void isr_task(void const * argument)
{
/* USER CODE BEGIN isr_task */
/* Infinite loop */
static uint32_t total_num = 0;
for(;;)
{
total_num+=1;
printf("total_num = %d\r\n",total_num);
if(total_num==5)
{
printf("1?±??D??.............\r\n");
portDISABLE_INTERRUPTS();        //1?±??D??
osDelay(5000);        //?óê±5s
printf("′ò?a?D??.............\r\n");        //′ò?a?D??
portENABLE_INTERRUPTS();
}
LEDx_StateSet(LED2,LED_TOGGLE);
osDelay(100);
}
/* USER CODE END isr_task */
}[/mw_shl_code]
3、定时器中断服务函数
[mw_shl_code=applescript,true]void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim)
{
if(htim==(&htim3))
{
printf("TIM3ê?3?.......\r\n");
}
else if(htim==(&htim5))
{
printf("TIM5ê?3?.......\r\n");
}
}[/mw_shl_code]


使用特权

评论回复
沙发
huahuagg| | 2022-7-6 22:07 | 只看该作者
对这个RTOS无研究,期待大神来分析一下咋回事

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

384

主题

1457

帖子

1

粉丝