FreeRTOS系列---程序正常,但任务无法创建
实验环境
stm32F103RCT6核心板
keil5
vscode
stm32cubemx
使用stm32cubemx
问题现场
void my_task_init(void)
{xTaskCreate(LED1_Task, "LED1_Task", configMINIMAL_STACK_SIZE, NULL, 1, NULL);xTaskCreate(LED2_Task, "LED2_Task", configMINIMAL_STACK_SIZE, NULL, 1, NULL);xTaskCreate(UART_Task, "UART_Task", configMINIMAL_STACK_SIZE, NULL, 4, NULL);xTaskCreate(UART_ReceiveTask, "UART_Receive", configMINIMAL_STACK_SIZE, NULL, 5, NULL);
}
实际创建了四个任务,但是在打印任务列表的时候,第四个任务始终没有出现;打印信息如下所示:

尝试调整堆空间,在FreeRTOSConfig.h文件中修改

调整为10KB;然后继续打印任务列表;发现任务成功创建,并在运行中;
问题分析
分析任务创建不成功,可能有以下几点原因:
1、 内存不足
xTaskCreate(LED1_Task, "LED1_Task", configMINIMAL_STACK_SIZE, NULL, 1, NULL);
xTaskCreate(LED2_Task, "LED2_Task", configMINIMAL_STACK_SIZE, NULL, 1, NULL);
xTaskCreate(UART_Task, "UART_Task", configMINIMAL_STACK_SIZE, NULL, 4, NULL);
xTaskCreate(UART_ReceiveTask, "UART_Receive", 256, NULL, 6, NULL);
最常见的原因是FreeRTOS堆内存不足。你使用了256字节的栈空间,这可能比其他任务大,当FreeRTOS的堆内存配置不足时,任务创建会失败。
2、没有检查返回值
xTaskCreate(UART_ReceiveTask, "UART_Receive", 256, NULL, 6, NULL);veTask, "UART_Receive", 256, NULL, 6, NULL);
if (status != pdPASS) {// 任务创建失败的处理printf("Failed to create UART_ReceiveTask, error: %d\n", status);
}
3、栈空间不足
如果你的UART_ReceiveTask函数包含较复杂的本地变量或调用较深,256字节的栈可能不够用。
4、优先级设置问题
优先级6可能超出了系统配置的最大优先级范围。检查你的FreeRTOSConfig.h中的configMAX_PRIORITIES设置。
5、参数不匹配
代码中其他任务使用void *pvParameters,而UART_ReceiveTask使用void *argument。虽然这不会直接导致创建失败,但建议保持一致性:
// ... 现有代码 ...
BaseType_t status;
status = xTaskCreate(UART_ReceiveTask, "UART_Receive", 256, NULL, 6, NULL);
if (status != pdPASS) {// 任务创建失败的处理printf("Failed to create UART_ReceiveTask, error: %d\n", status);
}
6、配置问题
configMINIMAL_STACK_SIZE可能设置得较小,而UART接收任务需要更多栈空间
解决方案
- 增加FreeRTOS堆内存大小(在FreeRTOSConfig.h中修改configTOTAL_HEAP_SIZE)
- 添加任务创建失败的检查和处理
- 增加栈空间大小(例如从256增加到512或更多)
- 检查并确保优先级在合理范围内
- 统一任务函数参数命名
相关文章:
FreeRTOS系列---程序正常,但任务无法创建
实验环境 stm32F103RCT6核心板 keil5 vscode stm32cubemx 使用stm32cubemx 问题现场 void my_task_init(void) {xTaskCreate(LED1_Task, "LED1_Task", configMINIMAL_STACK_SIZE, NULL, 1, NULL);xTaskCreate(LED2_Task, "LED2_Task", configMINIMA…...
linux应用:errno、perror、open、fopen
errno errno 是一个全局变量,定义在 头文件中。当系统调用(如 open、read、write 等)或库函数执行失败时,会将一个错误码赋值给 errno。不同的错误码代表不同的错误类型,通过检查 errno 的值,可以判断具体…...
物联网中的气象监测设备具备顶级功能
物联网中的气象监测设备具备顶级功能时,通常集成GPS、数据上报和预警系统,以确保精准监测和及时响应。以下是这些功能的详细说明: 1. GPS定位 精准定位:GPS模块提供设备的精确地理位置,确保数据与具体位置关联&#…...
15-YOLOV8OBB损失函数详解
一、YOLO OBB支持的OBB 在Ultralytics YOLO 模型中,OBB 由YOLO OBB 格式中的四个角点表示。这样可以更准确地检测到物体,因为边界框可以旋转以更好地适应物体。其坐标在 0 和 1 之间归一化: class_index x1 y1 x2 y2 x3 y3 x4 y4 YOLO 在内部处理损失和输出是xywhr 格式,x…...
WHAT - 前端异步事件流处理场景梳理
目录 一、典型场景二、解决方案与技术选型1. 基础异步控制2. 状态管理方案3. 复杂任务调度4. 任务取消机制5. 微任务队列优化 三、最佳实践建议四、工具链推荐 前端异步任务流处理是现代Web开发中常见的需求,尤其在复杂业务逻辑、高交互性应用中不可或缺。以下是常见…...
计算机网络软考
1.物理层 1.两个主机之间发送数据的过程 自上而下的封装数据,自下而上的解封装数据,实现数据的传输 2.数据、信号、码元 码元就是数字通信里用来表示信息的基本信号单元。比如在二进制中,用高电平代表 “1”、低电平代表 “0”,…...
安防监控/视频集中存储EasyCVR视频汇聚平台如何配置AI智能分析平台的接入?
EasyCVR安防视频监控平台不仅支持AI边缘计算智能硬件设备的接入,还能快速集成AI智能分析平台,接收来自智能分析平台或设备的AI告警信息,如烟火检测、周界入侵检测、危险区域闯入检测、安全帽/反光衣佩戴检测等。 本文将详细介绍如何在EasyCVR…...
做小程序开发的安全防护全方案
小程序开发安全防护方案 为了确保小程序在开发过程中的安全性,以下是一个全面的防护方案: 1. 需求分析与规划 功能模块分析:明确小程序的功能模块,识别高风险区域如用户登录和支付功能。数据分类分级:将数据分为敏感…...
在Spring Boot项目中导出复杂对象到Excel文件
在Spring Boot项目中导出复杂对象到Excel文件,可以利用Hutool或EasyExcel等库来简化操作。这里我们将详细介绍如何使用Hutool和EasyExcel两种方式来实现这一功能。 使用Hutool导出复杂对象到Excel 首先确保你的pom.xml中添加了Hutool的依赖: <depe…...
从JDBC到数据库连接池:构建高性能Java应用的基石(中篇)
推荐关联阅读:JDBC核心技术解析:从基础连接到ORM演进之路(上) 一、JDBC的困境与连接池的救赎 1.1 传统JDBC的致命缺陷 在Java应用与数据库交互的原始模式中,开发者通过DriverManager.getConnection()获取数据库连接…...
JavaWeb后端基础(6)
主键返回 例子: /** * 新增员工数据 */ Options(useGeneratedKeys true, keyProperty "id") Insert("insert into emp(username, name, gender, phone, job, salary, image, entry_date, dept_id, create_time, update_time) " "value…...
nio多线程版本
多线程多路复用 多线程NIO,,就是多个线程,每个线程上都有一个Selector,,,比如说一个系统中一个线程用来接收请求,,剩余的线程用来读写数据,,每个线程独立干自…...
Electron、Tauri及其它跨平台方案终极对比
Electron、Tauri及跨平台方案终极对比(2025版) 一、核心框架深度解析 1.1 Electron:Web技术的桌面霸主 技术架构 基于Chromium(浏览器内核) Node.js(后端运行时)的双进程架构,支持…...
蓝桥杯试题:二分查找
一、问题描述 给定 n 个数形成的一个序列 a,现定义如果一个连续子序列包含序列 a 中所有不同元素,则该连续子序列便为蓝桥序列,现在问你,该蓝桥序列长度最短为多少? 例如 1 2 2 2 3 2 2 1,包含 3 个不同的…...
MongoDB Chunks核心概念与机制
1. 基础定义 Chunk(块):MongoDB分片集群中数据的逻辑存储单元,由一组连续的片键(Shard Key)范围数据组成,默认大小为64MB(可调整范围为1-1024MB)。数据分…...
决策树(Decision Tree):机器学习中的经典算法
1. 什么是决策树? 决策树(Decision Tree)是一种基于树形结构的机器学习算法,适用于分类和回归任务。其核心思想是通过一系列的规则判断,将数据集不断划分,最终形成一棵树状结构,从而实现预测目…...
高频 SQL 50 题(基础版)_1084. 销售分析 III
高频 SQL 50 题(基础版)_1084. 销售分析 III 思路 思路 select t1.product_id,product_name from Product as t1 join(select product_id,min(sale_date) as min_date,max(sale_date) as max_datefrom Salesgroup by (product_id)having 2019-01-01<…...
Python-selenium启动edge打开百度
文章目录 专栏导读1、背景2、代码总结 专栏导读 🔥🔥本文已收录于《Python基础篇爬虫》 🉑🉑本专栏专门针对于有爬虫基础准备的一套基础教学,轻松掌握Python爬虫,欢迎各位同学订阅,专栏订阅地址…...
网络安全需要掌握哪些技能?
🍅 点击文末小卡片 ,免费获取网络安全全套资料,资料在手,涨薪更快 在这个高度依赖于网络的时代,网络安全已经成为我们工作和生活中不可或缺的一部分,更是0基础转行IT的首选,可谓是前景好、需求大…...
自动扶梯人员摔倒掉落识别检测数据集VOC+YOLO格式5375张2类别
数据集格式:Pascal VOC格式YOLO格式(不包含分割路径的txt文件,仅仅包含jpg图片以及对应的VOC格式xml文件和yolo格式txt文件) 图片数量(jpg文件个数):5375 标注数量(xml文件个数):5375 标注数量(txt文件个数):5375 …...
从零实现富文本编辑器#5-编辑器选区模型的状态结构表达
先前我们总结了浏览器选区模型的交互策略,并且实现了基本的选区操作,还调研了自绘选区的实现。那么相对的,我们还需要设计编辑器的选区表达,也可以称为模型选区。编辑器中应用变更时的操作范围,就是以模型选区为基准来…...
智慧工地云平台源码,基于微服务架构+Java+Spring Cloud +UniApp +MySql
智慧工地管理云平台系统,智慧工地全套源码,java版智慧工地源码,支持PC端、大屏端、移动端。 智慧工地聚焦建筑行业的市场需求,提供“平台网络终端”的整体解决方案,提供劳务管理、视频管理、智能监测、绿色施工、安全管…...
在rocky linux 9.5上在线安装 docker
前面是指南,后面是日志 sudo dnf config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo sudo dnf install docker-ce docker-ce-cli containerd.io -y docker version sudo systemctl start docker sudo systemctl status docker …...
聊聊 Pulsar:Producer 源码解析
一、前言 Apache Pulsar 是一个企业级的开源分布式消息传递平台,以其高性能、可扩展性和存储计算分离架构在消息队列和流处理领域独树一帜。在 Pulsar 的核心架构中,Producer(生产者) 是连接客户端应用与消息队列的第一步。生产者…...
STM32标准库-DMA直接存储器存取
文章目录 一、DMA1.1简介1.2存储器映像1.3DMA框图1.4DMA基本结构1.5DMA请求1.6数据宽度与对齐1.7数据转运DMA1.8ADC扫描模式DMA 二、数据转运DMA2.1接线图2.2代码2.3相关API 一、DMA 1.1简介 DMA(Direct Memory Access)直接存储器存取 DMA可以提供外设…...
MySQL 8.0 OCP 英文题库解析(十三)
Oracle 为庆祝 MySQL 30 周年,截止到 2025.07.31 之前。所有人均可以免费考取原价245美元的MySQL OCP 认证。 从今天开始,将英文题库免费公布出来,并进行解析,帮助大家在一个月之内轻松通过OCP认证。 本期公布试题111~120 试题1…...
MySQL用户和授权
开放MySQL白名单 可以通过iptables-save命令确认对应客户端ip是否可以访问MySQL服务: test: # iptables-save | grep 3306 -A mp_srv_whitelist -s 172.16.14.102/32 -p tcp -m tcp --dport 3306 -j ACCEPT -A mp_srv_whitelist -s 172.16.4.16/32 -p tcp -m tcp -…...
MySQL 部分重点知识篇
一、数据库对象 1. 主键 定义 :主键是用于唯一标识表中每一行记录的字段或字段组合。它具有唯一性和非空性特点。 作用 :确保数据的完整性,便于数据的查询和管理。 示例 :在学生信息表中,学号可以作为主键ÿ…...
电脑桌面太单调,用Python写一个桌面小宠物应用。
下面是一个使用Python创建的简单桌面小宠物应用。这个小宠物会在桌面上游荡,可以响应鼠标点击,并且有简单的动画效果。 import tkinter as tk import random import time from PIL import Image, ImageTk import os import sysclass DesktopPet:def __i…...
用js实现常见排序算法
以下是几种常见排序算法的 JS实现,包括选择排序、冒泡排序、插入排序、快速排序和归并排序,以及每种算法的特点和复杂度分析 1. 选择排序(Selection Sort) 核心思想:每次从未排序部分选择最小元素,与未排…...
