Board logo

标题: [求助]通过CAN口在线对Flash编程问题 [打印本页]

作者: neveringer    时间: 2009-11-11 00:31     标题: [求助]通过CAN口在线对Flash编程问题

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

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

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

请问这个问题如何解决啊??
作者: neveringer    时间: 2009-11-11 00:32

我用的芯片是
DZ32
作者: fayefayehoo    时间: 2009-11-11 16:23

其实只有等待烧写完成的那个指令需要在ram中运行
作者: achao86926    时间: 2009-11-12 21:58

楼上说的对,你只需将两条指令放在RAM中即可,CCIF=1,然后等待CCIF为0,用个while语句等待,之后返回,如果跳转时你用的JSR,那么返回时用RTS,(机器码是0x3D)如果你用call调用,那么返回时要用RTC,一开始我写FLASH擦写的时候,这个问题阻碍了我好几天。
作者: strongchen    时间: 2009-11-13 15:21

对,必须注意RTC和RTS的区别,它们的返回地址范围是不一样。另外,如果对速度有要求的话,可以将尽量多的程序放入RAM中运行。
作者: neveringer    时间: 2009-11-15 01:18

其实我本来也是只将擦除和烧写的程序拷到RAM中执行,但我的老大要求将所有烧写的程序(包括CAN的收发程序)一起制作为一个bootloader代码。以后烧写就将bootloader拷贝到RAM中执行烧写,与不使用ROM的代码。
但是bootloader代码中包含的ROM地址的CAN程序,调用CAN程序是就会跳回ROM中,如何才能让bootloader的代码只在RAM中执行啊?
作者: strongchen    时间: 2009-11-16 15:11

你所说的CAN程序包含的是怎样的ROM地址?不管是表格还是程序,原则上都可以搬到RAM中去的。
作者: fayefayehoo    时间: 2009-12-8 15:08

你看看你编译好的汇编代码,是不是调用can程序时直接跳到rom的地址去了。




欢迎光临 电子技术论坛_中国专业的电子工程师学习交流社区-中电网技术论坛 (http://bbs.eccn.com/) Powered by Discuz! 7.0.0