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中的软件定时器

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

    FreeRTOSConfig h系统配置文件中可以自定义 FreeRTOS h中定义默认值 configAPPLICATION ALLOCATED HEAP 默认情况下FreeRTOS的堆内存是由编译器来分配的 将宏configAPPLIC
  • FreeRTOS记录(七、FreeRTOS信号量、事件标志组、邮箱和消息队列、任务通知的关系)

    我们在前面单独介绍过FreeRTOS的任务通知和消息队列 但是在FreeRTOS中任务间的通讯还有信号量 邮箱 事件组标志等可以使用 这篇文章就这些成员与消息队列和任务通知的关系进行说明分析 增加邮箱部分 任务通知发送消息 Demo 202
  • FreeRTOS-内核控制函数

    FreeRTOS 内核控制函数 FreeRTOS中有一些内核函数 一般来说这些内核函数在应用层不会使用 但是内核控制函数是理解FreeRTOS中断的基础 接下来我们逐一分析这些内核函数 taskYIELD 该函数的作用是进行任务切换 这是一
  • FreeRTOS软件定时器创建、复位、开始和停止(备忘)

    目录 一 简介 1 1 开发环境 1 2 摘要 二 STM32CubeIDE配置 三 创建定时器 3 1 头文件声明 3 2 工程文件定义 3 3 创建定时器 3 4 开启 复位 和关闭定时器 四 定时器回调函数 一 简介 1 1 开发环境
  • FreeRTOS学习笔记 6 - 互斥量

    目录 1 创建 2 获取 3 释放 4 测试 FreeRTOS不支持调度方式的设置 所以下面2个宏定义可以随意设置值 define RTOS IPC FLAG FIFO 0x00 define RTOS IPC FLAG PRIO 0x01
  • Freertos中vTaskDelay()是怎么用的

    1 常见的使用场景 void vLED Task void pvParameters while 1 Heartbeat LED vTaskDelay 1000 portTICK RATE MS 说明 上面这段代码的意思是 led翻转后经过
  • STM32移植FreeRTOS的Tips

    转自 http bbs armfly com read php tid 7140 1 在FreeRTOS的demo文件夹中拷贝对应的FreeRTOSConfig h文件后 需要加入一行 define configUSE MUTEXES 1
  • FreeRTOS ------- 任务(task)

    在学习RTOS的时候 个人觉得带着问题去学习 会了解到更多 1 什么是任务 在FreeRTOS中 每个执行线程都被称为 任务 每个任务都是在自己权限范围内的一个小程序 其具有程序入口每个任务都是在自己权限范围内的一个小程序 其具有程序入口通
  • FreeRTOS+CubeMX系列第一篇——初识FreeRTOS

    文章目录 一 关于FreeRTOS 二 FreeRTOS的特点 三 如何在CubeMX上配置FreeRTOS 四 FreeRTOS文档资料 五 同系列博客 一 关于FreeRTOS 1 什么是FreeRTOS FreeRTOS是一个迷你的实
  • 基于HAL库的FREERTOS-----------三.队列

    一 队列简介 在实际的应用中 常常会遇到一个任务或者中断服务需要和另外一个任务进行 沟通交流 这个 沟通交流 的过程其实就是消息传递的过程 在没有操作系统的时候两个应用程序进行消息传递一般使用全局变量的方式 但是如果在使用操作系统的应用中用
  • 基于STM32的FreeRTOS学习之中断测试实验(五)

    记录一下 方便以后翻阅 本章内容是接着上一章节进行的实际演练 1 实验目的 FreeRTOS可以屏蔽优先级低于configMAX SYSCALL INTERRUPT PRIORITY的中断 不会屏蔽高于其的中断 本次实验就是验证这个说法 本
  • FreeRTOS学习笔记(8)---- 软件定时器

    使用FreeRTOS软件定时器需要在文件FreeRTOSConfig h先做如下配置 1 configUSE TIMERS 使能软件定时器 2 configTIMER TASK PRIORITY 定时器任务优先级 3 configTIMER
  • FreeRTOS轻量级同步--任务通知

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

    任务创建和删除API函数位于文件task c中 需要包含task h头文件 task h里面包函数任务的类型函数 例如 对xTaskCreate的调用 通过指针方式 返回一个TaskHandle t 变量 然后可将该变量用vTaskDele
  • FreeRTOS之系统配置

    1 FreeRTOS的系统配置文件为FreeRTOSConfig h 在此配置文件中可以完成FreeRTOS的裁剪和配置 在官方的demo中 每个工程都有一个该文件 2 先说一下 INCLUDE 开始的宏 使用 INCLUDE 开头的宏用来
  • 使用 GCC 编译器的 ARM 内核的堆栈回溯(当存在 MSP 到 PSP 切换时)

    核心 ARM Cortex M4 编译器 GCC 5 3 0 ARM EABI 操作系统 免费 RTOS 我正在使用 gcc 库函数 Unwind Reason Code Unwind Backtrace Unwind Trace Fn v
  • 如何更改 FreeRTOS 中任务的最大可用堆大小?

    我通过以下方式在任务中创建元素列表 l dllist pvPortMalloc sizeof dllist dlllist 有 32 字节大 我的嵌入式系统有 60kB SRAM 所以我希望系统可以轻松处理我的 200 个元素列表 我发现在
  • 防止GCC LTO删除函数

    我使用 GCC ARM Embedded 和 FreeRTOS FreeRTOS具有的功能vTaskSwitchContext 仅在某些情况下使用 内联汇编代码 问题是 当我使用LTO时 GCC不考虑内联汇编代码并认为该函数没有被使用 因此
  • 哪些变量类型/大小在 STM32 微控制器上是原子的?

    以下是 STM32 微控制器上的数据类型 http www keil com support man docs armcc armcc chr1359125009502 htm http www keil com support man d

随机推荐

  • 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代