打印

预留空白实现升级程序本身的远程再升级

[复制链接]
4357|27
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
zenyin|  楼主 | 2007-12-14 11:53 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
这是个与时俱进个性张扬的时代,客户需求变了,我们"流程"不完美等等.......经商品交换传递到远方的作品需要完成升级服务了!

在网络早已侵入我们个人隐私的今天"远程写片"无疑已经最时尚最新颖的技术手段和生活元素了.事实是有了"片上操作系统",程序更新其实已经不是一件太复杂的技艺了!

但有一个自然的问题跳了出来:当远程"写片程序"或者叫"片上操作系统"本身不太完美的时候(完美还用升级吗)怎么利用她们的自我意识和自律精神实现自我完备呢?

这很有点像我们身体,某器官功能弱了,我们一刀切了?!不行!你还得利用这个器官的自我增殖潜能,外因通过内因来起作用:
海峡对面阿扁得了心脏病,中正医院的医生估计不会一刀把"扁心"切了,直接换个"廓心"吧?!

先来个引子:FLUSH的写入,本质上只能在一个字节某些指定位上写0,而"写1"是通过擦除整个扇区使每个位都是全1实现的,知道这个机理以后........
就有了这样思想火花:某个位置上数据为0FFH,那这个单元就可以单独编程为00H到0FFH包括任何数码.

再可以扩充和推广:任何写过的字节也可以把它位上为1的地方部分按需要变异为0,换成另一个数据.更显然是:00H一定是变异的终结.

当每个位置都你大刀阔斧地装修成00H的时候,兄弟你做事就太阳刚!!!

对于51机器码:00H是NOP 0FFH是MOV R7,A,前者很和谐,后者不用R7也算和睦.

有了这个引子做注脚后,下面小勾当大侠们就可以宽容了
请看:
LJMP 老功能
DB 0FFH
DB 0FFH
DB 0FFH
DB 0FFH
DB 0FFH
DB 0FFH
DB 0FFH
DB 0FFH
DB 0FFH
DB 0FFH
DB 0FFH
DB 0FFH
DB 0FFH
DB 0FFH
DB 0FFH
DB 0FFH
老功能:..........

当我们要整改某个"老功能"时,我们现在先隐忍着暂用"不完善的老功能"把新功能块装修到FLUSH商品房中,一旦工程完工而且收拾"利利索索""清清爽爽"时,我们就把新功能入口门径"LJMP 新功能"
开在"LJMP 老功能"的下面,随后轻描淡写地把用6个完美的大顺圆环"00H 00H 00H" 把老门遮蔽了....呵!一缕春风拂来真是满堂生辉.........

上了年纪人的难免总有点怀旧:
把"老门"重新下移到"新门"的后面悄悄掩蔽起来怎么样?!

料不得啊哪天突然心血来潮,老门新开,你瞧瞧人家老二口
"最浪漫的是:坐在老门洞里老藤椅上把美好的回味摇啊摇".......


结束语:当你自信连"远程写片"这事都搞得定的时候,那些所谓的远程调试远程维护远程预警甚至远程专家系统什么的还不都是小儿科一桩了?!

相关帖子

沙发
zusen| | 2007-12-14 11:59 | 只看该作者

这个也有想过

“分区”Flash ,一区是现时的程序区,另一区是 升级区

当升级成功后,编程Flash 某字节或在EEProm里登记,让MCU上电后跳转(JMP)到 1区或二区,升级区就作为了 程序区,而原先的程序区 又作为了 升级区

使用特权

评论回复
板凳
zusen| | 2007-12-14 12:10 | 只看该作者

那菲利普的900系列来说吧

他分开程序区 和ISP区 

在给他编程时,可以选择是从 ISP区启区还是程序区启动

1 我改过他的ISP程序,上电后先进入ISP,在ISP里检测某个位,如果置位,就执行ISP程序,返之,JMP 0000H

2: 我在主程序了,识别串口指命,如果收到 ISP命令,就JMP ISP区的开始,运行ISP程序,对软件升级后,复位MCU,执行 新的用户程序

我们完全可以用其他的MCU 实现这种功能

使用特权

评论回复
地板
aweyfan| | 2007-12-14 12:11 | 只看该作者

开始pk了,hotpower接招啊

使用特权

评论回复
5
xwj| | 2007-12-14 12:12 | 只看该作者

呵呵,以前OTP的芯片很多人这样干过

为的是能够多写几次:-)

不过现在更方便了,支持IAP的芯片太多了
当能够“自己写自己”时一切都不成问题了

使用特权

评论回复
6
aweyfan| | 2007-12-14 12:15 | 只看该作者

