您的位置 首页 培训

msp430单片机程序晋级的办法有哪些

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

最近在搞430的FLASH的自定义法(运用串口)程序烧写,烧写完结后断电复位,reset按键就能够运转新的程序。可是和学长交流了一下,这种办法不够好,期望有一种软复位的办法。所以百度了一下,都是些对看门狗进行写入特别值使得430的cpu复位。横竖个人是没有选用。


msp430单片机程序晋级的办法有哪些

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

从一个外部运用中发动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下编译、实践经过。

声明:本文内容来自网络转载或用户投稿,文章版权归原作者和原出处所有。文中观点,不代表本站立场。若有侵权请联系本站删除(kf@86ic.com)https://www.86ic.net/changshang/peixun/345084.html

为您推荐

联系我们

联系我们

在线咨询: QQ交谈

邮箱: kf@86ic.com

关注微信
微信扫一扫关注我们

微信扫一扫关注我们

返回顶部