OpenEdv-开源电子网

 找回密码
 立即注册

扫一扫,访问微社区

正点原子全套STM32开发资料,上千讲STM32视频教程,RT1052教程免费下载啦...
查看: 1307|回复: 3

在FreeRTOS中断实验中,在任务中关闭中断,即使没有开启中断,中断仍在执行。代码如下:

[复制链接]

  离线 

1

主题

2

帖子

0

精华

新手上路

积分
20
金钱
20
注册时间
2017-12-11
在线时间
1 小时
发表于 2017-12-11 14:19:31 | 显示全部楼层 |阅读模式
1金钱
//中断测试任务函数
void interrupt_task(void *pvParameters)
{
        static u32 total_num=0;
    while(1)
    {
                total_num+=1;
                if(total_num==5)
                {
                        printf("关闭中断.............\r\n");
                        portDISABLE_INTERRUPTS();                                //关闭中断
                        delay_xms(5000);                                                //延时5s
//                        printf("打开中断.............\r\n");        //打开中断
//                        portENABLE_INTERRUPTS();
                }
        LED0=~LED0;
        vTaskDelay(1000);
    }
}  //我把最后打开中断的函数屏蔽掉了,但中断仍在继续。此实验完整代码就是正点原子FreeRTOS中断实验的代码。

回复

使用道具 举报

  离线 

74

主题

6661

帖子

5

精华

资深版主

Rank: 8Rank: 8

积分
13339
金钱
13339
注册时间
2013-11-13
在线时间
1586 小时
发表于 2017-12-11 14:46:37 | 显示全部楼层
因为有其它的代码会打开中断!去vTaskDelay()函数里面去看看是不是有打开中断的代码
回复

使用道具 举报

  离线 

19

主题

272

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1437
金钱
1437
注册时间
2017-7-6
在线时间
204 小时
发表于 2017-12-12 08:54:34 | 显示全部楼层
portDISABLE_INTERRUPTS()是屏蔽中断优先级5及以下的中断,而不是屏蔽所有中断。中断优先级0-4依旧可以正常运行,你看看你还能进中断的优先级设置的多少
回复

使用道具 举报

  离线 

1

主题

2

帖子

0

精华

新手上路

积分
20
金钱
20
注册时间
2017-12-11
在线时间
1 小时
 楼主| 发表于 2017-12-12 15:01:42 | 显示全部楼层
zuozhongkai 发表于 2017-12-11 14:46
因为有其它的代码会打开中断!去vTaskDelay()函数里面去看看是不是有打开中断的代码

       我把vTaskDelay()给注释掉以后,确是中断关闭了,但我没找到在vTaskDelay()中哪开启了中断。
      如果我在任务中想把中断屏蔽,必须调用vportDISABLE_INTERRUPTS().但想要实现任务切换,就不得不调用vTaskDelay()(此时任务才能放弃CPU使用权,且该任务优先级最高)(中断会再次开启)。那怎么才能正确调用vportDISABLE_INTERRUPTS()实现中断屏蔽呢?
回复

使用道具 举报

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

本版积分规则




关闭

报名原子哥新品发布会&粉丝见面会上一条 /1 下一条

正点原子公众号

QQ|联系我们|手机版|官方淘宝店|微信公众平台|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2018-10-23 13:30

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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