历史上的今天
返回首页

历史上的今天

今天是:2025年01月08日(星期三)

正在发生

2020年01月08日 | bootloader中关于flash擦除写和ram初始化的有关问题

2020-01-08 来源:eefocus

最近在做飞思卡尔16位单片机的在线升级bootloader程序。有2个问题不太清楚,请教下论坛里的高人。

1.bootloader程序中,对存放应用程序的flash空间进行擦除和写入新的应用程序以完成升级。比较特别的是,需要将flash操作代码拷贝到ram中执行,这是为什么?bootloader程序所在flash空间设置为被保护状态,不会误擦除,而且运行到哪个函数自然会把函数压栈到RAM里执行吧?为什么还要特地拷贝到RAM里呢?

2.单片机上电初始化后,RAM存储初始化全局变量,这些全局变量是从调试器烧进去的S19文件中获取的吗?每次程序都是从bootloader的main函数开始执行,确定不是升级状态后跳转到应用程序重映射的reset中断向量地址(flash地址)执行。bootloader和应用程序中有些全局变量分配的ram重合了,有什么影响吗?会在跳转后重新初始化RAM吗?

哪位大侠帮帮忙,先行谢过!!

------解决方案--------------------
每个运行时态应该都有自己的startup,进行本运行时态所必须的初始化工作,包括块定位搬移、ZI等等。一般都可以在相应的配置文件中进行指定的。


16位的不太熟,CF的通过MEM CFG配置配置就行。 
------解决方案--------------------
我们用的Freescale的9s12g128做的bootloader,通讯和诊断协议用的ISO15765-3,不知道你用的自定义通讯协议还是什么?


(1) Flash操作的那部分,也就是Flash的读写驱动程序是必须放到RAM中执行,原因是当进行Flash擦写时,Flash中的程序就不可以被执行了,这是硬件的限制。这是Freescale单片机的情况,我不清楚其它单片机会不会有这个限制。
你说的“运行到哪个函数自然会把函数压栈到RAM里执行吧”,不可能把函数压到堆栈里面的,只是在函数调用和函数被中断打断,一些寄存器和一些局部变量等会被压倒堆栈里面。默认情况下,16位freescale单片机在prm中配置的堆栈大小是0x100字节,很多函数都要比它大。

(2)"单片机上电初始化后,RAM存储初始化全局变量,这些全局变量是从调试器烧进去的S19文件中获取的吗?" 这是个很好的问题,全局变量和静态变量的初始化值是保存在Flash中的Const段里的,新建一个工程的时候默认有个startup的汇编程序文件,它负责将const段中的初始值付给这些全部变量。这些事情是发生在你的main函数之前的。

(3)"bootloader和应用程序中有些全局变量分配的ram重合了,有什么影响吗?",没有影响,bootloader和你的应用程序是分时复用RAM的,上电程序就跑到bootloader,如果有合法的应用程序就跑到应用程序,应用程序里面会再次初始化变量的,也就是上面2说到的。 


------解决方案--------------------
flash不能同时读写,所以升级程序的时候要把程序拷贝到ram,防止写flash的过程中因为“读”程序而访问到flash

第二个问题属于编译原理方面的,数据初始化是在main之前的,如果你直接跳转到main,那就不会初始化。如果你是跳转到app程序烧写的位置(一般都是这样),那自然会再初始化一次。
而且,变量是否初始化也不是绝对的,有的编译器对未赋值的变量是不做初始化的

楼主不如自己写个程序验证下就知道了。这种问题,自己动手验证远比问人能学到更多。 


------解决方案--------------------
探讨
liangboone君,还有个地方没弄明白,请教下。

“全局变量和静态变量的初始化值是保存在Flash中的Const段里的”:
这个const段的起始地址和内容也是在s19文件里的吧。可是bootloader的s19文件和应用的s19文件,要手动合成一个s19文件后烧入mcu的flash里,其中应用的s19文件只把中断向量表的地址重映射了,const段地址应该没有变动,这样const段不会……

推荐阅读

史海拾趣

台湾义隆电子(ELAN)公司的发展小趣事

台湾义隆电子自1994年成立以来,一直秉持着技术创新的发展理念。公司早期专注于集成电路(IC)产品的研发与行销,随着市场需求的不断变化,产品线逐渐扩展到消费性芯片、通讯类芯片、微控制器等多个领域。义隆电子通过不断的技术创新,成功推出了多款具有市场竞争力的产品,如高性能的触摸屏控制器、触摸板模块等,实现了产品的多元化。

Alliance Memory公司的发展小趣事

台湾义隆电子自1994年成立以来,一直秉持着技术创新的发展理念。公司早期专注于集成电路(IC)产品的研发与行销,随着市场需求的不断变化,产品线逐渐扩展到消费性芯片、通讯类芯片、微控制器等多个领域。义隆电子通过不断的技术创新,成功推出了多款具有市场竞争力的产品,如高性能的触摸屏控制器、触摸板模块等,实现了产品的多元化。

晶群科技(Gem-micro)公司的发展小趣事

