freeRTOS出现任务卡死的情况。

2023-11-16

最近在做一个产品二代升级的项目,代码是上一任工程师留下的,很多BUG,而且融合了HAL库和LL库,以及github上下载的GSM源码,很不好用。

我这边是将2G模块换成了4G,且添加了单独的BLE模块。因此只在源码的基础上,去除2G和BLE代码部分,添加新的4G和BLE代码。

整个freeRTOS工程项目创建了4个task任务。

我是先修改了BLE任务,修改完毕后运行正常;然后一步一步添加新的4G任务代码。发现只添加4G初始化代码,4个任务都正常,但是添加业务功能代码的时候,4个任务都卡死了(一运行就立即卡死)。

 

解决方法:

1.先查看代码是否在任务调度开始前调用了系统延时函数,最后调查结果正常。

2.其次开始屏蔽4G业务代码运行,看看屏蔽哪里会使任务正常,最后发现在操作某个数组(即使是printf打印数据)的时候,导致4个任务全卡死,该数组为局部变量。

3.经过查找,发现在该任务之外的c文件中,定义了一个同名的全局数组。将该数组更改后,目前4个任务都能正常运行。

 

后续:

1.正常运行一段时间后,任务再次全部卡死。(有待解决)

 

解决方法:

1.单独运行4G任务,正常。

2.进行单步调试,发现是HardFault_Handler错误。找到出错的地方,尝试把函数里的局部变量数组改成全局变量,修改后程序正常。(好像是函数可重入的问题,但是我感觉不像,应该是堆栈溢出造成的,但是我的堆栈已经设置的很大了,有人知道答案的话请评论告诉我,谢谢)

 

最新更新:

1.今日闲来无事,重新阅读freeRTOS系统文档,总结出上述问题的原因:每个任务都有自己的堆栈(我是使用静态方法创建的task),由于我在任务属性初始化的时候分配的堆栈较小,而任务局部变量占用的内存过大,导致出错。(我在第二步修改的堆栈是单片机总堆栈大小,而非任务堆栈)

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

