(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谢谢
企业数字化 ERP 产品动态
相关推荐
[ZYNQ Linux] VCU使用 [ZYNQ Linux] VCU使用
版本:2023.1
VCU概括
VCU是单独的硬核,没有直接挂在PS上,需要PL用相关的IP核进行连接,PS也需要对应的驱动加载内部有单独的MCU,需要PS加载bootloader和应用程序MCU通过AXI接口读取(… · 2026/11/2 11:14:04
从小白到程序员:大模型Agent开发入门指南,抓住2026年蓝海机遇! 本文对比了大模型算法岗与Agent开发岗的异同,指出大模型算法岗薪资高但门槛极高,适合少数顶尖人才;而Agent开发岗则更注重AI工程化落地,适合大多数程序员和初学者,且市场前景广阔,薪资待遇优厚。文章建议关… · 2026/11/5 2:52:32
如何构建干部领导力模型? 干部领导力模型是企业建立干部标准、提升干部管理水平、推动干部队伍建设的重要基础。构建科学有效的领导力模型,关键在于从企业战略和业务需求出发,将优秀干部的成功经验转化为可观察、可评价、可培养的行为标准。 第一步:战略解码ÿ… · 2026/11/2 11:14:04
C++转Java日记(01) 为什么转Java?
因为博主最近想找一段实习,但是博主的背景是只做过游戏开发,会用unity,此外就只会一点C算法竞赛的内容了,其它诸如Java和Go,那是一点不会。而现在我能够投的实习,不少都是后端开… · 2026/11/5 7:59:54
Claude Code 升级后命令行为变了?先用 changelog 和最小项目定位差异 Claude Code 升级后命令行为变了?先用 changelog 和最小项目定位差异
当 Claude Code 升级后权限提示、命令参数或 Hook 行为看起来不同,先不要在正式仓库连续试错。官方 changelog 是确认变化范围的第一入口;然后用一个没有业务密钥的最小目录验证命令和输出。
排查步骤 … · 2026/11/5 7:59:54
Aspen HYSYS 二次开发系列教程(3):VBA 环境启用与第一个宏——默认禁用不是 bug Aspen HYSYS 二次开发系列教程(3):VBA 环境启用与第一个宏——默认禁用不是 bug版本声明块
软件:aspenONE V15(基线,同第 1 篇);文档现实:Customization Guide V7.3&… · 2026/11/5 7:59:54
CRUD程序员也能轻松切入AI大模型赛道,抓住技术变革红利! 随着大厂岗位风向变化,传统后端缩招,大模型应用、AI Agent、RAG开发岗位扩招。本文指出,多年积累的后端功底是切入AI大模型赛道的王牌,无需重新学习深度学习或复杂数学公式。建议从应用层切入,利用熟悉的后端技术栈集成… · 2026/11/5 7:59:54
AI大模型在零售电商的应用:精准营销、智能运营与未来趋势(收藏必备) 本文深入探讨了AI大模型在零售与电商领域的应用,涵盖了用户画像构建、智能推荐系统、库存管理、智能客服、图像识别、店铺选址、供应链优化等多个方面。通过多源数据融合、深度学习、计算机视觉等先进技术,AI大模型能够实现精准的用户行为预测、个性化营… · 2026/11/5 7:59:54
【随笔1102】LangGraph 时间旅行 一、LangGraph是什么
顾名思义,就是一种适用于AI大模型运行的图结构。
你可以在图里声明节点(官方说是超级节点 Super Step)
节点也分为多种类型,比如Agent Node,调用大模型,按照提示词执行;还有… · 2026/11/5 7:58:54
双极步进电机控制实战:DRV8818PWPR与PIC18F86K22驱动调试 /* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/11/4 3:16:49
STM32F207ZG + DRV8818PWPR 步进电机驱动实战解析 /* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/11/4 6:59:29
DRV8818PWPR+dsPIC30F4013工业级双极步进电机控制方案 /* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/11/4 7:02:38
多智能体协作系统架构设计与实践优化 1. 多智能体协作系统的时代背景2017年Transformer架构的诞生彻底改变了人工智能的发展轨迹。当行业还沉浸在单一大模型带来的性能突破时,Anthropic的研究团队已经将目光投向了更前沿的领域——如何让多个智能体通过协作产生超越单体能力的系统智能。这就像交响乐团中… · 2026/11/5 0:00:39
大模型系统性入门实战指南:从原理到部署微调的全链路路线 提到大模型的系统性入门,我先说个结论:这事真不难,难的是资料太散、路线太多,今天这个框架明天那个工具,新人很容易在“收藏夹吃灰”和“教程看到一半放弃”之间反复横跳。市面上关于大模型的内容少说有几十万篇&#… · 2026/11/5 0:00:39
鸿蒙文件系统沙箱机制解析与开发实践 1. 鸿蒙文件系统沙箱机制深度解析作为一名从Android转向鸿蒙开发的工程师,我深刻体会到文件系统访问是迁移过程中最先遇到的"拦路虎"。在Android上运行良好的文件读写代码,在鸿蒙真机环境却频频出现文件写入后神秘消失或直接抛出权限拒绝错误的… · 2026/11/5 0:00:39
双极步进电机控制实战:DRV8818PWPR与PIC18F86K22驱动调试 /* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/11/4 3:16:49
STM32F207ZG + DRV8818PWPR 步进电机驱动实战解析 /* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/11/4 6:59:29
DRV8818PWPR+dsPIC30F4013工业级双极步进电机控制方案 /* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/11/4 7:02:38