HEX文件在单片机中是如何工作起来的?

通常我们写的单片机程序放在哪里了?rom和ram有什么区别?有没有关系呢?程序又是怎么工作起来的?其实通常这些问题对于单片机初级工程师来说可能都是大大的问号,好多人可能会让单片机工作起来,比如有例程,然后根据烧录工具的流程走一遍就觉得会用单片机了,好多人会想单片机如此简单还有什么可学的。
太多人是不学底层的工作原理,也不想。觉得那么多库函数和例程,用起来就可以了。可是自己真的懂吗?碰到问题你会解决吗?所以还是会了别人不会的才是有更多选择的资本。
ram:随机存储器,掉电数据会丢失,也就是会存储一些临时数据。
rom:只读存储器,掉电数据不会丢失,主要存储程序数据以及常量数据或需要存储的变量数据
概念有了,到底是怎么工作起来的?
单片机运行时需要调用程序或者函数时就需要读取rom,然后在ram中执行这些程序或者函数的功能,所产生的临时数据也都存在ram,掉电后临时数据就会丢失了。
程序经过编译、汇编、链接后生成hex文件,然后再通过烧录器将hex文件烧录到rom中。
那么rom是只读存储器,cpu只能从里面读数据,而不能往里面写数据,掉电后数据依然保存在存储器中。ram是随机存储器,cpu可以从里面读取数据也可以写数据,掉电不保存。
那么这里就涉及到了单片机启动的过程了,就像我们电脑,手机这些设备开机都需要一个启动过程,就相当于初始化的过程,并不是直接跑到主程序的,单片机也是一样,这个就是启动流程,之后才会跑到主程序运行的。
启动流程我们拿st的一款来说一下,其他厂家的也是大同小异的。通常,当处理器从复位启动时,它首先会访问 0 地址的向量表,复位时处理器首先读取向量表的前 2 个字,第一个字为堆栈指针 msp 初始值;第二个字为复位向量,它表示程序执行的起始地址。当读取到复位地址之后,会自动跳到复位向量处开始执行程序。简单的说上电的时候就是要从地址0x0000 0000处开始的,那么从地址0处开始存储了一个向量表,就是我们说的中断向量表。换句话来讲,我们写的代码是在flash区域的,那么复位向量地址也是在flash区域,那么就相当于程序跳到了flash存储区开始执行代码。
那么ram上电数据不是人为写入的,就是cpu写入的,就是上电启动后cpu开始从rom中包含的所有程序内容第一行代码处开始执行指令的。然后为后面整个程序运行做准备,需要对ram进行初始化。
首先是对变量分配地址空间,有已赋初值的全局变量,就需要将初值从rom中拷贝到ram中。
没有赋初值,就是随机值。
其次设置堆栈的地址,一般我们只用到栈空间,也就是中断处理时的“保护现场”和“恢复现场”的作用。
最后分配代码中的数据段,也是从rom中拷贝到ram中来分配起始地址。
启动之后完成这些准备工作就是根据不同的指令一条一条的执行了,发生中断的时候会根据中断向量表找到中断服务函数去执行中断,整个程序就这样的过程跑起来了。

大疆发布Matrice 350 RTK行业无人机平台
半入耳无线耳机推荐,2020性价比高的蓝牙耳机
自研GPU成行业趋势,新势能为中国带来机遇
导电滑环的用途有哪些,它的发展趋势是怎样的
特斯拉Roadster将于2022年扩建上海工厂投产
HEX文件在单片机中是如何工作起来的?
GRANDMICRO有容微IC芯片在5G基站方案应用
京东JDY-800“京鸿”货运型固定翼无人机试飞取得阶段性成果
明基智能无线投影应运而生,开启会议新时代
哪些蓝牙耳机口碑比较好?平价好用的蓝牙耳机推荐
【新品发布】AIO-3588SJD4八核8K人工智能主板
英飞凌智能制造工厂获选无锡十大物联网应用案例
2018年获投资的物联网平台及解决方案
水中重金属检测设备 产品介绍说明
factory机制的本质是什么?factory机制式的重载的过程
轻薄小巧Nineka南卡有线+无线充电宝
小米蓝牙音频接收器怎么样
恒力开度仪是如何工作的
人工智能都学什么课程
芯动联科迎来了公司发展史上的里程碑时刻——科创板首发上市