打印

Systick中断的优先级是不是比所有外设中断要高?

[复制链接]
11732|19
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
quyifei|  楼主 | 2013-6-9 10:11 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 quyifei 于 2013-6-9 12:39 编辑

一般默认的Systick的优先级都是设为最低,即0x0F。
Systick是属于CM3的中断,是不是即使已经设为最低,都会比外设(例如USART, 定时器)的中断优先级高?
沙发
jiayou0054| | 2013-6-10 00:50 | 只看该作者
比较巧,这几天,我也在看这样的问题。从资料看(PMxxx),Systick的中断优先级在SCB寄存器设置,UART,RTC,EXTI等在NVIC寄存器组设置。不过,它们应该都由GroupPriority和SubPriority决定。例如,Systick的Pre-emption为0,SubPriority为3,EXTI1_IRQn可以使Pre-emption为0,SubPriority为2,或Pre-emption为1,SubPritority为2等。

使用特权

评论回复
板凳
quyifei|  楼主 | 2013-6-10 10:34 | 只看该作者
本帖最后由 quyifei 于 2013-6-10 10:37 编辑
jiayou0054 发表于 2013-6-10 00:50
比较巧,这几天,我也在看这样的问题。从资料看(PMxxx),Systick的中断优先级在SCB寄存器设置,UART,RTC ...

我开始也是这么想的。


不过最近调试一个程序,当我把systick打开时,运行就出问题,把systick关掉,程序就一切正常。


程序中用到了其他的中断,我怀疑是不是systick干扰造成的。 可就是我把systick设为最低(0x0F),其他的中断设为最高,Pre-emption为0,SubPriority为0,还是有问题。


现在还是解释不通呀? 有没有官方的书面的解释呢?


使用特权

评论回复
地板
woshiaokeman| | 2013-6-19 10:06 | 只看该作者
在中断表里面看在一般的程序里面感觉systime中断的等级是最高的。
按你这样说会不会是在systime中断里面的程序跑飞了?

使用特权

评论回复
5
ticomi| | 2013-6-19 10:39 | 只看该作者
一般来说这个中断的优先级很低,毕竟是内核中断,通常用来运行嵌入式系统的时间基准的。不建议修改这个中断优先级,确实需要这个功能的话可以配置一个定时器来实现类似的功能。

使用特权

评论回复
6
ComeONic| | 2013-6-19 10:46 | 只看该作者
中断优先级只是保证能够响应更加实时的事件,无论你怎么调优先级,都不应该使你原来的程序出问题。。。
所以,可以肯定是你程序的问题。。
在systick方面找找原因。。。

使用特权

评论回复
7
miaomiaode| | 2013-10-21 16:19 | 只看该作者
我也遇到这样的情况,中断中调用systick,就是死

使用特权

评论回复
8
hkcj| | 2013-10-21 18:56 | 只看该作者
中断优先级这一块   楼主的设置需要尽量合理一点   这样  后面   我觉得应该对与程序的相应   应该比较合适

使用特权

评论回复
9
diweo| | 2013-10-21 20:55 | 只看该作者
Cortex-M3在内核水平上搭载了一个异常响应系统,支持为数众多的系统异常和外部中断。其中,编号为1-15的对应系统异常,大于等于16的则全是外部中断。除了个别异常的优先级被定死外,其它异常的优先级都是可编程的。
Systick中断的优先级也是可编程设定的。

使用特权

评论回复
10
mingjiezhong| | 2013-10-21 22:58 | 只看该作者
开着也不会有问题,处理好中断就行了

使用特权

评论回复
11
outstanding| | 2013-10-22 11:10 | 只看该作者
睡眠模式(Cortex™-M3内核停止,所有外设包括Cortex-M3核心的外设,如NVIC、系统时钟(SysTick)等仍在运行) 。说明嘀嗒定时器要关,不关一直在运行

使用特权

