OpenEdv-开源电子网

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

关于CM3内核优先级默认分组的讨论

[复制链接]

31

主题

1955

帖子

3

精华

论坛元老

Rank: 8Rank: 8

积分
4524
金钱
4524
注册时间
2018-5-11
在线时间
947 小时
发表于 2018-7-18 20:09:47 | 显示全部楼层 |阅读模式
本帖最后由 warship 于 2018-7-18 20:28 编辑

前一段时间和网友@hougeqvjing 在下面的帖子中有一个关于CM3内核优先级默认分组的讨论http://www.openedv.com/forum.php?mod=viewthread&tid=274693
我们知道,在STM32F1系统中,优先级分组是由4BIT表示的,而这4BIT是如何来确定分组则是由
SCB->AIRCR中第8:10这3位来决定
共有5种设置结果:这3位的值分别设定为7、6、5、4、3
则分别对应分组: 0、1、2、3、4
网友的疑问是:查手册这3位的复位值为000, 这值为0是什么样的分组,
系统复位后它的值为0,这时候SYSTICK等中断工作的时候,是几位抢占?几位响应?
当时我也不是太清楚,讨论后也没有确定的结论。
今天我看了一下CM3内核权威参考这本书,终于算是把这个问题搞清楚了。为了让更多的网友看到, 现另开帖分享如下:



我的开源链接 https://github.com/ShuifaHe/STM32.git  请关注,点赞支持哦。
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

31

主题

1955

帖子

3

精华

论坛元老

Rank: 8Rank: 8

积分
4524
金钱
4524
注册时间
2018-5-11
在线时间
947 小时
 楼主| 发表于 2018-7-18 20:30:21 | 显示全部楼层
本帖最后由 warship 于 2018-7-18 20:57 编辑

CM3是用8位来配置优先级的,
而AIRCR的3位(10:8)是用来定义在这8位中优先级分组情况的,而其数值的实质是用于确定在这8位中,从第几位作为分界点,分为抢占优先级和子优先级(或译为响应优先级)的
即用于确定优先级分组的起始位的,
000表示从BIT0处进行分组,即BIT0代表子优先级,BIT1-7代表抢占优先级
001表示从BIT1处进行分组,即BIT0、1代表子优先级,BIT2-7代表抢占优先级
010表示从BIT2处进行分组,即3位子优先级,5位抢占优先级
011表示从BIT3处进行分组,即4位子优先级,4位抢占优先级
100表示从BIT4处进行分组,即5位子优先级,3位抢占优先级
101表示从BIT5处进行分组,即6位子优先级,2位抢占优先级
110表示从BIT6处进行分组,即7位子优先级,1位抢占优先级
111表示从BIT7处进行分组,即8位子优先级,0位抢占优先级

为了最大限度的方便移植,各系列芯片能够兼容并蓄,
定义了具体芯片的裁减原则,
可以从LSB(最低位BIT0)开始进行裁减,即:可以不实现低位,但高位必须实现。
比如只实现4位,则只有BIT7-4有用,其它位无用
这个时候AIRCR的3位,如果是000,001,010,011效果是一样的,
都是BIT4-7为抢占级,
只有从100开始才会体现出区别,
小于等于011,子优先级实际位数都是0(如:011理论上是定义了4位子优先级,参见上面的定义),因这些位不存在(厂家没有实现功能),可看作理论上有,实际上没有
100:从BIT4开始表示子优先级,即1位(理论上是5位)子优先级,3位抢占优先级
101:从BIT5开始表示子优先级,即2位(理论上是6位)子优先级,2位抢占优先级
110:从BIT6开始表示子优先级,即3位(理论上是7位)子优先级,1位抢占优先级
111:从BIT5开始表示子优先级,即4位(理论上是8位)子优先级,0位抢占优先级
所以AIRCR这3位的复位值000在4BIT优先级的机器上的实际运行结果与设置为011完全等效。
我的开源链接 https://github.com/ShuifaHe/STM32.git  请关注,点赞支持哦。
回复 支持 反对

使用道具 举报

31

主题

1955

帖子

3

精华

论坛元老

Rank: 8Rank: 8

积分
4524
金钱
4524
注册时间
2018-5-11
在线时间
947 小时
 楼主| 发表于 2018-7-18 21:45:25 | 显示全部楼层
每一个IRQ(中断请求)通道都有一个独立的8位优先级寄存器
共有240个这样的寄存器,即NVIC->IP[NVIC_Channel]
如果8位只实现了4位,则仅有高4位有效,
而这高4位中,几位表示抢先优先级,几位表示子优先级,
则由AIRCR的3位来配置决定,这3位在系统中一般只须设定一次,
比如:设定为2位抢先、2位子优先级,
则CM3会用这个标准去解释执行所有的上述240个寄存器的那高4位的意义。
我的开源链接 https://github.com/ShuifaHe/STM32.git  请关注,点赞支持哦。
回复 支持 反对

使用道具 举报

2

主题

41

帖子

0

精华

初级会员

Rank: 2

积分
70
金钱
70
注册时间
2018-1-15
在线时间
13 小时
发表于 2018-7-21 17:55:04 | 显示全部楼层
回答得相当专业,暂!!!
回复 支持 反对

使用道具 举报

31

主题

1955

帖子

3

精华

论坛元老

Rank: 8Rank: 8

积分
4524
金钱
4524
注册时间
2018-5-11
在线时间
947 小时
 楼主| 发表于 2018-7-21 19:15:21 | 显示全部楼层
hougeqvjing 发表于 2018-7-21 17:55
回答得相当专业,暂!!!

谢谢,相互学习。
我的开源链接 https://github.com/ShuifaHe/STM32.git  请关注,点赞支持哦。
回复 支持 反对

使用道具 举报

57

主题

1680

帖子

3

精华

资深版主

Rank: 8Rank: 8

积分
4307
金钱
4307
注册时间
2018-6-30
在线时间
808 小时
发表于 2020-4-15 12:08:18 | 显示全部楼层
get到了,一目了然

图片1.png
业精于勤荒于嬉;行成于思毁于随!
回复 支持 反对

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-6-27 03:06

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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