尧图网络 高端网站定制 · 原创设计
免费咨询热线
400-888-6620
免费获取方案
FreeRTos 正点原子 笔记(2):解读 FreeRTOSConfig . h;函数名前缀 v x u 等;port 代表移植层,平台适配层;configTOTAL_HEAP_SIZE 的内存管理
(6FreeRTOSConfig.h 配置文件作用(7)还是老师例题里的版本 F429加上老师的讲解#ifndefFREERTOS_CONFIG_H#defineFREERTOS_CONFIG_H/* 头文件 */#include./SYSTEM/sys/sys.h#include./SYSTEM/usart/usart.h#includestdint.hexternuint32_tSystemCoreClock;/* 基础配置项 */#defineconfigUSE_PREEMPTION1/* 1: 抢占式调度器, 0: 协程式调度器, 无默认需定义 */#defineconfigUSE_PORT_OPTIMISED_TASK_SELECTION1/* 1: 使用硬件计算下一个要运行的任务, 0: 使用软件算法计算下一个要运行的任务, 默认: 0 */// 软件方式可以做到程序的通用c 语言实现。硬件方式快一些。 stm32 支持硬件方式#defineconfigUSE_TICKLESS_IDLE0/* 1: 使能tickless低功耗模式, 默认: 0 */// 默认不使能低功耗模式// 主动把这个心跳关掉让 CPU 安心睡个长觉不被 tick 频繁吵醒。所以是暂时关闭 tick 计数#defineconfigCPU_CLOCK_HZSystemCoreClock/* 定义CPU主频, 单位: Hz, 无默认需定义 */// #define SYSCLK_FREQ_72MHz 72000000// uint32_t SystemCoreClock SYSCLK_FREQ_72MHz 或 SYSCLK_FREQ_HSE 等见system_stm32f10x.c#defineconfigSYSTICK_CLOCK_HZ(configCPU_CLOCK_HZ/8)// 9000000/* 定义 SysTick 时钟频率当 SysTick 时钟频率与内核时钟频率不同时才可以定义, 单位: Hz, 默认: 不定义 *///本宏只在 F1 里在 F4 F7 里是关闭的。//这也是本头文件在 F1 与 F47 之间的唯一区别。#defineconfigTICK_RATE_HZ1000/* 定义系统滴答时钟节拍频率, 单位: Hz, 无默认需定义 */#defineconfigMAX_PRIORITIES32/* 定义最大优先级数, 最大优先级 configMAX_PRIORITIES - 1 31 , 无默认需定义 */#defineconfigMINIMAL_STACK_SIZE128/* 定义空闲任务的栈空间大小, 单位: Word128 * 4 512 字节, 无默认需定义 */#defineconfigMAX_TASK_NAME_LEN16/* 定义任务名最大字符数, 默认: 16 */#defineconfigUSE_16_BIT_TICKS0// 0 默认是 32 bit/* 1: 定义系统时钟节拍计数器的数据类型为 16 位无符号数, 无默认需定义 */#defineconfigIDLE_SHOULD_YIELD1/* 1: 使能在抢占式调度下,同优先级的任务能抢占空闲任务, 默认: 1 */// 空闲任务的优先级是 0但本处约定同级的自定义任务依然可以抢占空闲任务#defineconfigUSE_TASK_NOTIFICATIONS1/* 1: 使能任务间直接的消息传递,包括信号量、事件标志组和消息邮箱, 默认: 1 */#defineconfigTASK_NOTIFICATION_ARRAY_ENTRIES1/* 定义任务通知数组的大小, 默认: 1 只有一个元素的数组*/#defineconfigUSE_MUTEXES1/* 1: 使能互斥信号量, 默认: 0 */#defineconfigUSE_RECURSIVE_MUTEXES1/* 1: 使能递归互斥信号量, 默认: 0 */#defineconfigUSE_COUNTING_SEMAPHORES1/* 1: 使能计数信号量, 默认: 0 */#defineconfigUSE_ALTERNATIVE_API0/* 已弃用!!! */#defineconfigQUEUE_REGISTRY_SIZE8/* 定义可以注册的信号量和消息队列的个数, 默认: 0 */#defineconfigUSE_QUEUE_SETS1/* 1: 使能队列集, 默认: 0 */#defineconfigUSE_TIME_SLICING1/* 1: 使能时间片调度, 默认: 1 */// 意思是同优先级的任务就可以轮流执行了#defineconfigUSE_NEWLIB_REENTRANT0/* 1: 任务创建时分配 Newlib 的重入结构体, 默认: 0 */#defineconfigENABLE_BACKWARD_COMPATIBILITY0/* 1: 使能兼容老版本, 默认: 1 */// 不兼容意思是只使用新版本的 API 函数#defineconfigNUM_THREAD_LOCAL_STORAGE_POINTERS0/* 定义线程本地存储指针的个数, 默认: 0 */#defineconfigSTACK_DEPTH_TYPEuint16_t/* 定义任务堆栈深度的数据类型, 默认: uint16_t */#defineconfigMESSAGE_BUFFER_LENGTH_TYPEsize_t/* 定义消息缓冲区中消息长度的数据类型, 默认: size_t *//* 内存分配相关定义 这里是只使用动态申请禁止了静态申请*/#defineconfigSUPPORT_STATIC_ALLOCATION0/* 1: 支持静态申请内存, 默认: 0 */#defineconfigSUPPORT_DYNAMIC_ALLOCATION1/* 1: 支持动态申请内存, 默认: 1 */#defineconfigTOTAL_HEAP_SIZE((size_t)(10*1024))/* FreeRTOS 堆中可用的 RAM 总量, 单位: Byte, 无默认需定义。总的堆大小对应于上面的动态申请*/// 所有任务的堆内存都从这里来#defineconfigAPPLICATION_ALLOCATED_HEAP0/* 1: 用户手动分配 FreeRTOS 内存堆(ucHeap), 默认: 0 。意思是让编译器自己分配*/#defineconfigSTACK_ALLOCATION_FROM_SEPARATE_HEAP0/* 1: 用户自行实现任务创建时使用的内存申请与释放函数, 默认: 0 */// 意思是用 freertos 提供的那俩内存申请与释放函数/* 钩子函数相关定义 */// 所谓钩子函数就是回调函数。但钩子函数里的内容由用户自定义#defineconfigUSE_IDLE_HOOK0/* 1: 使能空闲任务钩子函数, 无默认需定义 */#defineconfigUSE_TICK_HOOK0/* 1: 使能系统时钟节拍中断钩子函数, 无默认需定义 */#defineconfigCHECK_FOR_STACK_OVERFLOW0/* 1: 使能栈溢出检测方法1; 2: 使能栈溢出检测方法2; 默认: 0 不使能堆栈检测*/#defineconfigUSE_MALLOC_FAILED_HOOK0/* 1: 使能动态内存申请失败钩子函数, 默认: 0 */#defineconfigUSE_DAEMON_TASK_STARTUP_HOOK0/* 1: 使能定时器服务任务首次执行前的钩子函数, 默认: 0 *//* 运行时间和任务状态统计相关定义 */#defineconfigGENERATE_RUN_TIME_STATS0/* 1: 使能任务运行时间统计功能, 默认: 0 */#ifconfigGENERATE_RUN_TIME_STATS// 就在上面。 #if 是失效的不使能任务运行时间统计功能#include./BSP/TIMER/btim.h#defineportCONFIGURE_TIMER_FOR_RUN_TIME_STATS()ConfigureTimeForRunTimeStats()externuint32_tFreeRTOSRunTimeTicks;#defineportGET_RUN_TIME_COUNTER_VALUE()FreeRTOSRunTimeTicks#endif#defineconfigUSE_TRACE_FACILITY1/* 1: 使能可视化跟踪调试, 默认: 0 */#defineconfigUSE_STATS_FORMATTING_FUNCTIONS1/* 1: configUSE_TRACE_FACILITY 为 1 时会编译 vTaskList() 和 vTaskGetRunTimeStats() 函数, 默认: 0 */// vTaskList() 会获取任务信息如堆栈大小、任务编号与名字等。// vTaskGetRunTimeStats() 函数获取任务的运行时间/* 协程相关定义 */#defineconfigUSE_CO_ROUTINES0/* 1: 启用协程, 默认: 0 */#defineconfigMAX_CO_ROUTINE_PRIORITIES2/* 定义协程的最大优先级, 最大优先级 configMAX_CO_ROUTINE_PRIORITIES - 1, 无默认 configUSE_CO_ROUTINES 为 1 时需定义 *//* 软件定时器相关定义 */#defineconfigUSE_TIMERS1/* 1: 使能软件定时器, 默认: 0 */#defineconfigTIMER_TASK_PRIORITY(configMAX_PRIORITIES-1)// 32 - 1 31/* 定义软件定时器任务的优先级, 无默认。 configUSE_TIMERS 为 1 时需定义 */// 看来优先级很高#defineconfigTIMER_QUEUE_LENGTH5/* 定义软件定时器命令队列的长度, 无默认。configUSE_TIMERS 为 1 时需定义 */#defineconfigTIMER_TASK_STACK_DEPTH(configMINIMAL_STACK_SIZE*2)// 将是 1024 字节·/* 定义软件定时器任务的栈空间大小, 无默认。configUSE_TIMERS 为 1 时需定义 *//* 可选函数, 1: 使能。 使能后该函数才可以被使用*/#defineINCLUDE_vTaskPrioritySet1/* 设置任务优先级 */#defineINCLUDE_uxTaskPriorityGet1/* 获取任务优先级 */#defineINCLUDE_vTaskDelete1/* 删除任务 */#defineINCLUDE_vTaskSuspend1/* 挂起任务 */#defineINCLUDE_xResumeFromISR1/* 恢复在中断中挂起的任务 */#defineINCLUDE_vTaskDelayUntil1/* 任务绝对延时 */#defineINCLUDE_vTaskDelay1/* 任务延时 */#defineINCLUDE_xTaskGetSchedulerState1/* 获取任务调度器状态 */#defineINCLUDE_xTaskGetCurrentTaskHandle1/* 获取当前任务的任务句柄 */#defineINCLUDE_uxTaskGetStackHighWaterMark1/* 获取任务堆栈历史剩余最小值 */#defineINCLUDE_xTaskGetIdleTaskHandle1/* 获取空闲任务的任务句柄 */#defineINCLUDE_eTaskGetState1/* 获取任务状态 */#defineINCLUDE_xEventGroupSetBitFromISR1/* 在中断中设置事件标志位 */#defineINCLUDE_xTimerPendFunctionCall1/* 将函数的执行挂到定时器服务任务 */#defineINCLUDE_xTaskAbortDelay1/* 中断任务延时 */#defineINCLUDE_xTaskGetHandle1/* 通过任务名获取任务句柄 */#defineINCLUDE_xTaskResumeFromISR1/* 恢复在中断中挂起的任务 *//* 中断嵌套行为配置 */#ifdef__NVIC_PRIO_BITS#defineconfigPRIO_BITS__NVIC_PRIO_BITS#else#defineconfigPRIO_BITS4// 似乎是这一行有效。 stm32 只用了 4 个 bit 来管理中断优先级#endif#defineconfigLIBRARY_LOWEST_INTERRUPT_PRIORITY15/* 中断最低优先级 */#defineconfigKERNEL_INTERRUPT_PRIORITY\/* 内核中断的优先级 */(configLIBRARY_LOWEST_INTERRUPT_PRIORITY(8-configPRIO_BITS))#defineconfigLIBRARY_MAX_SYSCALL_INTERRUPT_PRIORITY5/* FreeRTOS 可管理的最高中断优先级 */#defineconfigMAX_SYSCALL_INTERRUPT_PRIORITY\// 系统调用即 freertos 可管理中断的最高优先级(configLIBRARY_MAX_SYSCALL_INTERRUPT_PRIORITY(8-configPRIO_BITS))#defineconfigMAX_API_CALL_INTERRUPT_PRIORITY\// 宏的名称替换用于新版本中configMAX_SYSCALL_INTERRUPT_PRIORITY/* FreeRTOS 中断服务函数相关定义 给 arm 官方的中断函数换个名字*/// DCD SVC_Handler ; SVCall Handler// DCD PendSV_Handler ; PendSV Handler#definevPortSVCHandlerSVC_Handler#definexPortPendSVHandlerPendSV_Handler// ARM 内核的异常SVC Supervisor Call管理调用PendSV Pending Supervisor Call挂起的管理调用。/* 一句话区分 SVC 和 PendSV 在 FreeRTOS (Cortex‑M) SVC启动调度器第一次切换任务一次性 PendSV后续所有正常的任务上下文切换SysTick、信号量释放等触发延迟切换 顺带对比三个高频 Cortex‑M 异常RTOS 三件套 SVC_HandlerSVC 管理调用 → 首次启动调度 PendSV_Handler挂起管理调用 → 任务上下文切换 SysTick_Handler系统滴答定时器 → RTOS 心跳 tick标记需要切换 *//* 断言 */#definevAssertCalled(char,int)printf(Error: %s, %d\r\n,char,int)#defineconfigASSERT(x)if((x)0)vAssertCalled(__FILE__,__LINE__)/* FreeRTOS MPU 特殊定义 *///#define configINCLUDE_APPLICATION_DEFINED_PRIVILEGED_FUNCTIONS 0//#define configTOTAL_MPU_REGIONS 8//#define configTEX_S_C_B_FLASH 0x07UL//#define configTEX_S_C_B_SRAM 0x07UL//#define configENFORCE_SYSTEM_CALLS_FROM_KERNEL_ONLY 1//#define configALLOW_UNPRIVILEGED_CRITICAL_SECTIONS 1/* ARMv8-M 安全侧端口相关定义。 *///#define secureconfigMAX_SECURE_CONTEXTS 5#endif/* FREERTOS_CONFIG_H */8函数名前缀 v x u 等:9port 代表移植层平台适配层10configTOTAL_HEAP_SIZE 的内存管理11谢谢
RELATED

相关推荐

[ZYNQ Linux] VCU使用

[ZYNQ Linux] VCU使用

[ZYNQ Linux] VCU使用 版本:2023.1 VCU概括 VCU是单独的硬核,没有直接挂在PS上,需要PL用相关的IP核进行连接,PS也需要对应的驱动加载内部有单独的MCU,需要PS加载bootloader和应用程序MCU通过AXI接口读取&#xff08…

📅 2026/11/2 11:14:15
从小白到程序员:大模型Agent开发入门指南,抓住2026年蓝海机遇!

从小白到程序员:大模型Agent开发入门指南,抓住2026年蓝海机遇!

本文对比了大模型算法岗与Agent开发岗的异同,指出大模型算法岗薪资高但门槛极高,适合少数顶尖人才;而Agent开发岗则更注重AI工程化落地,适合大多数程序员和初学者,且市场前景广阔,薪资待遇优厚。文章建议关…

📅 2026/11/2 11:14:15
如何构建干部领导力模型?

如何构建干部领导力模型?

干部领导力模型是企业建立干部标准、提升干部管理水平、推动干部队伍建设的重要基础。构建科学有效的领导力模型,关键在于从企业战略和业务需求出发,将优秀干部的成功经验转化为可观察、可评价、可培养的行为标准。 第一步:战略解码&#xff…

📅 2026/11/2 11:14:15
MORE NEWS

更多资讯

📰

实测MiMo2.6Pro:中文指令跟随与长文本抽取亮眼,代码生成仍需把关

1. 先聊聊这台模型火在哪 最近朋友圈被三个字刷屏了:MiMo2.6Pro。准确说,是“国模一哥”这个标签被挂在它头上之后,讨论度一下子上来了。作为常年泡在各种大模型里跑测试的人,我对这种称号本来是不太感冒的,但架不住产…

📰

显式状态驱动的Coding Agent:可审计、可回溯的工程化编码底座

1. 项目概述:这不是又一个“Agent套壳”,而是状态可追溯、行为可审计的工程化编码底座你有没有遇到过这样的情况:写了个自动化脚本,跑着跑着就卡在某个环节,日志里只有一行“task failed”,根本不知道是网络…

📰

ABB C# SDK环境配置实战:RobotStudio、PC SDK与VS版本匹配指南

简介:本资源是面向工业自动化领域开发者与机器人工程师的ABB机器人C#二次开发SDK权威说明文档,聚焦解决基于Windows平台对ABB真实或虚拟控制器进行高级集成与定制化控制的核心需求。文档系统覆盖SDK定位与适用场景、控制器应用开发全流程、开发环境搭建&…

📰

财务共享服务落地五层技术架构与MVP实施路径

简介:本资源是一份面向企业财务数字化转型从业者、集团管控信息化建设人员及共享服务中心规划者的专业级解决方案文档,聚焦财务共享服务落地实践,系统解答如何构建标准化、集约化、服务化的财务集中作业体系。文档由国内知名管理软件厂商久其…

📰

前端竞态问题解析与解决方案

1. 竞态问题本质解析 竞态问题(Race Condition)是计算机科学中一个经典且棘手的问题,它描述的是系统输出结果依赖于不受控制的事件执行顺序或时机。这种情况就像田径赛场上的选手们争夺冠军——最终名次不仅取决于各自速度,更取决…

📰

Java万年历记事本课设:Swing实现日期算法与本地存储

简介:这份JAVA万年历源码面向Java初学者与课程设计实践者,以Swing构建图形界面,将万年历显示与记事本功能合为一体,帮助读者在完整可运行的项目中理解日期时间处理、界面布局与事件驱动编程。源码围绕Calendar与java.time的日期操…

TODAY

今日更新

THIS WEEK

本周精选

THIS MONTH

本月热门

读完文章,想聊聊您的网站?

告诉我们您的行业与需求,资深顾问一对一梳理方案与报价,全程免费。

📞 💬