首页 | 新闻 | 新品 | 文库 | 方案 | 视频 | 下载 | 商城 | 开发板 | 数据中心 | 座谈新版 | 培训 | 工具 | 博客 | 论坛 | 百科 | GEC | 活动 | 主题月 | 电子展
返回列表 回复 发帖

[求助]通过CAN口在线对Flash编程问题

[求助]通过CAN口在线对Flash编程问题

我的方法是这样:当CAN接收到编程指令时,就将执行编程的函数拷贝到RAM中执行。

但问题是:原本在ROM中的程序复制到RAM中运行,它调用其他函数时会跳回ROM中执行,但这些函数已经也拷贝到RAM中(例如CAN的接收和发送函数)。

由于在编程时在ROM中运行的话会很不稳定,所以要到RAM中运行。

请问这个问题如何解决啊??
我用的芯片是
DZ32
其实只有等待烧写完成的那个指令需要在ram中运行
楼上说的对,你只需将两条指令放在RAM中即可,CCIF=1,然后等待CCIF为0,用个while语句等待,之后返回,如果跳转时你用的JSR,那么返回时用RTS,(机器码是0x3D)如果你用call调用,那么返回时要用RTC,一开始我写FLASH擦写的时候,这个问题阻碍了我好几天。
对,必须注意RTC和RTS的区别,它们的返回地址范围是不一样。另外,如果对速度有要求的话,可以将尽量多的程序放入RAM中运行。
海纳百川  有容乃大
其实我本来也是只将擦除和烧写的程序拷到RAM中执行,但我的老大要求将所有烧写的程序(包括CAN的收发程序)一起制作为一个bootloader代码。以后烧写就将bootloader拷贝到RAM中执行烧写,与不使用ROM的代码。
但是bootloader代码中包含的ROM地址的CAN程序,调用CAN程序是就会跳回ROM中,如何才能让bootloader的代码只在RAM中执行啊?
你所说的CAN程序包含的是怎样的ROM地址?不管是表格还是程序,原则上都可以搬到RAM中去的。
海纳百川  有容乃大
你看看你编译好的汇编代码,是不是调用can程序时直接跳到rom的地址去了。
返回列表