嵌入式开发的相关问题解答

q1:嵌入式开发中程序下载后存储在什么地方?
嵌入式开发范围较广,根据系统处理器的处理能力以及资源分配情况,又有许多不同处理器。常说的有mcu、mpu等,两者有着不同的处理计算能力。以下内容主要来谈谈关于mcu的相关内容。
一般mcu 包含的存储空间有:片内flash 与片内ram,相比个人电脑(pc)来说,ram 相当于内存,flash 相当于硬盘。编译器会将一个程序分类为好几个部分,分别存储在mcu 不同的存储区,这些都是编译器的功劳。编译器相当于 一个中间翻译者,将计算机编程语言翻译成机器内码,从而控制计算体系。
说明:
program size包含有:
·code:代码段,存放程序的代码部分
·ro-data:只读数据段,存放程序中定义的常量
·rw-data:读写数据段,存放初始化为非0值的全局变量
·zi-data: 0数据段,存放未初始化的全局变量及初始化为0的变量
注:在keil中编译完后,工程会生成一个.map的文件,该文件说明了各个函数占用的尺寸和地址,在文件的最后几行说明了存储关系,查看此文件可以得到许多关于程序代码的重要信息。如下所示(该文件的最后几行信息):
1)ro size 包含了code 及ro-data,表示程序占用flash 空间的大小;
2)rw size 包含了rw-data 及zi-data,表示运行时占用的ram 的大小;
3)rom size 包含了code、ro data 以及rw data,表示程序烧写所占用的flash 空间的大小;
q2:程序在mcu中的运行过程?
程序烧写到了mcu后,程序是怎样运行呢?这里以stm32为例来探讨一下。
(1)程序运行之前,需要有文件实体被烧录到stm32 的flash 中,一般是bin 或者hex 文件,该被烧录文件又被称为可执行映像文件。如下图所示,可执行映像文件烧录到stm32 后的内存分布,它包含ro 段和rw 段两个部分:其中ro 段中保存了code、ro-data 的数据,rw 段保存了rw-data 的数据,由于zi-data 都是0,所以未包含在映像文件中。如下图所示:
(2)stm32 在上电启动之后默认从flash 启动,启动之后会将rw 段中的rw-data(初始化的全局变量)搬运到ram 中,但不会搬运ro 段,即cpu 的执行代码从flash 中读取,另外根据编译器给出的zi 地址和大小分配出zi 段,并将这块ram 区域清零。
说明:其中动态内存堆为未使用的ram 空间,应用程序在申请和释放的内存块都来自该空间。
一些全局变量则是存放于rw 段和zi 段中,rw 段存放的是具有初始值的全局变量(而常量形式的全局变量则放置在ro 段中,是只读属性的),zi 段存放的系统未初始化的全局变量。
q3:嵌入式开发中是如何实现程序下载(烧写)的?
(1)首先谈谈两个概念:烧写和固件。嵌入式系统需要预先将程序写入rom/flash中,在启动时载入才能够运行这些程序,将已经生成的程序写入rom/flash的过程叫做烧写。这样固化在存储介质上的文件叫固件(firmware)。烧写即是更新固件的过程。
(2)三种程序编烧写方式——isp/icp/iap
isp:in system programing,在系统编程
只需上电,处理器无需工作,更新整个存储内容的方式,不需要处理器中间操作,不需要存在引导程序,属于硬件单独处理行为。
icp:in circuit programing,在电路编程
可以编程写入最终用户代码,不需要从电路板上取下器件,已经编程的器件也可以用isp方式擦除或者进行再次编程,需要一些必要的硬件逻辑或引导代码,例如使用jtag下载。
iap:in applicating programing,在应用编程
iap从结构上将flash存储器映射为多个存储体区域(引导区、运行区、下载存储区等等),第一个项目程序存放在应用引导区,不执行正常的功能操作,而只是通过某种通信管道接收程序或数据,执行对其他部分代码的更新;其他代码才是真正的功能代码,存放在程序存储区。当芯片上电后,首先运行应用引导区程序,检查是否需要对第二部分代码进行更新,存在更新则进行更新后执行,否则直接执行。所以引导区程序应该不可以iap方式更新。总而言之,就是将存储体分区来进行嵌入系统运行调度和管理。
q4: 常使用的程序烧写方式有哪些?
1、把系统当做一个存储区域进行烧写,相当于把单片机当成一个rom芯片。
2、采用专门接口及专用的下载线将程序烧写到固件中。这时cpu除了执行单片机本身的指令之外,还能执行对存储器进行操作的特殊指令,擦除、烧写和校验指令。先通过传输相应的指令给cpu执行(擦除、读入、烧写、校验等),这样完成烧写。现在普遍使用的jtag仿真器也是这样,cpu能执行jtag的特殊指令,完成对固件的烧写操作。
3、 引导程序,即单片机中已经存在了一个烧写程序。启动单片机时首先运行该段程序,程序判断端口状态,识别烧写的特殊状态,就从某个端口读取数据,然后写入到存储单元中。如果是正常的状态,就转到用户的程序开始执行。需要触发硬件选择用户程序模式还是烧写模式。

活动预告丨雅特力与您相约电机智造与创新应用暨电机产业链交流会
STARBLAZE发布会上的“风、林、火、山”四个字各指何意?
麒麟处理器性能排行榜2020年_麒麟处理器是国产的么
私有云/行业云将成下一个10年的云计算主战场
台积电已经开始为新iPhone量产下一代处理器!
嵌入式开发的相关问题解答
温度对LED防爆手电筒的影响,LED散热的原理说明
华为nova5z开启预售 售价1599元起
图像传感器HDMI输入输出FMC模块解决方案
三星GalaxyA6s体验 游戏体验稳定续航不俗以及发热水准控制得当
如何高效学习电路数学?模拟电路的分析方法有哪些?
内部员工揭秘:台积电不会在中美贸易战中禁售华为的六大原因
逻辑架构模型开发概念原则详解
安森美推出双输出DC/DC转换器NCP5810
一文搞懂双绞线传输器都有哪些分类-科兰
选购智能电视的实用经验与常识
LGD砸重金豪赌OLED面板,要靠其重拿市场主动权?
从设计、代工、封装、投资等几个方面来展望下2019年
强强联合,势不可挡 -英特尔携手紫光展锐启动5G战略合作
专访TI宋浩然:AFE4300模拟前端让消费医疗更智能