精华内容
下载资源
问答
  • STM32(Cortex-M3)中有两个优先级的概念——抢占式优先级和响应优先级,有人把响应优先级称作’亚优先级’或’副优先级’,每个中断源都需要被指定这两种优先级。 具有抢占式优先级的中断可以在具有低抢占式优先级...

    NVIC:Nested Vectored Interrupt Controller

    STM32(Cortex-M3)中有两个优先级的概念——抢占式优先级和响应优先级,有人把响应优先级称作’亚优先级’或’副优先级’,每个中断源都需要被指定这两种优先级。

    具有高抢占式优先级的中断可以在具有低抢占式优先级的中断处理过程中被响应,即中断嵌套,或者说高抢占式优先级的中断可以嵌套低抢占式优先级的中断。

    当两个中断源的抢占式优先级相同时,这两个中断将没有嵌套关系,当一个中断到来后,如果正在处理另一个中断,这个后到来的中断就要等到前一个中断处理完之后才能被处理。如果这两个中断同时到达,则中断控制器根据他们的响应优先级高低来决定先处理哪一个;如果他们的抢占式优先级和响应优先级都相等,则根据他们在中断表中的排位顺序决定先处理哪一个。

    既然每个中断源都需要被指定这两种优先级,就需要有相应的寄存器位记录每个中断的优先级;在Cortex-M3中定义了8个比特位用于设置中断源的优先级,这8个比特位可以有8种分配方式,如下:

    所有8位用于指定响应优先级
    最高1位用于指定抢占式优先级,最低7位用于指定响应优先级
    最高2位用于指定抢占式优先级,最低6位用于指定响应优先级
    最高3位用于指定抢占式优先级,最低5位用于指定响应优先级
    最高4位用于指定抢占式优先级,最低4位用于指定响应优先级
    最高5位用于指定抢占式优先级,最低3位用于指定响应优先级
    最高6位用于指定抢占式优先级,最低2位用于指定响应优先级
    最高7位用于指定抢占式优先级,最低1位用于指定响应优先级
    这就是优先级分组的概念。


    Cortex-M3允许具有较少中断源时使用较少的寄存器位指定中断源的优先级,因此STM32把指定中断优先级的寄存器位减少到4位,这4个寄存器位的分组方式如下:
    第0组:所有4位用于指定响应优先级
    第1组:最高1位用于指定抢占式优先级,最低3位用于指定响应优先级
    第2组:最高2位用于指定抢占式优先级,最低2位用于指定响应优先级
    第3组:最高3位用于指定抢占式优先级,最低1位用于指定响应优先级
    第4组:所有4位用于指定抢占式优先级

    可以通过调用STM32的固件库中的函数NVIC_PriorityGroupConfig()选择使用哪种优先级分组方式,这个函数的参数有下列5种:

    NVIC_PriorityGroup_0 => 选择第0组
    NVIC_PriorityGroup_1 => 选择第1组
    NVIC_PriorityGroup_2 => 选择第2组
    NVIC_PriorityGroup_3 => 选择第3组
    NVIC_PriorityGroup_4 => 选择第4组

    接下来就是指定中断源的优先级,下面以一个简单的例子说明如何指定中断源的抢占式优先级和响应优先级:

    // 选择使用优先级分组第1组
    NVIC_PriorityGroupConfig(NVIC_PriorityGroup_1);

    // 使能EXTI0中断
    NVIC_InitStructure.NVIC_IRQChannel = EXTI0_IRQChannel;
    NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 1; // 指定抢占式优先级别1
    NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0; // 指定响应优先级别0
    NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
    NVIC_Init(&NVIC_InitStructure);

    // 使能EXTI9_5中断
    NVIC_InitStructure.NVIC_IRQChannel = EXTI9_5_IRQChannel;
    NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0; // 指定抢占式优先级别0
    NVIC_InitStructure.NVIC_IRQChannelSubPriority = 1; // 指定响应优先级别1
    NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
    NVIC_Init(&NVIC_InitStructure);


    要注意的几点是:
    1)如果指定的抢占式优先级别或响应优先级别超出了选定的优先级分组所限定的范围,将可能得到意想不到的结果;
    2)抢占式优先级别相同的中断源之间没有嵌套关系;
    3)如果某个中断源被指定为某个抢占式优先级别,又没有其它中断源处于同一个抢占式优先级别,则可以为这个中断源指定任意有效的响应优先级别。


    在老的MCU中,没有分组的概念,分组是为了更好地管理中断,可以将同一个优先级的任务放在同一分组里,先到先执行,同时到,按子优先级顺序执行。
    NVIC_SetPriorityGrouping(NVIC_PriorityGroup_4)意味着没有子优先级,只有抢占优先级的区别,跟老MCU基本一样
    NVIC_SetPriorityGrouping(NVIC_PriorityGroup_0)意味着没有抢占优先级,只有子优先级的区别

    中断分组设置好以后,设置中断任务的优先级
    NVIC_SetPriority(irq,pri0)
    irq 表示中断号,由MCU决定
    pri0 值域 0~15 根据前述分组,决定哪些位是 抢占优先级,哪些位是 子优先级
    数值越低,优先级越高
    当然,以上设置是在相应中断配置后,且相应中断使能的情况下才有效

    展开全文
  • *++哪个优先级

    千次阅读 2014-03-25 10:35:59
    源:http://zhidao.baidu.com/link?url=sD6oTsmQ3wDXsYb-AVK_rWAk_q0NMgMPZrXrLRhoLcLpIGkjrNwd57kTrvdSuO6nw3IQGARE4ImH6paDrdBEqa 评: 两个处于同一优先级,结合方向是自右向左 其实这样只是当++在变量前面的...
    源:http://zhidao.baidu.com/link?url=sD6oTsmQ3wDXsYb-AVK_rWAk_q0NMgMPZrXrLRhoLcLpIGkjrNwd57kTrvdSuO6nw3IQGARE4ImH6paDrdBEqa
    
    评:
    两个处于同一优先级,结合方向是自右向左
    其实这样只是当++在变量前面的时候才处理同一优先级,当++在变量之后时,你可以将++的优先级看成最低级的,比逗号运算符的优先级还低

    PS:
    先进行*p,运行完后再进行++运算,因为这个时候的++在变量后面,所以其优先级最低

    看到有人 写了个 hash算法 以后有机会测试下 其冲突度
    注: java string hashcode 就是这个算法
    http://blog.csdn.net/haoel/article/details/2863 回复 coc
    typedef struct _hTab{
    hLinks* link; /* 一个链表 */
    int num; /* 成员个数 */
    int size; /* 表的尺寸 */
    } hTab;

    unsigned long getHashIndex( const char *key, int nTableLength ){
    unsigned long nHash = 0;
    while (*key) {
    nHash = (nHash<<5) + nHash + *key++;
    }

    return ( nHash % nTableLength );
    }
    展开全文
  • 1、抢占优先级比子优先级的优先权更,这意味抢占优先级的中断会先执行,而不管子优先级的优先权,数值越低优先级。 2、同理,如果抢占优先级相同,那么就会比较子优先级,子优先级的中断将会先被执行...

    、抢占优先级比子优先级的优先权更高,这意味抢占优先级更高的中断会先执行,而不管子优先级的优先权,数值越低优先级越高。
    、同理,如果抢占优先级相同,那么就会比较子优先级,子优先级更高的中断将会先被执行,数值越低优先级越高。
    、当两个中断源的抢占式优先级相同时,这两个中断将没有嵌套关系,当一个中断到来后,如果正在处理另一个中断,这个后到来的中断就要等到前一个中断处理完之后才能被处理。如果这两个中断同时到达,则中断控制器根据他们的响应优先级高低来决定先处理哪一个;如果他们的抢占式优先级和响应优先级都相等,则根据他们在中断表中的排位顺序决定先处理哪一个。
    、既然每个中断源都需要被指定这两种优先级,就需要有相应的寄存器位记录每个中断的优先级;在Cortex-M3中定义了8个比特位用于设置中断源的优先级,这8个比特位可以有8种分配方式,如下:

    所有8位用于指定响应优先级
    最高1位用于指定抢占式优先级,最低7位用于指定响应优先级
    最高2位用于指定抢占式优先级,最低6位用于指定响应优先级
    最高3位用于指定抢占式优先级,最低5位用于指定响应优先级
    最高4位用于指定抢占式优先级,最低4位用于指定响应优先级
    最高5位用于指定抢占式优先级,最低3位用于指定响应优先级
    最高6位用于指定抢占式优先级,最低2位用于指定响应优先级
    最高7位用于指定抢占式优先级,最低1位用于指定响应优先级

    这就是优先级分组的概念。

    ========================================================================

    、Cortex-M3允许具有较少中断源时使用较少的寄存器位指定中断源的优先级,因此STM32把指定中断优先级的寄存器位减少到4位,这4个寄存器位的分组方式如下:

    第0组:所有4位用于指定响应优先级
    第1组:最高1位用于指定抢占式优先级,最低3位用于指定响应优先级
    第2组:最高2位用于指定抢占式优先级,最低2位用于指定响应优先级
    第3组:最高3位用于指定抢占式优先级,最低1位用于指定响应优先级
    第4组:所有4位用于指定抢占式优先级

    可以通过调用STM32的固件库中的函数NVIC_PriorityGroupConfig()选择使用哪种优先级分组方式,这个函数的参数有下列5种:

    NVIC_PriorityGroup_0 => 选择第0组
    NVIC_PriorityGroup_1 => 选择第1组
    NVIC_PriorityGroup_2 => 选择第2组
    NVIC_PriorityGroup_3 => 选择第3组
    NVIC_PriorityGroup_4 => 选择第4组

    接下来就是指定中断源的优先级,下面以一个简单的例子说明如何指定中断源的抢占式优先级和响应优先级:

    // 选择使用优先级分组第1组
    NVIC_PriorityGroupConfig(NVIC_PriorityGroup_1);
      
    // 使能EXTI0中断
    NVIC_InitStructure.NVIC_IRQChannel = EXTI0_IRQChannel;
    NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 1; // 指定抢占式优先级别1
    
    NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0; // 指定响应优先级别0
    NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
    NVIC_Init(&NVIC_InitStructure);
      
    // 使能EXTI9_5中断
    NVIC_InitStructure.NVIC_IRQChannel = EXTI9_5_IRQChannel;
    NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0; // 指定抢占式优先级别0
    NVIC_InitStructure.NVIC_IRQChannelSubPriority = 1; // 指定响应优先级别1
    NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
    NVIC_Init(&NVIC_InitStructure);
    

    ========================================================================
    要注意的几点是:

    1)如果指定的抢占式优先级别或响应优先级别超出了选定的优先级分组所限定的范围,将可能得到意想不到的结果;

    2)抢占式优先级别相同的中断源之间没有嵌套关系;

    3)如果某个中断源被指定为某个抢占式优先级别,又没有其它中断源处于同一个抢占式优先级别,则可以为这个中断源指定任意有效的响应优先级别。

    来 自:https://blog.csdn.net/andrewgithub/article/details/53758968

    展开全文
  • FreeRtos 任务优先级和中断优先级

    千次阅读 2019-07-01 17:36:19
    中断优先级和任务优先级的区别: 1.简单的说,这两者之间没有任何关系,不管中断的优先级是多少,中断的优先级永远任何任务的优先级,即在执行的过程中,中断来了就开始执行中断服务程序, 2.对应STM32F103 F...

    中断优先级和任务优先级的区别:

              1.简单的说,这两者之间没有任何关系,不管中断的优先级是多少,中断的优先级永远高任何任务的优先级,即在执行的过程中,中断来了就开始执行中断服务程序,

             2.对应STM32F103  F407来说,中断优先级数值越小,优先级就越高,而FreeRTOS的任务优先级是,任务优先级数值越小

    任务优先级越低。

     任务优先级配置  

       1. FreeRTOS中任务的最高优先级是通过FreeRTOSConfig.h中的configMAX_PRIORITIES  进行配置的   用户实际可以使用的优先级范围是0- configMAX_PRIORITIES -1,比如我们在此定义为5 那么用户可以使用优先级号 0,1,2,3,4,不包含5,数值越大优先级越高  

      2.建议用户配置configMAX_PRIORITIES 的最大值不要超过32,用户可以使用的范围0-31,根据实际应用配置,配置越大,需要的内存空间越大

      优先级分配方案:

       1.IRQ任务:IRQ任务是指通过中断服务程序进行触发的任务,,所有任务中优先级最高

       2.高优先级后台任务:比如按键检测,触摸检测,USB消息处理

       3.低优先级时间调度任务:比如:emWin的界面显示,LED数码管显示

      note:特别注意IRQ任务和高优先级任务必须设置为阻塞式(调用消息等待或者延迟等函数),只有这样高优先级任务才会

     释放CPU的使用权,从而低优先级任务才会有机会得到执行

      在STM32使用由于中断优先级设置采用的是库函数,因此请必须保证优先级设置为可抢占优先级

       NVIC_PriorityGroupConfig( NVIC_PriorityGroup_4 );只有抢占优先级,优先级为0--15级,数值越大优先级越低

    优先级设置介绍:

      FreeRTOSConfig.h中定义了两个宏,分别是:configKERNEL_INTERRUPT_PRIORITY和configMAX_SYSCALL_INTERRUPT_PRIORITY

              configKERNEL_INTERRUPT_PRIORITY用来设置RTOS内涵自己的中断优先级,因为RTOS内涵中断

    不允许抢占用户使用的中断,因此这个宏一般为硬件最低优先级

            configMAX_SYSCALL_INTERRUPT_PRIORITY  用来设置可以在中断服务程序中安全调用API函数最高优先级,

    如果优先大于这个宏代表的优先级,FreeRtos将无法关闭该中断,不受FreeRtos控制

    #ifdef __NVIC_PRIO_BITS /* __NVIC_PRIO_BITS 已经在stm32f4xx.h里面定义为4

    */ #define configPRIO_BITS __NVIC_PRIO_BITS

    #else #define configPRIO_BITS 4 #endif

    #define configPRIO_BITS  4

    此宏定义用于配置STM32的8位优先级设置寄存器实际使用的位数

    STM32f103 STM32F407  和STM32F429都是使用高4位。在往寄存器中写值的时候需要移位,

    SysTick的优先级我们一般配置为最低,即0xf 。这样可以提高系统的实时响应能力,即其他的外部中断可以及时的得到响应

    上面宏定义的FreeRtos优先级为5-15级,在FreeRtos中调用中断关闭中断开启对5-15级有效,对0-4的中断无效

     

          

     

     

      

     

     

                                                

     

     

     

     

    展开全文
  • STM32(Cortex-M3)中有两个优先级的概念——抢占式优先级和响应优先级,有人把响应优先级称作'亚优先级'或'副优先级',每个中断源都需要被指定这两种优先级。 具有抢占式优先级的中断可以在具有低抢占式优先级...
  • 当前内容主要用于本人学习复习之用,当前内容包括如何创建优先级队列使用消息优先级,以及不设定优先级和设定优先级队列之间的区别。包括探讨server如何是实现优先级的 当前内容来源:RabbitMQ官方文档 2.官方的...
  • 最高优先级算法

    千次阅读 2018-05-25 22:47:19
    操作系统进程调度之最高优先级算法import java.util.ArrayList; class process{ private int IDname; //进程ID private int PR; //优先级 private int CPUTIME; //进程已运行的时间 private int LASTTIME; //...
  • 路由协议及其发现路由的优先级: 路由协议或路由种类 相应路由的优先级 DIRECT 0 OSPF 10 IS-IS 15 STATIC 60 RIP 100 OSPF ASE 150 OSPF NSSA 150 IBGP 256 EBGP ...
  • VLAN ID一起使用,位于高位起16-18bit字段,长度3bit,取值范围0-7,0优先级最低,7优先级最高 TPID(Tag ProtocolIdentifier标签协议标识):2字节的定值0X8100,表明这是一个加了802.1Q标签的帧。 TCI...
  • NVIC_PriorityGroup_00 bit 抢占优先级 4 bit 子优先级 NVIC_PriorityGroup_1 :1 bit 抢占优先级 3 bit 子优先级 NVIC_PriorityGroup_2 :2 bit 抢占优先级 2 bit 子优先级 NVIC_PriorityGroup_33 bit 抢占...
  • CSS 优先级和定位

    千次阅读 2016-10-19 20:26:42
    css优先级 !Importang 10000 行内 1000 . Id选择器 100 类选择器(:hover伪类)10 ...默认值 0 ...其他:1.同等优先级 看先后顺序 后写的优先 ... 2.空格 层次选择器 优先级叠加 ... 3文内的样式优先级为1,0,0
  • 之前学习嵌入式的时候不太明白中断优先级分组与抢占优先级和响应优先级的关系,比如分组为2,抢占优先级也为2,响应优先级也为2,就是不明白他们之间有什么关系,谁决定谁,总共有多少个数值可供选择。  趁着现在...
  • 优先级反转

    2018-03-16 11:20:15
    实验报告四:(1)设计共有 3 个应用任务 TA0,TA1,TA2;优先级: TA0>TA1>TA2;TA0 TA2 互斥使用资 源 mutex,且 TA2 最先获得 mutex。用 OSSemCreate、OSSemPend、OSSemPost 显现优先级反转现 象。(2)用 ...
  • python 优先级和常用命令

    千次阅读 2018-06-20 14:18:05
    进程的优先级决定了执行权限占有系统资源的优先程度 优先级,需要的权限越,同时占有的系统资源就越; 查看优先级的命令: top #在终端输入命令,该命令是动态监测系统优先级,按q退出,&amp;lt...
  • STM32的抢占优先级和响应优先级

    万次阅读 多人点赞 2017-12-19 12:25:09
    一、抢占优先级和响应优先级  STM32 的中断向量具有两个属性,一个为抢占属性,另一个为响应属性,其属性编号 越小,表明它的优先级别越。  抢占,是指打断其他中断的属性,即因为具有这个属性会出现嵌套中断...
  • log4j日志优先级问题自定义优先级

    千次阅读 2016-10-28 12:22:05
    Log4j日志优先级和自定义优先级 1、log4j依赖包导入  log4j优先级是日志打印过程中根据需求通过不同的优先级打印不同的日志(如日常日志错误日志通过不同级别来输出到不同的文件中)。在使用log4j之前先得在pom...
  • 1 测试用例优先级定义 优先级 描述 High 主要流程,核心功能,80%用户会用到的基本路径 Medium 正常用户会使用到的功能,验证数据的正确性 Low  界面,异常路径,易用性等 2 BUG优先级...
  • Kubernetes Pod 优先级和抢占

    千次阅读 2018-12-11 12:47:20
    Kubernetes 1.8 及其以后的版本中可以指定 Pod 的优先级优先级表明了一个 Pod 相对于其它 Pod 的重要性。当 Pod 无法被调度时,scheduler 会尝试抢占(驱逐)低优先级的 Pod,使得这些挂起的 pod 可以被调度。在 ...
  • css3优先级

    千次阅读 2016-11-29 23:34:46
    CSS 选择器优先级是指“基础选择器” 的优先级, 如下 ID>CLASS>元素>* important>内联>ID>类>标签|伪类|属性选择器>伪元素>继承>通配符 ...优先级数值比较: ...优先级 ...1,0,0,0 1000 #w
  • 运算符优先级

    千次阅读 2019-06-12 00:10:29
    运算符优先级
  • 路由优先级

    千次阅读 2020-04-10 00:22:49
    每一个路由协议都有协议优先级(数值越小,优先级),当有多个路由信息时,选择是最高优先级的路由作为最佳路由。 路由类型 direct ospf static rip 优先级 0 10 60 100...
  • execute submit submitexecute 本质上是没有区别的,根据源码所知,submit也是调用了execute()方法,只不过submit是有返回值的。 public Future<?> submit(Runnable task) { if (task == null) throw ...
  • STM32 NVIC之抢占优先级和响应优先级

    千次阅读 2014-08-27 13:28:29
    STM32(Cortex-M3)中有两个优先级的概念——抢占式优先级和响应优先级,有人把响应优先级称作'亚优先级'或'副优先级',每个中断源都需要被指定这两种优先级。 具有抢占式优先级的中断可以在具有低抢占式优先级...
  • stm32的抢占优先级和响应优先级(也叫子优先级

    万次阅读 多人点赞 2019-04-25 18:30:41
    一、抢占优先级和响应优先级 STM32 的中断向量具有两个属性,一个为抢占属性,另一个为响应属性,其属性编号越小,表明它的优先级别越。 抢占,是指打断其他中断的属性,即因为具有这个属性会出现嵌套中断(在执行...
  • v-if v-for 哪个优先级? 当使用v-for v-if写在同层的时候,会可能收到来自eslint-plugin-vue的两种提醒 [vue/no-use-v-if-with-v-for] This ‘v-if’ should be moved to the wrapper element.eslint-...
  • 中断优先级

    千次阅读 2020-01-13 13:36:17
    如果这时改变分组为3,则抢占优先级为101 0即抢占优先级为5,响应优先级0,已设置好的中断就会混乱 设置中断优先级可以使用库函数实现: 以及中断初始化函数: 总结一下中断优先级设置: 具体还是要在.....
  • CSS优先级

    千次阅读 2018-08-23 14:03:25
    1)优先级就近原则,同权重的样式谁离标签内容近谁就优先级高; 2)载入样式以最后载入的定位为准; 3)!important优先级最高; 4)权重计算: (1)内联,如style=”“——1000, (2)id,如#content——100...
  • 进程线程的优先级

    千次阅读 2018-11-12 15:03:27
    进程(线程)的优先级,那么就可以分占越多的CPU时间片,每个进程都有相应的优先级优先级决定它何时运行占用CPU的时间。最终的优先级共分 32 级,是从 0 到 31 的数值,称为基本优先级别。   线程32个...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 542,140
精华内容 216,856
关键字:

优先级0和3哪个高