硬件与C语言的联系 由硬件联系C语言由于之前我有一定的C语言基础我这里只是将C语言和硬件联系并不重新学习只是相当于重新复习加深理解程序保存在Flash里各种指令当CPU通电后告诉CPU去读、写某些地址内存暂存内容C语言C程序就是去告诉CPU该怎么去读写内存及各个模块变量定义变量定义大小数据类型且系统分配内存空间分配地址在电路板里用电路电压表示数值1/0所以暂且认为1个晶体管表示1bit的数据不是0就是11byte字节 8bit比特当一个变量的内容超出了分配的大小就只能容纳其低分配大小位的内容有符号的变量最高位是符号位小字节序低位数据存在低地址大字节序低位数据存在高位地址原码、反码和补码原码最高位位符号位0为正数1为负数反码正数的反码原码负数的反码原码除了符号位不变其余位取反补码:正数的补码原码负数的补码反码1内存里存的数据是补码补码的意义就是统一了加法和减法方便了硬件的设置地址指针32位CPU发出32根地址信号给内存控制器内存控制器转发地址信号不一定全部转发可能只转发若干根给外设模块如内存GPIO,UART,Flash等模块这些模块根据地址信号去访问对应的单元用指针访问硬件当指针是内存地址的时候可以对相应地址的内容进行操作同理当指针是其它硬件模块的地址的时候也可以通过写入不同的值来对其状态进行操作但具体的硬件的地址和操作的值要去查关于指针类型的选择当是8位的时候用char *32位的时候用int *比如当都是40021414这个地址时char只能访问这个地址后的8位int则能访问这个地址后的32位字节对齐当数据分配的空间像上面一样排布的时候要去找score时得先根据100找出101、102、103再根据104找出104再进行组合这样cpu效率很低所以要采用字节对齐的方式提高效率对齐的规则1.单个成员成员存放的起始地址必须是这个成员的自身字节数的整数倍空位补填充字节2.嵌套结构体结构体整体当作一个成员是对齐值取它内部最大基本类型的字节3.整个结构体总大小结构体最后的总字节数必须是结构体内最大数据类型字节数的整数倍不够就在尾部填充结构体指针结构体指针指向的是结构体空间的起始空间用结构体指针来操作硬件总结在cpu看来一切都是地址指针举例操作GPIO根据GPIO模块的硬件地址偏移量设计结构体函数指针使用函数的时候实际上是引用它的某个地址我们可以用一个变量的来保存它的地址从而达到一样的效果高级用法1.函数指针作参数调用函数时栈会分配空间这样会直接跳到f所表示的函数地址去执行2.函数指针数组3.结构体中的函数指针3.结构体中的函数指针[外链图片转存中…(img-EHwymfSG-1785503118906)][外链图片转存中…(img-ye7TiOen-1785503118906)][外链图片转存中…(img-eJDzb3mA-1785503118906)]

相关新闻

最新新闻

SIFT特征提取算法:原理、实现与OpenCV实战指南

SIFT特征提取算法:原理、实现与OpenCV实战指南

1. 项目概述:为什么SIFT依然是特征提取的“定海神针”?在计算机视觉领域,尤其是图像匹配、目标识别和三维重建这些核心任务里,有一个问题像幽灵一样挥之不去:同一物体在不同尺度、不同角度、不同光照下拍摄的照片&…

2026/8/1 4:54:12
基于rsync+sersync实现服务器目录实时同步与数据备份方案详解

基于rsync+sersync实现服务器目录实时同步与数据备份方案详解

1. 项目概述与核心价值最近在梳理几个业务系统的数据备份方案时,我又把尘封的rsync和sersync这套组合拳拿出来打磨了一番。这听起来像是个老掉牙的技术栈,对吧?但恰恰是这种经过时间考验的方案,在应对服务器目录实时同步、跨机房数…

2026/8/1 4:54:12
OpenAI Token降价:技术动因、行业影响与开发者应对策略

OpenAI Token降价:技术动因、行业影响与开发者应对策略

1. 项目概述:一次成本驱动的行业地震最近,关于OpenAI即将开启新一轮Token降价的消息在开发者圈子里传得沸沸扬扬。这可不是一次普通的促销活动,对于所有依赖其API构建应用、进行模型微调或者仅仅是日常调用GPT-4、GPT-3.5-Turbo的团队和个人来…

2026/8/1 4:54:12
从ZIP文件幻数到EOCD解析:解决invalid zip archive错误

从ZIP文件幻数到EOCD解析:解决invalid zip archive错误

1. 从一次“无效的ZIP归档”报错说起 如果你在开发中处理过文件上传、资源导入或者数据包解析,大概率见过类似 invalid zip archive: could not find eocd 这样的错误。表面上看,这是一个ZIP文件损坏或格式不正确的提示,但它的根源&#xf…

2026/8/1 4:54:12
Qt QTableView深度解析:从Model/View架构到高性能表格实战

Qt QTableView深度解析:从Model/View架构到高性能表格实战

1. 项目概述:为什么你需要深入了解QTableView?如果你正在用Qt开发桌面应用,尤其是涉及到数据展示、编辑、管理的工具,那么QTableView绝对是你绕不开的核心组件。它不像QListWidget那样简单罗列,也不像QTreeView那样展示…

2026/8/1 4:54:12
软件工程期末试题解析:从过程模型、UML到测试的工程思维构建

软件工程期末试题解析:从过程模型、UML到测试的工程思维构建

1. 项目概述:一份期末试题背后的工程思维全景又到期末季,看着手头这份《软件工程》的期末试题,你是不是感觉头大?满纸的“生命周期”、“UML图”、“黑盒白盒测试”,感觉每个字都认识,但组合起来就让人无从…

2026/8/1 4:49:11