没用擦除时序,偶认为这是逃避难点

1可以写成0,这大家伙都知道,当年otp芯片不是用这种方法实现多次编程吗

flash执行擦除时,总线悬空,如何继续执行程序?

使用特权

评论回复
7
zenyin|  楼主 | 2007-12-14 12:16 | 只看该作者

同志们我目前还是无忧(51)半个月后我把

阿门妻(ARM7)玩透了再来张扬哈!不好意思!

使用特权

评论回复
8
aweyfan| | 2007-12-14 12:17 | 只看该作者

就是51,别跑啊

使用特权

评论回复
9
zenyin|  楼主 | 2007-12-14 12:20 | 只看该作者

在ARM本身就支持这种方式

ZLG315大叔呢?"周功"现在在企事业上做风声水起,估计少了二姨(21)这漫步了!

使用特权

评论回复
10
mapleyang| | 2007-12-14 12:22 | 只看该作者

re

楼上说的是应用程序的升级吧,估计楼主说的是bootloader的升级。也就是用了两级的bootloader,第二级上有一个备份.

使用特权

评论回复
11
zenyin|  楼主 | 2007-12-14 12:34 | 只看该作者

应用程序和bootloader都可以升级

后者才是最关键,前者我做了个协议规程特精彩,几个闪光点.1高效
2.永不会写死 3.双方都没有命令信息 4.基本是单向的 5.更新程序期间按情况原来程序还可以继续用(有空白的话)
6.基本不占资源(这点对51太重要了,串口和用户串口兼容,一般不用累加器,更不用8个寄存器,RAM是特殊区未使用未定义的去找的)7.升级程序本身开销小,只有284字节,100多条!

使用特权

评论回复
12
zenyin|  楼主 | 2007-12-14 12:37 | 只看该作者

可惜只能掉大家胃口

不能完全公开,我还有职业技术人员的操守,其实大家要的思想,拾人牙慧也恶心哈,特别是有尊严的"大方".

使用特权

评论回复
13
zusen| | 2007-12-14 12:42 | 只看该作者

也不用公开什么代码之类的啦

主要是谈谈这方面的思想、方向、可操作性

后面的就个人发辉了

使用特权

评论回复
14
zusen| | 2007-12-14 12:53 | 只看该作者

近来在搞网络的东东

 待有时间,试试搞搞远程升级,先在内部局哉网试试

对 LPC900带ISP的U 升级玩玩~~~~~~~

使用特权

评论回复
15
lpf336| | 2007-12-14 13:01 | 只看该作者

我觉得中断向量不好处理

使用特权

评论回复
16
zenyin|  楼主 | 2007-12-14 13:09 | 只看该作者

是!特别是客户程序也要用串口资源时,这点我作了特别处

好像返回21第一贴就是这意思,下面我把"变异模拟串口"贴出来这问题也解决了!

使用特权

评论回复
17
hotpower| | 2007-12-14 13:19 | 只看该作者

应该可行~~~俺的采样数据就是远程传递~~~

使用特权

评论回复
18
zenyin|  楼主 | 2007-12-14 14:15 | 只看该作者

hotpower 兄弟在热一把,给大家编制一个通用的

串口与网络互转程序怎么样?第一:能自动显示本方IP地址 能把本方设置成服务器也可设置成客户端:第二两个显示缓冲区都可以调入文件和现场手工输入,只需要支持阿厮客码和16进制模式就行了,第三:串口模式和波特率可更改;第四都有发送和接收可独立复位的计数器 第五,程序导出另存按纽
第六:串口最好是完备的串口,余下的线输出设置为传号空号,平时可以利用这些线干点上电复位什么的可自由发挥勾当.第七最好还能带上各种校验产生例如异和累加和CRC等,第八:其它WINDOWS功能按钮自由发挥了.这样有了这串口网络互转工具,朋友们都可以自由发挥网络功能了,先替大家谢谢你! 

使用特权

评论回复
19
zusen| | 2007-12-14 14:30 | 只看该作者

看看这个

https://bbs.21ic.com/club/bbs/bbsview.asp?boardid=17

这个就有 串口转网口,网口转串口的功能,先中“中继”的选项就行了

而且可以监控数据,俺两年前写的~~~

使用特权

评论回复
20
xwj| | 2007-12-14 14:46 | 只看该作者

中断向量问题采用间接散转即可解决,关键是只有一块FLASH时

怎样解决FLASH擦除时总线悬空(读不到程序)的问题

如果有两块存储器,只要不是傻子,大家都能自己想出办法的

使用特权

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

本版积分规则

90

主题

393

帖子

5

粉丝