历史上的今天
返回首页

历史上的今天

今天是:2025年03月14日(星期五)

正在发生

2020年03月14日 | 一种430软复位方法

2020-03-14 来源:eefocus

最近在搞430的FLASH的自定义法(利用串口)程序烧写,烧写完成后断电复位,reset按键就可以运行新的程序。但是和学长交流了一下,这种方法不够好,希望有一种软复位的方式。于是百度了一下,都是些对看门狗进行写入特殊值使得430的cpu复位。反正个人是没有采用。


因为在搞程序的烧写下载,所以看了一下430的BSL。看到里面有一段话,关于从C代码中启动BSL的方法。如下:


3.7.1 从一个外部应用中启动BSL

将程序计数器设定到内存为位置0x1000 来启动BSL。堆栈一直被复位,而RAM 被清空。应该注意的是,GIE 位未被禁用,所以如果不需要中断的话,这一步应该通过调用应用来完成,并且如果它们被使用的话,这一步应该从“返回BSL”返回。


由于堆栈被复位,位置0x1000 也可以被作为一个C 功能进行调用,示例代码如下:


((void (*)())0x1000)()


于是想到,既然可以从C里面跳转到0x1000,那么也可以跳转到其他地址,比如复位地址了。


以6638为例。430的复位中断矢量地址是0xFFFE,里面存储了将要跳转的物理地址。6638的代码区起始地址是0x8000,正常复位是先进入复位中断,然后PC指针导入地址0x8000,然后从0x8000开始执行代码。那么软复位则是,执行((void (*)())0x8000)(),直接PC指针被导入0x8000的地址,而这个地址正好是6638的代码区起始地址,于是软复位了。个人分析一下这个指令,如有错误敬请大神们指正。


