野火电子论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 196689|回复: 435

systick的优先级到底比外设的优先级高还是低,目前只有2人答对。高手在哪里

  [复制链接]
发表于 2016-8-15 13:54:39 | 显示全部楼层 |阅读模式
提示:systick是内核的外设,其他外设比如串口,adc等是内核之外的外设。
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、内核的优先级并非一定比外设的优先级高,只要你的优先级可以配置。
回复

使用道具 举报

发表于 2016-8-15 13:57:25 | 显示全部楼层
我不知道我不知道
回复 支持 反对

使用道具 举报

发表于 2016-8-15 13:58:08 | 显示全部楼层
第一个????
回复

使用道具 举报

 楼主| 发表于 2016-8-15 13:59:03 | 显示全部楼层
刀口 发表于 2016-8-15 13:57
我不知道我不知道

刀神怎么会不知道,别装逼。
回复 支持 反对

使用道具 举报

发表于 2016-8-15 13:59:10 | 显示全部楼层
又来偷偷着学习。。。。
回复 支持 反对

使用道具 举报

发表于 2016-8-15 14:02:02 | 显示全部楼层
我猜是比外设的优先级高,看答案
回复 支持 反对

使用道具 举报

发表于 2016-8-15 14:02:11 | 显示全部楼层
我觉得应该是高吧
回复 支持 反对

使用道具 举报

发表于 2016-8-15 14:02:13 | 显示全部楼层
SYStick优先级比外设低,当用作设置延时是要提高优先级。应该没错吧?
回复 支持 反对

使用道具 举报

发表于 2016-8-15 14:02:57 | 显示全部楼层
不知道
来学习下
回复 支持 反对

使用道具 举报

发表于 2016-8-15 14:03:48 | 显示全部楼层
谢火锅普及
回复 支持 反对

使用道具 举报

发表于 2016-8-15 14:09:42 | 显示全部楼层
低                                 
回复 支持 反对

使用道具 举报

发表于 2016-8-15 14:11:53 | 显示全部楼层
看一下看一下
回复 支持 反对

使用道具 举报

发表于 2016-8-15 14:11:56 | 显示全部楼层
           不清楚啊啊啊啊
回复 支持 反对

使用道具 举报

发表于 2016-8-15 14:12:17 | 显示全部楼层
低,好像是倒数的
回复 支持 反对

使用道具 举报

发表于 2016-8-15 14:12:40 | 显示全部楼层
不知道,来学习
回复 支持 反对

使用道具 举报

发表于 2016-8-15 14:15:47 | 显示全部楼层
低.............
回复

使用道具 举报

发表于 2016-8-15 14:18:03 | 显示全部楼层
kankan                           
回复 支持 反对

使用道具 举报

发表于 2016-8-15 14:23:47 | 显示全部楼层
听说SysTick 就像是心跳,心跳的优先级应该高些的。。。走,看答案去。。
回复 支持 反对

使用道具 举报

发表于 2016-8-15 14:25:11 | 显示全部楼层
优先级高啊,不会错的
回复 支持 反对

使用道具 举报

发表于 2016-8-15 14:26:40 | 显示全部楼层
我猜高吧= = = =
回复 支持 反对

使用道具 举报

发表于 2016-8-15 14:33:45 | 显示全部楼层
我猜,应该最高.
回复 支持 反对

使用道具 举报

 楼主| 发表于 2016-8-15 14:35:47 | 显示全部楼层
暴躁的小黄瓜 发表于 2016-8-15 14:25
优先级高啊,不会错的

你就是我说的 80 % 的那部分 人
回复 支持 反对

使用道具 举报

发表于 2016-8-15 14:36:28 | 显示全部楼层
滴答高啊
水一贴
回复 支持 反对

使用道具 举报

发表于 2016-8-15 14:36:54 | 显示全部楼层
这个得搞明白~~~~~~~~~~~~我的答案是我不知道
回复 支持 反对

使用道具 举报

发表于 2016-8-15 14:37:50 | 显示全部楼层
还真不知道
回复 支持 反对

使用道具 举报

发表于 2016-8-15 14:38:07 | 显示全部楼层
呵呵呵合伙
回复 支持 反对

使用道具 举报

