变量位置不同会死机?郭天祥老师视频的遗留问题分析答案

在郭天祥老师视频里有一个问题分享,是EXMC初始化里的一个变量定义和初始化位置不同会导致程序死机,最终定位到程序是进入hardfault死机,但暂时没有后续分析了,这里我们来继续分析一下。

死机的程序是这样的:

这段代码是定义和初始化exmc的结构体参数,我们来详细看下结构体中的定义,其中有一个关键是这里有两个指针成员,分别是读和写的结构体参数指针。

那我们看下结构体成员初始化函数,其中除了对成员变量赋值了默认参数外,还对读写时序参数结构体指针的成员也赋值了默认参数:

所以这里就是重点,此时这个结构体刚定义完成,因为是局部变量是定义在栈里的,所以初值都是随机值,这个随机值实际可以解释为栈空间上次释放的局部变量值。

当对一个随机值的指针进行赋值会发生什么?三个结果:

1、随机值是非法地址,立刻触发hardfault;

2、随机值是程序实际RAM地址范围外的可写地址,意外操作了寄存器或者无效地址,一次无效操作或开启意外功能;

3、随机值是程序已使用的RAM地址,破坏了这段内存,程序不会立刻触发hardfault,会在CPU使用到该区域时才出现异常。

那我们应该如何调用这个EXMC的结构体初始化呢?其实这里有定义三个结构图,另外两个就是读写的时序结构体的实体,我们定义后先将这两个结构体变量赋值到exmc模式结构体成员的两个指针,此时指针才有了正确地址,调用结构图初始化后就可以把这两个结构体一起完成初始化。

这里的分析很考验大家C语音指针、CPU内存的理解功底,还有什么疑难杂症欢迎大家提供素材。上面分析的正确初始化顺序在红枫派开发板例程中应用,欢迎大家应用到项目中使用。

GD32MCU技术交流群:859440462

更多GD32 MCU相关咨询:单片机开发板_国产mcu视频_GD32 - 苏州聚沃电子科技有限公司

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/22874.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

如何使用 Python 和 Selenium 解决 Cloudflare 验证码

你知道吗?大约 20% 你需要抓取的网站使用 Cloudflare,这是一个强大且不断崛起的反机器人保护系统,可以轻松击败你的努力。如果你正在为 Cloudflare 验证码失败而苦恼,你并不孤单。在每一秒都很重要的世界里,许多人因为…

Mysql的两种安装方式

文章目录 第一种安装方式国内镜像库下载解压安装配置环境变量初始化数据库安装mysql登录mysql设置root密码退出登录假如忘记了密码,重置密码的步骤1、步骤一:停止 MySQL 服务2、步骤二:使用安全模式启动 MySQL3、步骤三:重置密码4…

服务器端Openresty的Lua 脚本动态生成 HTML 页面

使用服务器端的 Lua 脚本来动态生成 HTML 页面,并在生成页面时传递重定向参数。这种方法不涉及客户端 JavaScript,而是在服务器端完成重定向参数的设置。 以下是修改后的示例: # 人机验证页面 location /captcha {default_type text/html;c…

js中的堆栈理解

栈内存空间 栈内存空间 : 就是用栈作为数据结构在内存中所申请的空间。 栈的特点: 后进先出,最后添加进栈的元素最先出。访问栈底元素,必须拿掉它上面的元素。会被提前开辟 堆内存空间 堆内存空间:就是用堆作为数据结构在内存中所申请的空…

Linux 内核优化:提升性能测试效率的关键步骤

大家好,本文介绍了如何通过优化 Linux 内核配置来提高系统性能,特别是在进行性能测试时。从调整文件系统、网络参数到内核参数优化,我们将深入探讨每个关键步骤,以帮助你在性能测试中取得更好的效果。 在进行性能测试时&#xff0…

JVM面试篇(下)

垃圾收集器 简述 Java 垃圾回收机制 在 java 中,程序员是不需要显示的去释放一个对象的内存的,而是由虚拟机自行执行。在 JVM中,有一个垃圾回收线程,它是低优先级的,在正常情况下是不会执行的,只有在虚拟机空闲或者当前堆内存不足时,才会触发执行,扫面那些没有被任何引…

Python | 判断集合成员(set作为哈希表)(集合)

set的概念和特点set的基本操作,比如创建、插入、删除、查找set的常用方法 集合: 也是一种数据结构,和数学中的集合类似,它用 于存储一组不重复的元素,并且不保证元素的顺序。查找通常是集合最重要的操作。 1.可以使用…

筛斗数据:数据治理在企业发展中的关键作用

