OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 13468|回复: 11

STM32,NVIC不能通过FreeRTOS开关中断函数屏蔽中断

[复制链接]

1

主题

1

帖子

0

精华

新手入门

积分
14
金钱
14
注册时间
2018-7-4
在线时间
1 小时
发表于 2018-7-4 11:39:48 | 显示全部楼层 |阅读模式
1金钱
最近用原子的教程学Freertos,最近进度到中断管理的时候卡住了。自己是使用STM32F103ZET6,跑FreeRTOS v10.0.1系统。设置和教程的几乎一样,建立开始任务和中断任务,建立两个定时器中断1S中断一次,同时RTT输出一串字符串,当中断任务执行5次之后,调用portDISABLE_INTERRUPTS()关闭中断,其中之一定时器会关闭。而我自己写的代码调用portDISABLE_INTERRUPTS(),两个定时器中断让然工作,请大家指导,困扰我太久了,教程也没有F103的源码工程。以下是程序截图,坐等原子哥解答。

捕获1.PNG
捕获2.PNG
捕获3.PNG
捕获4.PNG
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

88

主题

7377

帖子

5

精华

资深版主

Rank: 8Rank: 8

积分
14980
金钱
14980
注册时间
2013-11-13
在线时间
1823 小时
发表于 2018-7-4 11:50:04 | 显示全部楼层
谁说教程没有F103的源码工程?你下载F103开发板的资料,里面的FreeRTOS扩展例程
回复

使用道具 举报

10

主题

23

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
215
金钱
215
注册时间
2018-5-25
在线时间
34 小时
发表于 2018-7-5 09:12:50 | 显示全部楼层
因为你关中断后调用了vTaskDelay()延时, 关中断后不能调用 发生任务调度的函数
回复

使用道具 举报

4

主题

24

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
217
金钱
217
注册时间
2015-8-5
在线时间
43 小时
发表于 2020-6-7 01:08:59 | 显示全部楼层
啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊
回复

使用道具 举报

0

主题

12

帖子

0

精华

初级会员

Rank: 2

积分
143
金钱
143
注册时间
2018-8-29
在线时间
34 小时
发表于 2020-10-15 10:01:07 | 显示全部楼层
因为你的两个定时器抢占优先级为0,portDISABLE_INTERRUPTS()只会关闭优先级大于等于5的中断。
回复

使用道具 举报

5

主题

18

帖子

0

精华

初级会员

Rank: 2

积分
101
金钱
101
注册时间
2020-11-5
在线时间
20 小时
发表于 2021-1-29 11:24:32 | 显示全部楼层
本帖最后由 张要飞 于 2021-1-29 17:53 编辑

vTaskDelay()换成普通延时
回复

使用道具 举报

5

主题

18

帖子

0

精华

初级会员

Rank: 2

积分
101
金钱
101
注册时间
2020-11-5
在线时间
20 小时
发表于 2021-1-29 17:52:28 | 显示全部楼层
电子极客迷 发表于 2020-10-15 10:01
因为你的两个定时器抢占优先级为0,portDISABLE_INTERRUPTS()只会关闭优先级大于等于5的中断。

看错了吧?抢占优先级是4和5,子优先级是0.
回复

使用道具 举报

0

主题

1

帖子

0

精华

新手入门

积分
11
金钱
11
注册时间
2021-8-7
在线时间
1 小时
发表于 2021-10-13 13:07:04 | 显示全部楼层
请问您的这个问题解决了吗,我也遇到一样的问题,找不出来原因
回复

使用道具 举报

0

主题

1

帖子

0

精华

新手入门

积分
12
金钱
12
注册时间
2021-4-15
在线时间
3 小时
发表于 2022-12-25 14:42:58 | 显示全部楼层
第82行用 delay_xms();
回复

使用道具 举报

1

主题

2

帖子

0

精华

新手入门

积分
6
金钱
6
注册时间
2023-6-10
在线时间
1 小时
发表于 2023-6-11 17:15:26 | 显示全部楼层
张要飞 发表于 2021-1-29 11:24
vTaskDelay()换成普通延时

那要是普通延时也这样呢
回复

使用道具 举报

1

主题

5

帖子

0

精华

新手上路

积分
24
金钱
24
注册时间
2022-10-20
在线时间
6 小时
发表于 2023-6-20 16:06:48 | 显示全部楼层
将vTaskDelay()替换成delay_us级别(不要用delay_ms级别)的延时函数,delay_ms级别的也会引起切换
回复

使用道具 举报

0

主题

1

帖子

0

精华

新手入门

积分
5
金钱
5
注册时间
2022-6-5
在线时间
1 小时
发表于 2023-6-26 20:58:28 | 显示全部楼层
funcode 发表于 2023-6-20 16:06
将vTaskDelay()替换成delay_us级别(不要用delay_ms级别)的延时函数,delay_ms级别的也会引起切换

厉害,解决了,这个具体是什么原因啊?delay_ms里有什么特别的吗?
回复

使用道具 举报

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

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2024-11-22 17:02

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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