重要记录(关于字节对齐):32位类型的指针指向的地址

2023-09-21 10:20:49

        重复:32位类型的指针(如int、uint、float等)指向的地址必须是4字节对齐的(能够被4整除),否则在访问该指针指向的内容时(无论是存还是取)会进入Hard_fault!!!

        比如以下代码必然出错:

   int *pp=(int *)0x20000002;
   int datap=*pp;
   INFO("datap=%d",datap);

原因就是pp指针指向的地址不可被4整除;

所以,在实际编程时候一定要注意以下两点:

1.在给32位类型的指针赋值时,一定要注意所赋的值是否是4字节对齐的

2.在将短类型的指针强转成为长类型的指针时(如将8位、16位转换成32位,或将8位转换成16位),一定要注意短类型的指针指向的地址是否是(长类型)字节对齐的,如8-16,则需要是2字节对齐的,8/16-32则需要是4字节对齐的。

        以上描述的是字节/内存对齐问题,该问题一般不会出现,但是如果不注意或者没有这个知识点的话,一旦出问题你会相当难以排查,就像我最近遇到的问题一样:

当时问题就是程序莫名进入Hard_fault,最终经过大量的测试定位到是这个函数出了问题,并且是该函数中的fmc_word_program函数出错,但即便是这时(精确定位到了具体函数)也还对于问题的解决毫无头绪,后面我把传入的data指针的值打印出来看了发现不能被4整除,才猜测是否是应该要4字节对齐的,因为fmc_word_program函数是按照字写入的,所以其传入的地址值是否是必须要4字节对齐,然后测试了下果然是这个原因。

更多推荐

亚马逊云科技打造SAP核心业务系统上云最佳实践,加快业务转型和价值实现

数字化转型步入深水区,企业竞争日益激烈,乘云而上、快速进行现代化转型和创新,才能不断紧跟趋势变化,实现「高质量发展」。作为亚马逊云科技全球战略合作伙伴,SAP和亚马逊云科技的联合创新已超过15年,双方共同为SAP客户的关键业务型工作负载提供支持,持续助力企业数字化转型。如今,全球有数以千计的企业将SAP核心业务系统运行

前端工程师路上的宝藏:不可错过的进阶必读文章!

JavaScript《javascript高级程序设计》核心知识总结必要性:⭐️⭐️⭐️⭐️难度:⭐️⭐️⭐️⭐️谏言:建议初学者先读一两遍红宝石书(即JavaScript高级程序设计),犀牛书可以暂时不看(读起来有点累)ES6入门教程必要性:⭐️⭐️⭐️⭐️⭐️难度:⭐️⭐️⭐️⭐️⭐️谏言:阮大佬的开源精品,强推!

如何在Ubuntu中挂载新硬盘

参考:如何在Ubuntu中挂载新硬盘_笔记大全_设计学院ubuntu将大于2T硬盘挂载到/home目录并使其永久生效的详细操作步骤_ubuntu挂载硬盘到home目录_菲玛的博客-CSDN博客win10+ubuntu18.04home目录扩容方法_ubuntu增加home空间_cfreeze的博客-CSDN博客1、检测

【二分法查找】

使用二分法查找需要注意的点:使用二分法的前提:数组为有序数组,同时题目还强调数组中无重复元素。二分法经常写乱,主要是因为对区间的定义没有想清楚,区间的定义就是不变量。要在二分查找的过程中,保持不变量,就是在while寻找中每一次边界的处理都要坚持根据区间的定义来操作,这就是循环不变量规则。写二分法,区间的定义一般为两种

clickhouse简单安装部署

目录前言(来源于官方文档):一.下载并上传1.下载地址:点我跳转下载2.上传至Linux二.解压和配置1.解压顺序注意:必须按照以下顺序解压,并且每解压一个都要执行该解压后文件的install/doinst.sh文件解压步骤:三.启动1.启动服务2.启动客户端四.建表语法与clickhouse数据类型1.建表语法2.数

UI设计师面试时如何自我介绍优漫动游

学会了UI设计技术,接下来的计划就是要找工作了,UI设计在面试环节的自我介绍很重要,有时候一分钟的自我介绍已经足够让HR判断出你适不适合他们公司,那做为一名UI设计师面试时如何自我介绍呢?来看看下面的详细介绍。UI设计师面试时如何自我介绍UI设计师面试时如何自我介绍:怎么做好一次自我介绍?1、自我介绍内容:结合面试岗位

什么是高阶成分(HOC)?解释 React 中 render() 的目的?

高阶成分(HOC)是一种基于React的组合特性而形成的设计模式。HOC是自定义组件,在其中包裹了另一个组件。他们可以接受任何动态提供的子组件,但不会修改或复制其输入组件中的任何行为。您可以说HOC是"纯"组件1。HOC通过对组件逻辑的重用,让组件逻辑可复用、可测试、可维护,从而提高开发效率1。在React中,rend

利用爬虫技术自动化采集汽车之家的车型参数数据

导语汽车之家是一个专业的汽车网站,提供了丰富的汽车信息,包括车型参数、图片、视频、评测、报价等。如果我们想要获取这些信息,我们可以通过浏览器手动访问网站,或者利用爬虫技术自动化采集数据。本文将介绍如何使用Python编写一个简单的爬虫程序,实现对汽车之家的车型参数数据的自动化采集,并使用亿牛云爬虫代理服务来提高爬虫的稳

Java AOP Framework概述

JavaAOPFramework概述1.AspectJ1.1使用AspectJ进行切面编程2.SpringAOP2.1使用SpringAOP进行切面编程2.2如何决定使用哪种动态代理2.3如何通过配置指定代理方式2.4SpringAOP和AspectJ的关系3.SpringBootAOP4.扩展4.1AspectJ织入

面向面试知识--MySQL数据库与索引

面向面试知识–MySQL数据库与索引优化难点与面试点什么是MySQL索引?索引的MySQL官方定义:索引是帮助MySQL快速获取数据的数据结构。动力节点原文:MysQL官方对于索引的定义:索引是帮助MySQL高效获取数据的数据结构。MysQL在存储数据之外,数据库系统中还维护着满足特定查找算法的数据结构,这些数据结构以

HarmonyOS Codelab 优秀样例——溪村小镇(ArkTS)

一、介绍溪村小镇是一款展示溪流背坡村园区风貌的应用,包括园区内的导航功能,小火车行车状态查看,以及各区域的风景展览介绍,主要用于展示HarmonyOS的ArkUI能力和动画效果。具体包括如下功能:打开应用时进入启动页,启动页轮播展示溪村小镇风景图,之后进入应用首页。在首页的“地图浏览”标签页,可以拖动和缩放查看地图,并

热文推荐