完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
我在使用基于ARM的微控制器但是我不明白subpriority和preeemptionpriority。例如: NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0x00; NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0x01; 为什么要使用这些?
|
|
相关推荐
4个回答
|
|
NVIC_IRQChannelPreemptionPriority
使用此参数可设置中断优先级,编号从0x00到0x0F。假设我们必须使用USART接收中断和ADC转换完成中断。USART比ADC更重要,因此USART的数量将低于ADC。 NVIC_IRQChannelSubPriority 使用此参数可设置中断优先级,编号从0x00到0x0F。假设您启用了2个USART,但USART1比USART2更重要。因此USART1的数量将低于USART2。 或STM32中断服务例程优先级 NVIC_IRQChannelPreemptionPriority用于确定在超出先前正在服务的中断之后发生的中断。 NVIC_IRQChannelSubPriority用于确定两个中断同时发生的优先级。(如果未确定NVIC_IRQChannelSubPriority,则使用NVIC表中的位置确定优先级。) |
|
|
|
M3或M4内核最多支持240个中断。你需要优先级分配给中断。而不是定义240个优先级架构组将它们组合在一起。就是12个主要组(A组,B组,C组......),每组有10个中断源。因此,如果A组中已经有中断服务,那么同一组A中的另一个中断将不会被服务直到第一个中断被完全服务。相反,在服务第一个中断时,如果从一组较高优先级发生另一个中断,则当前中断服务将暂停。当同一组中的两个中断同时发生时,子优先级有所帮助。然后子优先级将起作用以选择要执行的ISR。
|
|
|
|
抢占优先级允许ISR被另一个更高优先级的中断抢占(中断)。当优先级较高的中断完成时,优先级较低的中断从停止的位置继续。
另一方面,次优先选与先发制人无关。假设您有两个具有相同优先级的中断,这两个中断都是挂起的。中断处理程序将根据其子优先级选择首先服务的中断处理程序。第一个完成后,第二个将开始。 两个中断似乎不太可能同时发生。可能发生这种情况的一种常见情况是,如果您有一个需要很长时间的中断服务程序。在此例程期间,可能发生了多个其他中断触发。如果是,则子优先级将确定接下来处理哪一个。 最后,随着实际优先级的增加,优先级值会降低。也就是说,Priority=1之前会得到服务Priority=2。 |
|
|
|
楼主辛苦了,谢谢分享
|
|
|
|
你正在撰写答案
如果你是对答案或其他答案精选点评或询问,请使用“评论”功能。
253 浏览 0 评论
AD7686芯片不传输数据给STM32,但是手按住就会有数据。
806 浏览 2 评论
1991 浏览 0 评论
如何解决MPU-9250与STM32通讯时,出现HAL_ERROR = 0x01U
1095 浏览 1 评论
hal库中i2c卡死在HAL_I2C_Master_Transmit
1520 浏览 1 评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-11-20 01:27 , Processed in 0.623856 second(s), Total 82, Slave 65 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号