在产品多元化的基础上,义隆电子开始积极拓展国际市场。公司以台湾新竹科学园区为营运总部,在亚洲、美洲等多个国家和地区设立了分支机构和设计中心。通过与全球合作伙伴的紧密合作,义隆电子的产品逐渐进入欧洲、亚洲和美洲等市场,实现了全球布局。

ACI [Applied Concepts, Inc.]公司的发展小趣事

在环保意识日益增强的今天,ACI公司积极响应国家号召,将绿色环保理念融入产品设计和生产过程中。公司采用环保材料和生产工艺,推出了一系列绿色电子产品。这些产品不仅具有优异的性能,而且符合环保标准,得到了消费者的广泛认可。通过倡导绿色环保理念,ACI成功引领了行业潮流,树立了良好的企业形象。

ERNI Electronics公司的发展小趣事

ERNI Electronics的源头可以追溯到1947年,当时其瑞士母公司成立。而在1956年,ERNI Electronics以生产继电器为起点,正式进入电子行业。在创立初期,公司专注于继电器的开发和制造,积累了丰富的电子行业经验。随着市场需求的不断变化,ERNI在1967年开发了第一个背板连接器,这一创新产品迅速成为公司的核心产品,并推动了公司的快速发展。

Compound Photonics公司的发展小趣事

尽管在Micro LED领域遭遇了挫折,但Compound Photonics并没有因此沉沦。相反,公司凭借其在LCoS领域的深厚技术积累和良好的市场口碑,吸引了众多潜在合作伙伴的关注。其中,Snap公司表现出了强烈的收购意向。这一消息传出后,Compound Photonics的市场价值得到了进一步提升,公司的发展前景也变得更加广阔。

这五个故事展示了Compound Photonics公司在电子行业里发展起来的一些关键节点和重大事件。从收购Syntax-Brillian开启微显示领域之路,到微投显示模组项目失利后转向LCoS方向,再到成为业内知名LCoS方案商并与Lumus合作,以及与Plessey合作开发Micro LED产品遭遇Meta竞争,最后到Snap的收购意向,每一个故事都反映了公司在不同阶段的挑战与机遇。通过这些故事,我们可以看到Compound Photonics公司在电子行业里不断进取、创新发展的精神风貌。

问答坊 | AI 解惑

基于最新款飞思卡尔片子(MC9S08AC32)的实际应用代码

如题所说. 对于想使用这款飞思卡尔芯片,MC9S08AC32,FLASH有32K的同志位来说,我认为这个片子做得不错了,你们可以试着尝试一下,飞思卡尔是俺使用过的代码中,我觉得相对来说,抗干扰性较强的一款片子. 这里有一些代码,可以帮你迅速入门,迅速走入开发.…

查看全部问答>

id卡读卡器ps2口怎么读不出卡号啊??也是和键盘输入一样的读卡器

id卡读卡器ps2口怎么读不出卡号啊??也是和键盘输入一样的读卡器…

查看全部问答>

8255求救 引脚电平变化无法读取

8255引脚电平变化无法读取 #define PA8255 (*((unsigned char xdata *)0x1fff))//总线地址 #define PB8255 (*((unsigned char xdata *)0x3fff))//总线地址用16位表示 p0是低八位 p2是高八位    #define PC8255 (*((unsigned char xdat ...…

查看全部问答>

PNG图片旋转任意角度

WinCE5.0下有什么好的方法实现啊?…

查看全部问答>

导出的SDK要安装在VS2005的哪个目录下????

如题。   我自己定制了一个PB,编译好了后,把SDK导出了,但是这个SDK是要安装在VS2005的安装目录下吗??(我用的开发 工具是VS2005,但是是第一次使用)安装完了SDK,在启动VS2005,新建工程时,需要对它进行选择吗????…

查看全部问答>

c语言程序问题

#include<reg52.h>#define uchar unsigned char#define uint unsigned int sbit lcden=P2^7;sbit lcdrs=P2^6;sbit lcdrw=P3^6;uchar count,shi,fen ,miao;uchar code table[]=\"   2009-5-16\";uchar code table1[]=\"   0 ...…

查看全部问答>

[交换]我有MSP430 Value Line LaunchPad +Capacitive Touch BoosterPack

我有MSP430 Value Line LaunchPad +Capacitive Touch BoosterPack全新套件想交换个JLINK仿真器,有意者站内联系。 MSP430 LaunchPad+Capacitive Touch BoosterPack 超值系列开发套件 详细见TI官网: http://e2e.ti.com/group/msp430launchpad/b/ ...…

查看全部问答>

坛子里有使用ZUKEN CR5000的软件的么?

如题,欢迎使用的公司和个人跟贴,这款软件好像满偏门的,是么?…

查看全部问答>

Getting Started with the MSP430 LaunchPad_Student Guide and Lab Manual

内容和大课堂的内容差不多,只不过是英文的。 大家看看!…

查看全部问答>

AD器件大全

本帖最后由 paulhyde 于 2014-9-15 03:16 编辑 AD芯片大全,及其基本性能指标。供大家比赛参考!!    …

查看全部问答>