从代码上讲,(void (*)()是一个指向空函数的指针,((void (*)())0x8000)()是将0x8000强制转换为函数指针后进行函数调用,于是0x8000便被送入了PC指针。


对于其他的430单片,去查其数据手册FLASH段,弄清其代码区的开始地址,也可以用这个方法软复位了。


实测,IAR,CCS下编译、实践通过。


最后,查了一下,对于计算机系的这个方法可能是常识了,但是对于搞单片机、嵌入式的大多还不知晓,个人就写出来,大家交流交流。已经知道这个方法的高手们,就一笑而过吧!

推荐阅读

史海拾趣

Advanced_Linear_Devices_Inc.公司的发展小趣事

随着全球市场的不断扩大,ALD积极推进国际化战略。公司通过与全球各地的OEM制造商建立合作关系,将产品销往世界各地。同时,ALD还积极参与国际电子展会和论坛,展示其最新技术和产品,与全球同行交流合作。这些举措不仅提升了ALD的国际知名度,还为公司带来了更多的商机和发展空间。

Hitachi (Renesas )公司的发展小趣事

在集成电路的封装领域,ALD同样展现出了强大的创新能力。公司不仅提供了塑封、PDIP、小型装(SOIC)等常见的封装形式,还开发出了密封陶瓷封装(CDIP)等高性能封装技术。这些封装技术不仅提高了集成电路的可靠性和稳定性,还降低了生产成本,为客户提供了更具竞争力的产品。

Anadigm公司的发展小趣事

在电子行业的快速发展中,ALD以其创新的CMOS技术崭露头角。1985年,公司创立之初,便致力于研发小功率线性集成电路,为线性工程师提供标准产品和定制方案。经过团队的不懈努力,ALD成功开发出了一系列具有高精度和低功耗特点的CMOS线性集成电路,这些产品在工业控制、电子仪器等领域得到了广泛应用,为公司的快速发展奠定了坚实基础。

Futaba Electric Co Ltd公司的发展小趣事

在质量管理方面,ALD始终坚持以客户为中心的原则,不断完善其质量体系。公司建立了严格的质量控制流程,从原材料采购到产品生产的每一个环节都进行严格把关。同时,ALD还引入了先进的质量检测设备和方法,确保每一片集成电路都符合客户的要求和标准。这些措施不仅提高了产品的质量和可靠性,还赢得了客户的信任和好评。

以上五个故事均基于ALD在电子行业中的发展事实进行构建,旨在展示公司在技术创新、产品线拓展、封装技术创新、国际化战略推进以及质量体系完善等方面的努力和成就。这些故事不包含任何主观评价,仅是对事实的客观描述。

Anders DX公司的发展小趣事

在电子行业的快速发展中,ALD以其创新的CMOS技术崭露头角。1985年,公司创立之初,便致力于研发小功率线性集成电路,为线性工程师提供标准产品和定制方案。经过团队的不懈努力,ALD成功开发出了一系列具有高精度和低功耗特点的CMOS线性集成电路,这些产品在工业控制、电子仪器等领域得到了广泛应用,为公司的快速发展奠定了坚实基础。

GE Oil & Gas Digital Solutions公司的发展小趣事
在生产线上对电阻元件进行快速筛选和分类。

问答坊 | AI 解惑

怎么编译

高手们,请教一下. PIC的单片机编译软件MPLAB7.5中,GOTO跳转后面的指令怎么编译啊?比如: CHECK    ;模式1,转60S停12分,如此循环           MOVF PORTB,W ;初值读入W         ...…

查看全部问答>

FPGA和51测波形占空比的

本帖最后由 paulhyde 于 2014-9-15 09:21 编辑 用FPGA做的测占空比程序......  …

查看全部问答>

细数近几年的2.4G RF芯片!

因为工作原因从2003年就开始了2.4G的无线应用,主要是用在游戏周边。从最初的每片6,7美金到现在的每片不到0.5美金,我都经历过。 用过的芯片有SIGNIA的SGN5210,SGN6210;CHIPCON的CC2400,CC2500,CC2550;NORDIC的 NRF2401;AMIC的A7101,A7121 ...…

查看全部问答>

上位机与usb设备通信问题

上位机与usb设备通信问题。采用mass storage协议的问题,在于非管理员下不能使用。采用fopen、fread、fwrite等方式进行对设备文件进行访问。但又出现问题:fread命令只读取操作系统缓冲中的数据,不直接向usb设备读取。请问各位高人,有解决的办法 ...…

查看全部问答>

如何让visual studio 2005编写采用Intel 赛扬CPU的winCE应用程序?

如何让visual studio 2005编写采用Intel 赛扬CPU的winCE应用程序? 程序要求采用C++语言编写。…

查看全部问答>

wince5.0启动到不了了,看启动信息对比

我的平台是pxa270+wince5.0,下面是wince的启动信息,启动到一半就没反应了,不知道问题是在哪个地方,请高手指点。后面我给出了以前曾经正常启动的信息。可以做个对比。 出错的启动信息: ************************************************** ...…

查看全部问答>

请教制作PDA安装程序问题:用安装包下载程序到PDA上,程序名无法显示中文,如何解决?

我用ePocketSetup2001、ePocketSetup2003、ePocketSetup4安装包制作工具做安装包,打包的程序是用evc++做的,Pocket PC 2003,安装到PDA上后,安装的程序名是中文,但是在PDA上显示不了,为什么呢? PDA的配置如下: Microsoft windows mobile tm ...…

查看全部问答>

cache 优化问题

本帖最后由 dontium 于 2015-1-23 13:28 编辑 请问 如何将某段程序或某个函数(这个函数经常调用)放到L2里,通过哪个API函数,谢谢 …

查看全部问答>

题目快出啦!

本帖最后由 paulhyde 于 2014-9-15 09:00 编辑 我要题目!  …

查看全部问答>

单片机组合CPLD 设计的等精度频率计(测频率 测周期 测脉宽测占空比)

现在自己学了VHDL  自己能写CPLD 的程序 但是单片机的程序不会写 哪位大侠 写过的 给我参考一下 感激啊  也可以发到我邮箱  249432864@qq.com…

查看全部问答>