RT-Thread 断言:assertion failed at function:rt_mutex_take 等

2023-11-05

断言

断言是什么?https://www.cnblogs.com/thisway/p/5558914.html

“ASSERT ()是一个调试程序时经常使用的宏,在程序运行时它计算括号内的表达式,如果表达式为FALSE (0), 程序将报告错误,并终止执行。如果表达式不为0,则继续执行后面的语句。这个宏通常原来判断程序中是否出现了明显非法的数据,如果出现了终止程序以免导致严重后果,同时也便于查找错误。”

 问题描述

1、互斥量获取时-断言

2、信号量释放时-断言

assertion failed at function:rt_sem_release

3、事件集获取时-断言

(rt_object_get_type(&event->parent.parent) == RT_Object_Class_Event) assertion failed at function:rt_event_recv

4、Timer脱离时-断言

(rt_object_get_type(&timer->parent) == RT_Object_Class_Timer) assertion failed at function:rt_timer_detach

..........

原因

1、可能使用的对象可能未进行初始化或创建 。如 信号量、互斥量、事件集........等。

比如 错误用法:

//错误用法:未初创建信号量,直接 释放/获取 该信号量,此时就会发生断言
static rt_sem_t dynamic_sem = RT_NULL;

rt_sem_release(dynamic_sem);
result = rt_sem_take(dynamic_sem, RT_WAITING_FOREVER);

正确用法:

/* ok用法:创建信号量后,再 释放/获取 该信号量 */ 
static rt_sem_t dynamic_sem = RT_NULL;
dynamic_sem = rt_sem_create("dsem", 0, RT_IPC_FLAG_FIFO);   //创建

rt_sem_release(dynamic_sem);
result = rt_sem_take(dynamic_sem, RT_WAITING_FOREVER);

有时候明明已经初始化或者创建了,依旧断言错误,这种原因,极有可能是初始化或者创建的动作 晚于 使用的动作了,检查下裸机顺序就没问题。

2、内存越界、内存溢出

如果并非第一种原因,那么很有可能就是内存越界/内存溢出,就需要当事人自己调试检查了

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