发表于 2016-8-15 14:54:29 | 显示全部楼层
应该是高吧
回复 支持 反对

使用道具 举报

发表于 2016-8-15 14:56:47 | 显示全部楼层
啊,低啊,那用SysTick中断做定时器岂不是很不准,难道要用Timer?
回复 支持 反对

使用道具 举报

发表于 2016-8-15 15:04:13 | 显示全部楼层
额~为了装逼特地看了下资料。Systick在Cortex-M3权威指南里面表明是属于系统异常,优先级为15,看上去明显比外设的优先级高啊。但又写着可编程!不多说先上图。从这段文字来看的话,我觉得Systick的优先级不一定比外设的优先级高,这个具体得看怎么配置,额,除了那三个固定的不能配置以外。
6AT7_M~Q([8N7C3Y86IQ6J6.png
有资料在手,估计查了资料后我变成了20%的人了
回复 支持 1 反对 0

使用道具 举报

 楼主| 发表于 2016-8-15 15:09:39 | 显示全部楼层
minDragon 发表于 2016-8-15 15:04
额~为了装逼特地看了下资料。Systick在Cortex-M3权威指南里面表明是属于系统异常,优先级为15,看上去明显 ...

1、这里面说的是正确,但是还是没有告诉我们,他的中断优先级要怎么编程。
2、如果我一个外设中断的优先级分组为 2 ,抢占为0 ,子为1,你要配置 systick的优先级比我高或者低,你要怎么配置。

3、systick 配置优先级使用的是 scb 这个外设, 片上外设配置中断是使用 nvic的
回复 支持 反对

使用道具 举报

发表于 2016-8-15 15:19:00 | 显示全部楼层
默认是systic低,可以设置的比外部中断高。
火哥红外解码实验里,好像讲过这个。具体没细看。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2016-8-15 15:22:20 | 显示全部楼层
锄禾 发表于 2016-8-15 15:19
默认是systic低,可以设置的比外部中断高。
火哥红外解码实验里,好像讲过这个。具体没细看。

对,总算有一个回答对的了。我两年前有在视频里面讲过。
回复 支持 反对

使用道具 举报

发表于 2016-8-15 15:26:58 | 显示全部楼层
低,输了剁手!!
回复 支持 反对

使用道具 举报

发表于 2016-8-15 15:28:23 | 显示全部楼层
折问题对我来说有点难,我水平差
回复 支持 反对

使用道具 举报

发表于 2016-8-15 15:31:07 来自手机 | 显示全部楼层
看看答案,这个想不到
回复 支持 反对

使用道具 举报

发表于 2016-8-15 15:47:21 | 显示全部楼层
我是来看答案的                                   
回复 支持 反对

使用道具 举报

发表于 2016-8-15 16:58:48 | 显示全部楼层
fire 发表于 2016-8-15 13:59
我猜你也不知道,我看到两个论坛的版主都回答错了,所以很有必要发个帖子来普及下。

我只记得不是最高,不是最低,而是中低水平.
具体就不知道
回复 支持 反对

使用道具 举报

 楼主| 发表于 2016-8-15 17:06:03 | 显示全部楼层
刀口 发表于 2016-8-15 16:58
我只记得不是最高,不是最低,而是中低水平.
具体就不知道

默认的固件库里面的配置是15,即1111(0b),无论你NVIC的中断优先级怎么分组,1111 都是 最低的,如果在一个有中断的应用程序中想用systick做延时,必须把systick的中断优先级改高才行。
回复 支持 反对

使用道具 举报

发表于 2016-8-15 17:24:01 | 显示全部楼层
回复

使用道具 举报

发表于 2016-8-15 17:39:32 | 显示全部楼层
fire 发表于 2016-8-15 15:09
1、这里面说的是正确,但是还是没有告诉我们,他的中断优先级要怎么编程。
2、如果我一个外设中断的优先 ...

刚忙完工作,为了把这个逼装完,立马写代码测试了一下。
1.我从火哥的代码中找到配置Systick中断优先级的函数:NVIC_SetPriority (SysTick_IRQn, (1<<__NVIC_PRIO_BITS) - 1);  实体在core_cm3.h中:
    1.png
这里可以看出来内核中断是在SCB中配置的。所以我想配置Systick的中断优先级必然用到NVIC_SetPriority这个函数。


2.那要该怎么配置呢-->如果我一个外设中断的优先级分组为 2 ,抢占为0 ,子为1,你要配置 systick的优先级比我高或者低
  我写了代码验证了一下,当外部中断优先据分组为 2 ,抢占为0 ,子为1时,那Systick的中断优先级要高的话,那只要2 0 0就好。
  从第一点说了呀,内核异常在SCB中管理,那分组2已经配置好了,NVIC_SetPriority 这个函数是可以配置抢占级和效应优先级的。
  所以我就写代码测试了一下,NVIC_SetPriority (SysTick_IRQn, 0); 这样子就可以把Systick的中断优先级配置为2 0 0。
2.png 3.png
实验证明,是先在Systick中断中点亮LED再从外部中断点亮。
然后我把Systick配置成为了2 0 1 即NVIC_SetPriority (SysTick_IRQn, 1),在相同的优先级情况,发现Systick的优先级更高,这条是不是在相同优先及配置的情况下内核异常的优先级比外设高还有待深入验证。

之前没有对这方面了解过,这是我实验结果,算是学习到了一点东西了,不过对NVIC了解得还是不够透彻,只能大概说这么多。

回复 支持 反对

使用道具 举报

发表于 2016-8-15 17:48:37 | 显示全部楼层
火哥,回个贴看看我理解得对不对啊~我这样子做实验的时候可以配置比外设低或高,在分组确定的情况下。
回复 支持 反对

使用道具 举报

发表于 2016-8-15 18:15:59 | 显示全部楼层
这个中断优先级是可以设置的,当优先级相同时,内核级中断要优先于外部可屏蔽中断执行,但设置外部可屏蔽中断优先级大于内核级中断时,它是可抢占内核中断的。另外做延时时,若要获得非常精确的延时,可以把Systick的优先级设到最高。
回复 支持 反对

使用道具 举报

发表于 2016-8-15 18:44:44 | 显示全部楼层
知道是systick是可编程的,当然意味着比外设的级别可高可低了!但是到底如何让其比外设低或者高,就不清楚了
回复 支持 反对

使用道具 举报

 楼主| 发表于 2016-8-15 19:14:36 | 显示全部楼层
痞爷李 发表于 2016-8-15 18:15
这个中断优先级是可以设置的,当优先级相同时,内核级中断要优先于外部可屏蔽中断执行,但设置外部可屏蔽中 ...

完全正确
回复 支持 反对

使用道具 举报

发表于 2016-8-15 19:40:09 | 显示全部楼层
内核外设的优先级比芯片外设的优先级高吧
回复 支持 反对

使用道具 举报

发表于 2016-8-15 19:45:08 | 显示全部楼层
看来有套路在里面
回复 支持 反对

使用道具 举报

 楼主| 发表于 2016-8-15 19:46:52 | 显示全部楼层
woaiwm 发表于 2016-8-15 19:40
内核外设的优先级比芯片外设的优先级高吧

错了                                       
回复 支持 反对

使用道具 举报

发表于 2016-8-15 19:47:49 | 显示全部楼层
来看答案:
回复

使用道具 举报

 楼主| 发表于 2016-8-15 22:12:23 来自手机 | 显示全部楼层
minDragon 发表于 2016-8-15 17:39
刚忙完工作,为了把这个逼装完,立马写代码测试了一下。
1.我从火哥的代码中找到配置Systick中断优先级 ...

你理解的是对的,完全正确。在软件优先级相等的情况下,内核的中断优先级都高于外射的。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2016-8-15 22:13:33 来自手机 | 显示全部楼层
minDragon 发表于 2016-8-15 17:48
火哥,回个贴看看我理解得对不对啊~我这样子做实验的时候可以配置比外设低或高,在分组确定的情况下。

对,我在隐藏的帖子第三点里面说了,分析了。
回复 支持 反对

使用道具 举报

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

本版积分规则

联系站长|手机版|野火电子官网|野火淘宝店铺|野火电子论坛 ( 粤ICP备14069197号 ) 大学生ARM嵌入式2群

GMT+8, 2024-11-29 21:43 , Processed in 0.088151 second(s), 26 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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