评论回复
12
qq1067390546| | 2016-5-19 19:33 | 只看该作者
quyifei 发表于 2013-6-10 10:34
我开始也是这么想的。

不过最近调试一个程序,当我把systick打开时,运行就出问题,把systick关掉,程序就 ...

你好,我也遇到 了和你一样的问题,当我把systick打开时,运行就出问题,把systick关掉,程序就正常,请问你的问题解决了吗?是如何解决的,求分享一下,非常谢谢。

使用特权

评论回复
13
huangcunxiake| | 2016-5-20 09:58 | 只看该作者
这点要看看权威指南那本书,讲的很好。

使用特权

评论回复
14
香水城| | 2016-5-20 17:45 | 只看该作者
qq1067390546 发表于 2016-5-19 19:33
你好,我也遇到 了和你一样的问题,当我把systick打开时,运行就出问题,把systick关掉,程序就正常,请 ...

应该是发生了中断响应的冲突了,SYSTICK和其它外设中断优先级都可调整。
这个跟你代码需求有关,你说目前有问题,是什么问题?死等?还是其它响应
有问题?  你结合问题症状来优先级和相关代码的调整。

使用特权

评论回复
15
Rooney30| | 2016-5-20 20:35 | 只看该作者
用ucos ii的时候也是这样说的,systick的优先级是最低的

使用特权

评论回复
16
qq1067390546| | 2016-5-23 19:09 | 只看该作者
剡溪渡口 发表于 2016-5-23 09:05
你好,这个问题我也遇到过了,我习惯用Systick中断控制LED闪烁,用来显示程序运行,
在ADC、USART、EXTI ...

我已解决了,不是优先级的问题,还是我的程序写的有问题,后来改写了程序就好了。我qq1067390546,欢迎交流,非诚勿扰。

使用特权

评论回复
17
野火_firege| | 2016-8-15 12:08 | 只看该作者
1、只要内核的优先级可以配置,那么内核的优先级就不是一定比外设的高,而是要先比较软件优先级,如果软件优先级一样,那么就比较他们的硬件的中断编号,编号就是在中断向量表中的位置,越小,优先级越高。

2、以systick为例,在systick的固件库初始化函数:SysTick_Config(uint32_t ticks) 中,调用了NVIC_SetPriority (SysTick_IRQn, (1<<__NVIC_PRIO_BITS) - 1); ,这里面把 systick的 优先级配置为 :1<<4-1 = 15,这里面的4是因为STM32 使用4个位来配置中断优先级。

3、那么问题来了,这里systick的中断优先级配置成15,应该是最低的,那跟外设来比,那是systick的优先级比外设是高还是低?  这个得看 外设 配置 中断优先级时的优先级分组。

4、如果分组为 2,那抢占优先级和子优先级各有2个位表示优先级,抢占的取值范围为0~3,子优先级的取值范围为:0~3。那这时systick的优先级15,该怎么对比,只需要把15转换成二进制:1111,这四位同样受优先级分组的控制,即前两位表示抢占优先级,那就是3,后两位表示子优先级,也是3。在分组2里面都是最低的。如果你的外设也配置成组2,主和子优先级配置的不是3,那就肯定比systick的优先级高。

5、内核的优先级并非一定比外设的优先级高,只要你的优先级可以配置。

使用特权

评论回复
18
xhuaihe| | 2017-7-21 11:31 | 只看该作者
野火_firege 发表于 2016-8-15 12:08
1、只要内核的优先级可以配置,那么内核的优先级就不是一定比外设的高,而是要先比较软件优先级,如果软件 ...

厉害了,明白了

使用特权

评论回复
19
sfd123| | 2017-7-21 12:00 | 只看该作者
这个是内核的,应该比较低吧!

使用特权

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

本版积分规则

个人签名:最小STM32开发板-攸米板淘宝: yifei-stm.taobao.com 博客: blog.sina.com.cn/yifeistm

29

主题

146

帖子

1

粉丝