RT-Thread 断言:assertion failed at function:rt_mutex_take 等 的相关文章

  • 关于“ErrorFlash Download failed“Cortex-M3”的解决办法

    首先 xff0c 将仿真器连接电脑 xff0c 然后打开KEIL xff0c 点击FLash gt Erase xff0c 擦除Flash试一下 如果擦除不成功 xff0c 那么应该是的STM32的Flash被锁了 xff0c 要解锁一下
  • rt-thead-studio 中实现 MPU6050基于DMP中断读取数据

    rt thead studio 中实现 MPU6050基于DMP中断读取数据 目录 文章目录 rt thead studio 中实现 MPU6050基于DMP中断读取数据 目录 toc 前言 mpl高级特性库问题 一 基于开发板创建闪灯工程
  • rt-thread系列文章目录

    rt thread系列文章目录 本文是rt thread系列文章目录 后续关于rt thread的更新都会添加到此文内 实战篇 rt thread 生成工程模板 rt thread fal移植 内核篇 rt thread 内存管理 内存堆
  • RT-Thread中AT组件连接ESP8266 模块

    应用 AT 组件连接 ESP8266 模块 本文介绍 智龙开发板 应用AT组件 连接 esp8266 模块 从而连接无线网络 参考官网 应用 AT 组件连接 ESP8266 模块 1 首先去除 lwip 2 连接硬件模块 连接到智龙开发板的
  • STM32F4 RTC-Alarm 的使用(RT-Thread操作系统)

    文章目录 1 工程的创建和配置 1 1 CubeMX 的配置 1 1 1 时钟源的选择 1 1 2 Debug 引脚配置 1 1 3 控制台串口的配置 1 1 4 RTC的配置 1 1 5 时钟树配置 1 1 6 代码生成 1 2 RT T
  • 内核7-线程间同步

    目录 1 信号量 1 1 信号量机制 1 2 信号量的使用场合 1 2 1 线程同步 1 2 2 锁 1 2 3 中断与线程的同步 1 2 4 资源计数 1 3 信号量控制块 1 4 函数 1 4 1 rt sem init 函数 1 4
  • RT-Thread记录(八、理解 RT-Thread 内存管理)

    RT Thread内核的我们已经基本都学习过了 除了基本的线程操作和通信 内核部分还有内存管理和中断处理 本文主要就来说说内存管理相关问题 目录 前言 一 为什么要内存管理 二 RT Thread 内存堆管理 2 1 RT Thread 内
  • RT-Thread 应用篇 — 在STM32L051上使用 RT-Thread (二、无线温湿度传感器 之 CubeMX配置)

    应用篇 在STM32L051上使用RT Thread 第二篇 使用STM32CubeMX 进行对应外设配置 同时做一些简单测试 目录 前言 一 使用 STM32CubeMX 配置 1 1 基础步骤 1 2 修改配置 1 3 踩坑记录 二 初
  • RTThread:静态线程&动态线程

    一 静态线程创建 rt thread init rt err t rt thread init struct rt thread thread const char name void void parameter entry void p
  • 断言语法disable iff

    full write assert property posedge clk i disable iff rst ni full o gt push i else fatal 1 Trying to push new data althou
  • 基于stm32驱动bh1750光照传感器的一种超简单的编程方法

    基于stm32驱动bh2750光照传感器的一种超简单的编程方法 目录 基于stm32驱动bh1750光照传感器的一种超简单的编程方法 前言 一 搭载RT thread需要的环境 二 获取RT thread官方源码 并新建一个工程 三 下载b
  • 【GCC-RT-Thread】gcc交叉编译 STM32 - RT-Thread

    GCC RT Thread gcc交叉编译 STM32 RT Thread 最近在公司实习 公司想将原来在Windows keil上开发的项目移到Linux 并上RTT操作系统 最近就被安排做了这件事 首先 下载 RT Thread Nan
  • rt-thread中使用WebClient WebNet总结 http学习

    HTTP学习资料 1 需求背景 WebClient主要用来传输文件 WebNet用来支持cgi接口 需要支持get post put delete方式 2 webnet中使用 2 1 webnet存在问题 2 11 rt thread 使用
  • rttread-nano 使用记录:rt_kprintf函数格式化打印无法左对齐

    rttread nano 使用记录 rt kprintf函数格式化打印无法左对齐 今天用rt kprintf函数打印输出一个表格 为了表格好看每一列我都使用格式化参数 负号符号设置为了左对齐 但是发现无法打印 也无法打印浮点数 换成微库的p
  • RT-Thread记录(七、IPC机制之邮箱、消息队列)

    讲完了线程同步的机制 我们要开始线程通讯的学习 线程通讯中的邮箱消息队列也属于 RT Thread 的IPC机制 目录 前言 一 邮箱 1 1 邮箱控制块 1 2 邮箱操作 1 2 1 创建和删除 1 2 2 初始化和脱离 1 2 3 发送
  • RT-Thread 内核基础(四)

    自动初始化机制 自动初始化机制是指初始化函数不需要被显示调用 只需要在函数定义处通过宏定义的方式进行申明 就会在系统启动过程中被执行 例如在串口驱动中调用一个宏定义告知系统初始化需要调用的函数 代码如下 int rt hw usart in
  • 断言接口的类型

    在一般情况下 我无法优雅地将图像的像素作为数组获取 f err os Open imgPath check err defer f Close img err image Decode bufio NewReader f check err
  • Python 的“unittest”缺少“assertHasAttr”方法,我应该使用什么来代替?

    在众多的断言方法中Python的标准unittest package https docs python org 3 library unittest html assertHasAttr 奇怪的是缺席了 在编写一些单元测试时 我遇到了一种
  • Java 中的断言是什么以及何时应该使用它们?

    有哪些现实生活中的例子了解Java的关键作用assert关键词 断言 http docs oracle com javase specs jls se8 html jls 14 html jls 14 10 通过assert关键字 是在 J
  • 在这种情况下溢出意味着什么?

    我找到了一种以模数相乘的算法 下一个伪代码取自维基百科 页面模指数 部分从右到左的二进制方法 完整的伪代码是 function modular pow base exponent modulus Assert modulus 1 modul

随机推荐