两个优先级是啥
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了两个优先级是啥相关的知识,希望对你有一定的参考价值。
什么类型优先级呢?参考一下:两个优先级,一个高级,一个低级。由IP寄存器设置,也可以位设置,分别用PX0,PT0,PX1,PT1,PS
为1是高级,为0是低级。
同级的中断由自然优先级来判定,从高到低分别是:INT0,T0,INT1,T1,串口
欢迎追问 参考技术A STM32(Cortex-M3)中有两个优先级的概念——抢占式优先级和响应优先级,有人把响应优先级称作'亚优先级'或'副优先级',每个中断源都需要被指定这两种优先级。
具有高抢占式优先级的中断可以在具有低抢占式优先级的中断处理过程中被响应,即中断嵌套,或者说高抢占式优先级的中断可以嵌套低抢占式优先级的中断。
当两个中断源的抢占式优先级相同时,这两个中断将没有嵌套关系,当一个中断到来后,如果正在处理另一个中断,这个后到来的中断就要等到前一个中断处理完之后才能被处理。如果这两个中断同时到达,则中断控制器根据他们的响应优先级高低来决定先处理哪一个;如果他们的抢占式优先级和响应优先级都相等,则根据他们在中断表中的排位顺序决定先处理哪一个。
既然每个中断源都需要被指定这两种优先级,就需要有相应的寄存器位记录每个中断的优先级;在Cortex-M3中定义了8个比特位用于设置中断源的优先级,这8个比特位可以有8种分配方式,如下:
所有8位用于指定响应优先级
最高1位用于指定抢占式优先级,最低7位用于指定响应优先级
最高2位用于指定抢占式优先级,最低6位用于指定响应优先级
最高3位用于指定抢占式优先级,最低5位用于指定响应优先级
最高4位用于指定抢占式优先级,最低4位用于指定响应优先级
最高5位用于指定抢占式优先级,最低3位用于指定响应优先级
最高6位用于指定抢占式优先级,最低2位用于指定响应优先级
最高7位用于指定抢占式优先级,最低1位用于指定响应优先级
这就是优先级分组的概念。
在这个例子中,三元运算符的优先级是啥?
【中文标题】在这个例子中,三元运算符的优先级是啥?【英文标题】:what is the precedence of a ternary operator in this example?在这个例子中,三元运算符的优先级是什么? 【发布时间】:2020-11-03 10:15:02 【问题描述】:>>> count = 0
>>> for c in "##.#.":
... count = count + 1 if c == '.' else 0
...
>>> print(count)
1
>>> count = 0
>>> for c in "##.#.":
... count = count + (1 if c == '.' else 0)
...
>>> print(count)
2
为什么第一个例子没有打印出 2 的计数器?
【问题讨论】:
如果第二个是你的意图,那么为什么不使用count += 1 if c == '.' else 0
呢?
【参考方案1】:
条件表达式有a very low precedence。
所以第一个表达式实际上被解析为:
count = (count + 1) if c == '.' else 0
这将在每次c != '.'
时将count
设置为0。
【讨论】:
不,当c
不等于'.'
时,它将count
设置为0。
感谢您的链接。我认为我没有意识到 and
和 or
没有相同的优先级(以及类似的按位等价物),尽管我总是在更多而不是更少的括号方面犯错,我从来没有被咬过它。【参考方案2】:
在第一种情况下,count
值被替换
>>> for c in "##.#.":
... count = count + 1 if c == '.' else 0
... print (count)
...
0
0
1
0
1
这里count
被追加
>>> count=0
>>> for c in "##.#.":
... count = count + (1 if c == '.' else 0)
... print (count)
...
0
0
1
1
2
>>>
【讨论】:
【参考方案3】:因为这对应于if的True状态。
(True) if (Condition) else (Else)
count = count + 1 if c == '.' else 0
这个的真实状态(计数+1)
count + (1 if c == '.' else 0)
此 (1) 的真实状态
我告诉你的有点复杂吗?
【讨论】:
以上是关于两个优先级是啥的主要内容,如果未能解决你的问题,请参考以下文章