历史上的今天
今天是:2025年01月21日(星期二)
2020年01月21日 | msp430程序升级方法
2020-01-21 来源: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下编译、实践通过。
最后,查了一下,对于计算机系的这个方法可能是常识了,但是对于搞单片机、嵌入式的大多还不知晓,个人就写出来,大家交流交流。已经知道这个方法的高手们,就一笑而过吧!
上一篇:MSP430程序升级
下一篇:MSP430随机数产生器
史海拾趣
|
本帖最后由 paulhyde 于 2014-9-15 09:44 编辑 这个应该是他们的竞赛初赛选拔题或者预测练习题吧~~~~各位可以作参考~~~ A_集成电路芯片测试仪 B_非接触供电系统 C_实用电子秤 D_程控音频OCL功率放大器 E_12V~220V逆变电源 F1_简单汉字自动书 ...… 查看全部问答> |
|
在一篇hacking windows ce的文章里说道一些结构时,都会说出结构是在XX.h文件中定义 就像下面这种 // WINCE420\\PUBLIC\\COMMON\\OAK\\INC\\pehdr.h #define EXP 0 /* 0x8c Export table position */ #define IMP 1 /* 0x94 Import table posit ...… 查看全部问答> |
|
魅族M8是我比较佩服的产品,现在我做PDA也想学习一下它。 各位来参与一下,分数不会少的,嘿嘿。 我现在纳闷的问题就是PDA的供电问题,我选了电源芯片,都觉得不合适,M8做的还不错,我就看了一下他的一些拆机文档。 M8的主板结构和芯片大致和之 ...… 查看全部问答> |
|
1. c8051f 单片机(c2 ,jtag)和at89s5x单片机(isp)二合一串口编程下载线,速度极快,支持3伏(c8051f 单片机),5伏(at89s5x单片机)电源,设计新颖,可靠稳定,成本低廉!!!目前通过实际验证可编程下载的芯片:c8051f310、c8051f320、c8051f3 ...… 查看全部问答> |
|
我想大家都认同在嵌入式的开发中,理论和实践是相辅相成的,对以太网的学习也不例外,掌握必要的理论基础知识是很有必要的,否则就如同云里雾里。有朋友问到需要看哪些资料,我就说说我个人的想法,供想从理论入门的朋友参考一下: 入门资料1:《 ...… 查看全部问答> |
|
C2000的CLA不支持断点调试,所以,只能在程序中加入MDEBUGSTOP来使CLA暂停。使用MDEBUGSTOP有几点应该注意: 1、在未连接CLA时,MDEBUGSTOP仅作为空操作指令使用,不影响程序的运行。 2、进入单步运行后,即是遇到MSTOP指令,(有时)CLA的中断 ...… 查看全部问答> |