随着信息技术的飞速发展,数据已成为企业最宝贵的资产之一。在这样的背景下,数据治理作为确保数据质量、可用性、一致性和安全性的过程,其重要性日益凸显。本文将探讨数据治理与企业之间的紧密联系,以及如何通过有效的数据治理策略…

centos安装部署Mysql8详细教程

文章目录 一、下载安装1.下载2.安装 二、常见问题1.You must reset your password using ALTER USER statement before executing this statement2.IP is not allowed to connect to this mysql 结尾 提示:以下是本篇文章正文内容,下面案例可供参考 一、…

JL-8B/1111电流继电器 带板前接线附件 约瑟JOSEF

JL-8系列继电器型号: 电流继电器JL-8GB/11 电流继电器JL-8GA/21 过电流继电器JL-8GB/1 电流继电器JL-8B/521DK 电流继电器JL-8B/222DK 电流继电器JL-8B/1121 电流继电器JL-8B/12 电流继电器JL-8B/3211 电流继电器JL-8B/E2 电流继电器JL-8B/E3 过电流继电器JL-…

Python项目实战 - 简易计算器

Python项目实战 - 简易计算器 引言 在Python编程学习中,项目实战是巩固知识、提升技能的重要途径。本次我们将通过构建一个简易的计算器项目来锻炼Python的基础知识,包括变量、函数、条件语句和输入/输出操作。通过这个项目,你将能够深入理…

YOLOv8改进有效涨点专栏目录——包含backbone、head、neck和损失函数上百余种改进技巧

专栏地址:YOLOv8改进有效涨点——持续更新中 backbone——主干 YOLOv8改进 | 主干网络 | 将主干网络替换为轻量化的ShuffleNetv2【原理 完整代码】 YOLOv8改进 | 主干网络 | 增加网络结构增强小目标检测能力【独家创新——附结构图】 YOLOv8改进 | 主干网络 | 在…

大宋咨询(深圳神秘顾客)关于连锁药店神秘顾客检查的内容

药店作为社会公共卫生体系的重要组成部分,其服务质量和药品管理水平直接关系到公众的健康与安全。为了提升药店的服务质量,确保药品的合规销售,神秘顾客调查作为一种有效的评估手段,逐渐在药店行业中得到广泛应用。大宋咨询&#…

基于三元组一致性学习的单目内窥镜里程计估计

文章目录 TCL: Triplet Consistent Learning for Odometry Estimation of Monocular Endoscope摘要方法实验结果 TCL: Triplet Consistent Learning for Odometry Estimation of Monocular Endoscope 摘要 单目图像中深度和姿态的估计对于计算机辅助导航至关重要。由于很难获…

Kafka消费者api编写教程

1.基本属性配置 输入new Properties().var 回车 //创建属性Properties properties new Properties();//连接集群properties.put(ConsumerConfig.BOOTSTRAP_SERVERS_CONFIG,"node1:9092,node2:9092");//反序列化properties.put(ConsumerConfig.KEY_DESERIALIZER_CL…

postgresql根据某个字段去重获取整行数据

背景:在一些情况下我们需要对数据进行去重统计,group by就行,但是一些特殊情况下我们要根据某个字段去重之后获取非聚合字段的值,这个时候在mysql非严格模式下可以直接执行,但是在严格模式和postgresql里面是直接报错的…

vue中数组常用的六种循环方法、VUE中list的各种方法和运用

简单记录一下,常用的六种数组循环的方法,分别是for(),map(),forEach(),filter (),every(),some(); 一、for循环 let data [{name: 张三,age: 10}, {name: 李四,age: 20}, {name: 王五,age: 3…

k8s 对外服务之 Ingress(七层代理)

一 Ingress 简介 理论方面 1, k8s service 作用 对集群内部: 它不断跟踪pod的变化,更新endpoint中对应pod的对象,提供了ip不断变化的pod的服务发现机制 对集群外部: 对集群外部,他类似负载均衡器&am…

JAVA家政系统小程序源码,家政系统源码,支持店铺入驻接单,师傅入驻接单:专业团队自主研发的一套上门家政APP系统成品源码,支持商用

JAVA家政系统小程序源码,家政系统源码,支持店铺入驻接单,师傅入驻接单:专业团队自主研发的一套上门家政APP系统成品源码,支持商用 家政系统是一套可提供上门家政的系统,可在线预约开荒保洁、上门维修、美容…

Android 如何保证开启debug模式之后再启动

很多时候会需要debug看Android启动时候的一些数据,但很多时候会存在自己开启debug后app已经过了自己要debug的那段代码的时机了。 那么怎么样可以保证一定能让启动后不会错过自己要debug的那段代码执行的时机呢? 可以用下面这行命令,其中co…