freeRTOS出现任务卡死的情况。 的相关文章

  • FreeRTOS系列

    1 多任务系统 1 1 前后台系统 单片机裸机开发时 一般都是在main函数里面用while 1 做一个大循环来完成所有的处理 循环中调用相应的函数完成所需的处理 有时也需要在中断中完成一些处理 相对于多任务系统而言 这就是单人单任务系统也
  • 详解FreeRTOS中的软件定时器

    软件定时器用于让某个任务定时执行 或者周期性执行 比如设定某个时间后执行某个函数 或者每隔一段时间执行某个函数 由软件定时器执行的函数称为软件定时器的回调函数 参考资料 Mastering the FreeRTOS Real Time Ke
  • 【FreeRTOS】多任务创建

    作者主页 凉开水白菜 作者简介 共同学习 互相监督 热于分享 多加讨论 一起进步 专栏资料 https pan baidu com s 1nc1rfyLiMyw6ZhxiZ1Cumg pwd free 点赞 收藏 再看 养成习惯 订阅的粉丝
  • 【FreeRTOS开发问题】FreeRTOS内存溢出

    FreeRTOS内存溢出 如下图所示 FreeRTOS编译完成后可以看到 系统提示无法分配内存到堆 Objects Template axf Error L6406E No space in execution regions with A
  • freertos---软定时器

    一 软件定时器介绍 freeRTOS软件定时器的时基是基于系统时钟节拍实现的 可以创建很多个 在硬件定时器资源不充足的情况下非常有用 软件定时器一般用作周期性地执行函数 在创建软件定时器时指定软件定时器的回调函数 在回调函数中实现相应的功能
  • 【FreeRTOS】队列的使用

    作者主页 凉开水白菜 作者简介 共同学习 互相监督 热于分享 多加讨论 一起进步 专栏资料 https pan baidu com s 1nc1rfyLiMyw6ZhxiZ1Cumg pwd free 点赞 收藏 再看 养成习惯 订阅的粉丝
  • FreeRTOS临界区

    FreeRTOS临界区是指那些必须完整运行 不能被打断的代码段 比如有的外设的初始化需要严格的时序 初始化过程中不能被打断 FreeRTOS 在进入临界区代码的时候需要关闭中断 当处理完临界区代码以后再打开中断 FreeRTOS 系统本身就
  • 【FreeRTOS(三)】任务状态

    文章目录 任务状态 任务挂起 vTaskSuspend 取消任务挂起 vTaskResume 挂起任务调度器 vTaskSuspendAll 取消挂起任务调度器 xTaskResumeAll 代码示例 任务挂起 取消任务挂起 代码示例 挂起
  • FreeRTOS_中断

    传送门 博客汇总帖 传送门 Cortex M3 中断 异常 传送门 Cortex M3笔记 基础 笔记内容参考 正点原子的FreeRTOS开发手册 cortex m3权威指南 Cortex M3和Cortex M4权威指南等 文中stm32
  • 基于HAL库的FREERTOS-----------三.队列

    一 队列简介 在实际的应用中 常常会遇到一个任务或者中断服务需要和另外一个任务进行 沟通交流 这个 沟通交流 的过程其实就是消息传递的过程 在没有操作系统的时候两个应用程序进行消息传递一般使用全局变量的方式 但是如果在使用操作系统的应用中用
  • freertos————互斥锁

    线程安全 多线程程序处于一个多变的环境 可访问的全局变量和堆数据随时可能被其他的线程改变 多个线程同时访问一个共享数据 可能造成严重的后果 出现问题的是之前移植了一个freemodbus的从站 多个任务访问全局变量保持寄存器区 导致最后读出
  • FreeRTOS死机原因

    1 中断回调函数中没有使用中断级API xxFromISR 函数 xSemaphoreGiveFromISR uart busy HighterTask 正确 xSemaphoreGive uart busy 错误 2 比configMAX
  • 【FreeRTOS 事件】任务通知事件

    普通任务通知事件创建创建及运行 参阅安富莱电子demo define BIT 0 1 lt lt 0 define BIT 1 1 lt lt 1 static TaskHandle t xHandleTaskUserIF NULL sta
  • FreeRTOS轻量级同步--任务通知

    1 简介 在FreeRTOS的配置参数中的configUSE TASK NOTIFICATIONS宏打开 一般RTOS会默认打开 如图1所示 图1 notify宏开关 RTOS在创建任务时 会创建一个32位的通知值ulNotifiedVal
  • FreeRTOS临界段

    1 临界段 在访问共享资源时不希望被其他任务或者中断打断的代码 这段要执行的代码称为临界段代码 2 设置临界段的目的 保护共享资源 例如 全局变量 公共函数 不可重入函数 函数里面使用 了一些静态全局变量 malloc 等 保护外设的实时性
  • STM32 Freertos 添加 外部sram heap_5.c

    1 添加外部SRAM 初始化 2 添加heap 5 c 3 初始化heap 5 c 外部堆栈 Define the start address and size of the two RAM regions not used by the
  • FreeRTOS 匈牙利表示法 [重复]

    这个问题在这里已经有答案了 我是 RTOS 和 C 编程的新手 而且我仍在习惯 C 的良好实践 因此 我打开了一个使用 FreeRTOS 的项目 我注意到操作系统文件使用匈牙利表示法 我知道一点符号 但面临一些新的 标准 FreeRTOS
  • GNU Arm Cortex m4 上的 C++ 异常处理程序与 freertos

    2016 年 12 月更新现在还有一个关于此行为的最小示例 https community nxp com message 862676 https community nxp com message 862676 我正在使用带有 free
  • 哪些变量类型/大小在 STM32 微控制器上是原子的?

    以下是 STM32 微控制器上的数据类型 http www keil com support man docs armcc armcc chr1359125009502 htm http www keil com support man d
  • 当 Cortex-M3 出现硬故障时如何保留堆栈跟踪?

    使用以下设置 基于 Cortex M3 的 C gcc arm 交叉工具链 https launchpad net gcc arm embedded 使用 C 和 C FreeRtos 7 5 3 日食月神 Segger Jlink 与 J

