首先打出这个标题是为了便于搜索
在这里赘述一下 这两者没有关系 只需要明白的是中断优先级高于任务的优先级 在单片机运行的过程中 中断来了就执行中断服务程序。
在free-rtos中 任务优先级设置的数值越大 任务的优先级越高
Unix任务优先: 进程优先级数值越小,进程优先级越高。
在RT-Thread 任务优先级设置的数值越小 任务的优先级越高
首先贴上Freertos的配置
- /*
- FreeRTOS V9.0.0 - Copyright (C) 2016 Real Time Engineers Ltd.
- All rights reserved
- VISIT http://www.FreeRTOS.org TO ENSURE YOU ARE USING THE LATEST VERSION.
- This file is part of the FreeRTOS distribution.
- FreeRTOS is free software; you can redistribute it and/or modify it under
- the terms of the GNU General Public License (version 2) as published by the
- Free Software Foundation >>>> AND MODIFIED BY <<<< the FreeRTOS exception.
- ***************************************************************************
- >>! NOTE: The modification to the GPL is included to allow you to !<<
- >>! distribute a combined work that includes FreeRTOS without being !<<
- >>! obliged to provide the source code for proprietary components !<<
- >>! outside of the FreeRTOS kernel. !<<
- ***************************************************************************
- FreeRTOS is distributed in the hope that it will be useful, but WITHOUT ANY
- WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
- FOR A PARTICULAR PURPOSE. Full license text is available on the following
- link: http://www.freertos.org/a00114.html
- ***************************************************************************
- * *
- * FreeRTOS provides completely free yet professionally developed, *
- * robust, strictly quality controlled, supported, and cross *
- * platform software that is more than just the market leader, it *
- * is the industry's de facto standard. *
- * *
- * Help yourself get started quickly while simultaneously helping *
- * to support the FreeRTOS project by purchasing a FreeRTOS *
- * tutorial book, reference manual, or both: *
- * http://www.FreeRTOS.org/Documentation *
- * *
- ***************************************************************************
- http://www.FreeRTOS.org/FAQHelp.html - Having a problem? Start by reading
- the FAQ page "My application does not run, what could be wrong?". Have you
- defined configASSERT()?
- http://www.FreeRTOS.org/support - In return for receiving this top quality
- embedded software for free we request you assist our global community by
- participating in the support forum.
- http://www.FreeRTOS.org/training - Investing in training allows your team to
- be as productive as possible as early as possible. Now you can receive
- FreeRTOS training directly from Richard Barry, CEO of Real Time Engineers
- Ltd, and the world's leading authority on the world's leading RTOS.
- http://www.FreeRTOS.org/plus - A selection of FreeRTOS ecosystem products,
- including FreeRTOS+Trace - an indispensable productivity tool, a DOS
- compatible FAT file system, and our tiny thread aware UDP/IP stack.
- http://www.FreeRTOS.org/labs - Where new FreeRTOS products go to incubate.
- Come and try FreeRTOS+TCP, our new open source TCP/IP stack for FreeRTOS.
- http://www.OpenRTOS.com - Real Time Engineers ltd. license FreeRTOS to High
- Integrity Systems ltd. to sell under the OpenRTOS brand. Low cost OpenRTOS
- licenses offer ticketed support, indemnification and commercial middleware.
- http://www.SafeRTOS.com - High Integrity Systems also provide a safety
- engineered and independently SIL3 certified version for use in safety and
- mission critical applications that require provable dependability.
- 1 tab == 4 spaces!
- */
-
-
- #ifndef FREERTOS_CONFIG_H
- #define FREERTOS_CONFIG_H
-
- #include "sys.h"
- #include "usart.h"
- //针对不同的编译器调用不同的stdint.h文件
- #if defined(__ICCARM__) || defined(__CC_ARM) || defined(__GNUC__)
- #include <stdint.h>
- extern uint32_t SystemCoreClock;
- #endif
-
- //断言
- #define vAssertCalled(char,int) printf("Error:%s,%d\r\n",char,int)
- #define configASSERT(x) if((x)==0) vAssertCalled(__FILE__,__LINE__)
-
- /***************************************************************************************************************/
- /* FreeRTOS基础配置配置选项 */
- /***************************************************************************************************************/
- #define configUSE_PREEMPTION 1 //1使用抢占式内核,0使用协程
- #define configUSE_TIME_SLICING 1 //1使能时间片调度(默认式使能的)
- #define configUSE_PORT_OPTIMISED_TASK_SELECTION 1 //1启用特殊方法来选择下一个要运行的任务
- //一般是硬件计算前导零指令,如果所使用的
- //MCU没有这些硬件指令的话此宏应该设置为0!
- #define configUSE_TICKLESS_IDLE 0 //1启用低功耗tickless模式
- #define configUSE_QUEUE_SETS 1 //为1时启用队列
- #define configCPU_CLOCK_HZ (SystemCoreClock) //CPU频率
- #define configTICK_RATE_HZ (1000) //时钟节拍频率,这里设置为1000,周期就是1ms
- #define configMAX_PRIORITIES (32) //可使用的最大优先级
- #define configMINIMAL_STACK_SIZE ((unsigned short)130) //空闲任务使用的堆栈大小
- #define configMAX_TASK_NAME_LEN (16) //任务名字字符串长度
-
- #define configUSE_16_BIT_TICKS 0 //系统节拍计数器变量数据类型,
- //1表示为16位无符号整形,0表示为32位无符号整形
- #define configIDLE_SHOULD_YIELD 1 //为1时空闲任务放弃CPU使用权给其他同优先级的用户任务
- #define configUSE_TASK_NOTIFICATIONS 1 //为1时开启任务通知功能,默认开启
- #define configUSE_MUTEXES 1 //为1时使用互斥信号量
- #define configQUEUE_REGISTRY_SIZE 8 //不为0时表示启用队列记录,具体的值是可以
- //记录的队列和信号量最大数目。
- #define configCHECK_FOR_STACK_OVERFLOW 0 //大于0时启用堆栈溢出检测功能,如果使用此功能
- //用户必须提供一个栈溢出钩子函数,如果使用的话
- //此值可以为1或者2,因为有两种栈溢出检测方法。
- #define configUSE_RECURSIVE_MUTEXES 1 //为1时使用递归互斥信号量
- #define configUSE_MALLOC_FAILED_HOOK 0 //1使用内存申请失败钩子函数
- #define configUSE_APPLICATION_TASK_TAG 0
- #define configUSE_COUNTING_SEMAPHORES 1 //为1时使用计数信号量
-
- /***************************************************************************************************************/
- /* FreeRTOS与内存申请有关配置选项 */
- /***************************************************************************************************************/
- #define configSUPPORT_DYNAMIC_ALLOCATION 1 //支持动态内存申请
- #define configTOTAL_HEAP_SIZE ((size_t)(8*1024)) //系统所有总的堆大小
-
- /***************************************************************************************************************/
- /* FreeRTOS与钩子函数有关的配置选项 */
- /***************************************************************************************************************/
- #define configUSE_IDLE_HOOK 0 //1,使用空闲钩子;0,不使用
- #define configUSE_TICK_HOOK 0 //1,使用时间片钩子;0,不使用
-
- /***************************************************************************************************************/
- /* FreeRTOS与运行时间和任务状态收集有关的配置选项 */
- /***************************************************************************************************************/
- #define configGENERATE_RUN_TIME_STATS 0 //为1时启用运行时间统计功能
- #define configUSE_TRACE_FACILITY 1 //为1启用可视化跟踪调试
- #define configUSE_STATS_FORMATTING_FUNCTIONS 1 //与宏configUSE_TRACE_FACILITY同时为1时会编译下面3个函数
- //prvWriteNameToBuffer(),vTaskList(),
- //vTaskGetRunTimeStats()
-
- /***************************************************************************************************************/
- /* FreeRTOS与协程有关的配置选项 */
- /***************************************************************************************************************/
- #define configUSE_CO_ROUTINES 0 //为1时启用协程,启用协程以后必须添加文件croutine.c
- #define configMAX_CO_ROUTINE_PRIORITIES ( 2 ) //协程的有效优先级数目
-
- /***************************************************************************************************************/
- /* FreeRTOS与软件定时器有关的配置选项 */
- /***************************************************************************************************************/
- #define configUSE_TIMERS 1 //为1时启用软件定时器
- #define configTIMER_TASK_PRIORITY (configMAX_PRIORITIES-1) //软件定时器优先级
- #define configTIMER_QUEUE_LENGTH 5 //软件定时器队列长度
- #define configTIMER_TASK_STACK_DEPTH (configMINIMAL_STACK_SIZE*2) //软件定时器任务堆栈大小
-
- /***************************************************************************************************************/
- /* FreeRTOS可选函数配置选项 */
- /***************************************************************************************************************/
- #define INCLUDE_xTaskGetSchedulerState 1
- #define INCLUDE_vTaskPrioritySet 1
- #define INCLUDE_uxTaskPriorityGet 1
- #define INCLUDE_vTaskDelete 1
- #define INCLUDE_vTaskCleanUpResources 1
- #define INCLUDE_vTaskSuspend 1
- #define INCLUDE_vTaskDelayUntil 1
- #define INCLUDE_vTaskDelay 1
- #define INCLUDE_eTaskGetState 1
- #define INCLUDE_xTimerPendFunctionCall 1
-
- /***************************************************************************************************************/
- /* FreeRTOS与中断有关的配置选项 */
- /***************************************************************************************************************/
- #ifdef __NVIC_PRIO_BITS
- #define configPRIO_BITS __NVIC_PRIO_BITS
- #else
- #define configPRIO_BITS 4
- #endif
-
- #define configLIBRARY_LOWEST_INTERRUPT_PRIORITY 15 //中断最低优先级
- #define configLIBRARY_MAX_SYSCALL_INTERRUPT_PRIORITY 5 //系统可管理的最高中断优先级
- #define configKERNEL_INTERRUPT_PRIORITY ( configLIBRARY_LOWEST_INTERRUPT_PRIORITY << (8 - configPRIO_BITS) )
- #define configMAX_SYSCALL_INTERRUPT_PRIORITY ( configLIBRARY_MAX_SYSCALL_INTERRUPT_PRIORITY << (8 - configPRIO_BITS) )
-
- /***************************************************************************************************************/
- /* FreeRTOS与中断服务函数有关的配置选项 */
- /***************************************************************************************************************/
- #define xPortPendSVHandler PendSV_Handler
- #define vPortSVCHandler SVC_Handler
-
- #endif /* FREERTOS_CONFIG_H */
-
任务优先级配置
1. FreeRTOS中任务的最高优先级是通过FreeRTOSConfig.h中的configMAX_PRIORITIES 进行配置的 用户实际可以使用的优先级范围是0- configMAX_PRIORITIES -1,比如我们在此定义为5 那么用户可以使用优先级号 0,1,2,3,4,不包含5,数值越大优先级越高
2.建议用户配置configMAX_PRIORITIES 的最大值不要超过32,用户可以使用的范围0-31,根据实际应用配置,配置越大,需要的内存空间越大

上述只是拿5 作为例子 实际上看了其他人写的 文章 大家搜索之后对应下面配置的中断优先级的配置为5会存在疑惑。

优先级分配方案:
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 。这样可以提高系统的实时响应能力,即其他的外部中断可以及时的得到响应。