打印

关于软件在应用更新的问题

[复制链接]
1987|15
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
linghua1100|  楼主 | 2010-7-14 19:10 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
在一个封闭的51MCU系统中,想利用通用的IO口或者串口对MCU的程序进行更新升级,为了保证系统的可靠性,在下载成功前,原有的程序不能删除,系统软复位后运行升级后的程序。
我现在只想到了更新系统程序里的一个子程序的方法,但是要全部更新的话(包括中断,主程序等所有的代码)应该怎么做呢,尤其是中断程序的更新不知道怎么办?

相关帖子

沙发
原野之狼| | 2010-7-14 20:45 | 只看该作者
使用带IAP功能的单片机

使用特权

评论回复
板凳
linghua1100|  楼主 | 2010-7-14 22:25 | 只看该作者
我用的C51没有IAP功能,现在项目想通过无线传输数据代码给封在里面的单片机,然后通过改变入口地址来启动刷新的程序,,现在关键是修改中断入口处的转移指令,但我接收数据时也是用中断接收的,怎么办呢?还有代码实际在MCU中的存储位置怎么跟编译文件中的函数地址对应呀?在编译程序时我也不知道所更新的程序放在MCU的哪个位置的了

使用特权

评论回复
地板
原野之狼| | 2010-7-14 23:08 | 只看该作者
没有IAP 你怎么改变程序呢

使用特权

评论回复
5
hotpower| | 2010-7-14 23:28 | 只看该作者
有EEPROM就行~~~

使用特权

评论回复
6
原野之狼| | 2010-7-14 23:53 | 只看该作者
大叔 LZ的单片机都不能改变FLASH的内容(利用编程器除外)

使用特权

评论回复
7
hotpower| | 2010-7-15 02:18 | 只看该作者
哈哈~~~函数指针作甚???

使用特权

评论回复
8
ayb_ice| | 2010-7-15 10:35 | 只看该作者
LZ果然高手

使用特权

评论回复
9
tomhe666| | 2010-7-15 13:57 | 只看该作者
本帖最后由 tomhe666 于 2010-7-15 14:04 编辑

hotpower发表于 2010-7-15 02:18 | 只看该作者 回复 引用 评分 报告 返回版面 TOP  
得分:0
7楼:
哈哈~~~函数指针作甚???
//======================================================
我来挑刺了:这事用51是摆不平的, 因为51硬件上没有间接调用和间接跳转的能力, 在51所有的函数指针都是编译器事先确定好,然后用选择的方式GOTO进去的. 你事后随便给个地址让他调用,不可能的撒....

使用特权

评论回复
10
linghua1100|  楼主 | 2010-7-15 14:03 | 只看该作者
大虾们,不好意思,,,我搞错了
我用的单片机可以进行FLASH擦写

使用特权

评论回复
11
linghua1100|  楼主 | 2010-7-15 14:05 | 只看该作者
艾大虾不要挖苦小弟了撒,,指点下

使用特权

评论回复
12
linghua1100|  楼主 | 2010-7-15 14:18 | 只看该作者
举个例子,,我现在主程序的内容有了改变,需要下载到MCU里更新,更新的主程序代码应该在编译链接时是不是他的地址就已经定了呢?现在关键是MCU接收到的更新的程序代码时把该段代码放在什么位置是由原来MCU内的程序控制确定的,即外部没法控制和确定。
假如你编译的代码定位在0x5000-0X6000,但是有可能MCU内原有的代码就放在这个段,怎么办?难道相同版本的代码要根据不同的对象编译链接不同的文件?这样适用性就不好啦吧

使用特权

评论回复
13
seabada| | 2010-7-15 16:33 | 只看该作者
没有遇见过这种情况学习下

使用特权

评论回复
14
hotpower| | 2010-7-15 18:42 | 只看该作者
hotpower发表于 2010-7-15 02:18 | 只看该作者 回复 引用 评分 报告 返回版面 TOP  
得分:0
7楼:
哈哈~~~函数指针作甚???

我来挑刺了:这事用51是摆不平的, 因为51硬件上没有间接调用和间接跳转的能力, 在51所有的函数指针都是编译器事先确定好,然后用选择的方式GOTO进去的. 你事后随便给个地址让他调用,不可能的撒....
tomhe666 发表于 2010-7-15 13:57

使用特权

评论回复
15
hotpower| | 2010-7-15 18:47 | 只看该作者
本帖最后由 hotpower 于 2010-7-15 18:50 编辑

哈哈~~~菜农的刺一般人是不敢挑的,否则结果是~~~

51硬件上没有间接调用和间接跳转的能力,


搜索一下:

http://www.google.com.hk/search?hl=zh-CN&newwindow=1&safe=strict&q=Keil+C51%E4%B8%AD%E4%B8%80%E4%B8%AAC%E5%87%BD%E6%95%B0%E8%A2%AB8%E7%A7%8D%E6%96%B9%E6%B3%95%E8%B0%83%E7%94%A8%E5%8F%8A%E6%95%88%E7%8E%87%E5%8F%8D%E6%B1%87%E7%BC%96&aq=f&aqi=&aql=&oq=&gs_rfai=

使用特权

评论回复
16
tomhe666| | 2010-7-16 07:55 | 只看该作者
27:         方法3.间接地址调用函数(见菜农的HotIns.h/c)(11个字节)
    28: -------------------------------------------------------*/
    29:         _intjmp_(TaskInit);//TaskInit
C:0x0073    9002DB   MOV      DPTR,#TaskInit(0x02DB)
C:0x0076    1203F3   LCALL    _reset_code__(C:03F3)
--------------------------------------------------------------------
                 _reset_code__:
C:0x03F3    C082     PUSH     DPTR(0x82)
C:0x03F5    C083     PUSH     DPH(0x83)
C:0x03F7    32       RETI  
//=================================================
间接调用竟然靠压栈出栈来实现, 这招......
俺服了,真的服了, 没想到啊. 顺便弱弱的问下: 要在PIC16C56上实现间接调用/跳转该用什么方法撒

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

0

主题

12

帖子

1

粉丝