随机推荐

  • Matlab实战系列(一)——一些常用的绘图语句

    之前一直用Python的matplotlib pyplot包画图 很少用matlab 这次作业想用一下发现很多调整画图版式的函数都不太会用 网上系统一点的代码也不多 于是写一篇这个记录一下 母函数plot plot lambda R col
  • python---三元表达式

    三元表达式适用于二选一的场景 其结构为 值1 if 条件 else 值2 条件如果成立则使用值1 if前面的数据 条件如果不成立则使用值2 else后面的数据 写一个电影系统 需要决定电影是否收费 is change input 是否收费
  • 动手深度学习13:计算机视觉——语义分割、风格迁移

    文章目录 一 语义分割 1 1 语义分割简介 1 2 Pascal VOC2012 语义分割数据集 1 2 1下载 读取数据集 1 2 2 构建字典 RGB颜色值和类名互相映射 1 2 3 数据预处理 1 2 4 整合所有组件 读取Pasc
  • 栈的原理以及应用(制作一个简单的计算器)

    说在前面 其实有一段时间没有更新了 主要是这段时间学习了很多很多的新东西 现在也渐渐做一些整理 栈 stack 1 基础介绍 1 栈是一种先入后出 FILO 的有序列表 2 栈是限制线性表中元素插入和删除只能在线性表同一侧进行的一种特殊线性
  • STM32G031 HAL库TIM2 PWM使用 占空比可调

    废话不多直接上代码 void HAL TIM MspPostInit GPIO InitTypeDef GPIO InitStruct 0 HAL RCC GPIOA CLK ENABLE GPIO InitStruct Pin GPIO
  • 飞凌RZ/G2L的开发板实上的时视频编码推流设计与实现

    飞凌RZ G2L的开发板测评 实时视频编码推流设计与实现 大信 QQ 8125036 在完成RZ G2L板上视频采集的试用测试基础上 逐渐熟悉了RZ G2L开发板的SDK 在研究过它的音视频硬件与软件包后 想进一步利用该开发板做音视频的深度
  • YOLOv5算法原理与网络结构

    YOLOv5算法原理与网络结构 1 1 YOLOv5算法 YOLOv5算法共有4种网络结构 分别是YOLOv5s YOLOv5m YOLOv5l和YOLOv5x 这四种网络结构在宽度和深度上不同 原理上基本一样 接下来以 YOLOv5s 为
  • 【MySQL】 Linux平台MySQL安装

    Linux平台MySQL安装 太淦了 Linux平台MySQL安装 方式1 使用包管理器进行自动安装 方式2 编译源代码安装 1 下载源代码 1 1在 官网 https dev mysql com downloads mysql 下载源代码
  • 黑盒测试靶机(cmcc)以及对应系统加固方案

    目录 一 信息收集 二 进入web界面 三 redis 6379连接 四 连接蚁剑成功 这是个沙箱 五 redis入手 使用密钥连接 六 尝试docker越狱 七 针对docker进行入侵排查 从系统层面 1 检查进程 2 木马样本可以保留
  • 高通MDM平台-ChargeIC

    Charge IC 是负责管理外部供电以及电池充放电 在MDM平台上采用的是比较便宜的ChargeIC MP2617 其作用也仅限于控制对电池充放电 下面就简单的介绍下内核中关于chargeIC的驱动 以及dts配置 内核DTS 关于cha
  • python中close函数的用法_python中调用open函数打开文件,使用close函数关闭文件,调用什么函数可以实现对文件内容的读取。...

    参考答案如下 中调范仲淹任杭州太守时 遭遇饥荒 他采取的方式是 函e函函数茶多酚 TP 主要包括 数打使用数关什实现茶多酚的主要作用是 开文茶在植物学上的分类位置属于 件内茶多酚对人体的功效 茶太烫时不要用嘴去吹 闭文为了快速冷却你可以用另
  • 成员内部类、静态内部类、局部内部类、匿名内部类的精髓与应用

    目录 1 成员内部类 坐拥外部类 1 1 定义和使用 1 2 优势 2 静态内部类 悠然独立 2 1 定义和使用 2 2 优势 3 局部内部类 精巧隐藏 3 1 定义和使用 3 2 优势 4 匿名内部类 神秘而优雅 4 1 定义和使用 4
  • Java-使用线程池创建多线程

    Java 使用线程池创建多线程 1 概念 提前创建好多个线程 放入线程池总 使用时直接获取 使用完后放入池中 可以避免频繁创建销毁 实现重复利用 corePoolSize 核心池的大小 maximumPoolSize 最大线程数 keepA
  • Angular-组件

    Angular 组件 一 组件是Angular应用的主要构造块 组件包括 1 一个HTML模板 用于声明页面要渲染的内容 2 一个用于定义行为的TypeScript的类 3 一个CSS选择器 定义组件在模板中的使用方式 4 要应用在模板上的
  • 配置Log4j(很详细)

    来自 http www blogjava net zJun archive 2006 06 28 55511 html Log4J的配置文件 Configuration File 就是用来设置记录器的级别 存放器和布局的 它可接key va
  • 机器学习sklearn之贝叶斯网络实战(一)

    贝叶斯网络 贝叶斯网络 信念网络 贝叶斯模型或概率定向无环图形模型是一种概率图形模型 一种统计模型 通过有向无环图 DAG 表示一组随机变量及其条件依赖关系 当我们想要表示随机变量之间的因果关系时 主要使用贝叶斯网络 贝叶斯网络使用条件概率
  • linux查看某天的日志,LINUX查看某段时间的日志

    其一 sed 截选时间段日志 sed n 开始时间 结束时间 p 日志文件 使用sed命令如下 sed n 2020 05 04 09 25 55 2015 05 04 09 28 55 p logfile 这样可以精确地截取出来某个时间段
  • python学习笔记---常用内建模块【廖雪峰】

    常用内建模块 datetime Python处理日期和时间的标准库 datetime表示的时间需要时区信息才能确定一个特定的时间 否则只能视为本地时间 如果要存储datetime 最佳方法是将其转换为timestamp再存储 因为times
  • GD32F303调试小记(九)之FreeRTOS移植

    前言 距离上一次更新GD32系列的文章已经过了一年有余 按照之前的想法 仅仅介绍到GD32中常用的模块就结束了 在后续的开发中 有幸再次能使用这颗IC作为主控 所以既为了自己做个随笔 也为方便各位同行或是同学借鉴 这段时间我会编写几篇文章主
  • freeRTOS出现任务卡死的情况。

    最近在做一个产品二代升级的项目 代码是上一任工程师留下的 很多BUG 而且融合了HAL库和LL库 以及github上下载的GSM源码 很不好用 我这边是将2G模块换成了4G 且添加了单独的BLE模块 因此只在源码的基础上 去除2G和BLE代