Board logo

标题: 如何编写由2个S19文件组成的系统 [打印本页]

作者: shpdlizj    时间: 2005-12-27 16:47     标题: 如何编写由2个S19文件组成的系统

我做的一个产品(用MC9S12DP256单片机)卖给用户后,想可以让用户自己升级里面的软件,所以我在出厂前在产品里下载了一个基本软件叫boot,boot的功能就是初始化堆栈和异步通信口(SCI0),整个产品的功能由另一个软件firmware来实现,我的产品和PC通过232口连起来,PC上装有管理软件MONITOR,通过MONITOR,用户可以把我提供的firmware下载到我的产品里。要实现这些功能,我还有些问题不太明白,希望strongchen和各位同仁能指点。

第一,我在boot里做完初始化操作(包括檫除flash、通过SCI0口下载firmware)后,并且已经下载了firmware,如何能让CPU开始执行#firmware,如果我的firmware装载在flash的31页开始的空间,那么我在boot里有这样的定义:#define firmware ((void(*)(void))(0x8000))

然后在想要由boot转到firmware处写以下语句:PPAGE=0X31;firmware();这样是否可行,PPAGE的内容要不要压入堆栈。

第二,我写firmware程序的时候,CW12自动产生的prm文件应该怎么修改。因为用firmware必须生成可执行文件,但CW12生成的绝对地址文件已经没有意义,因为firmware的装载地址由boot决定。

第三,在执行firmware的过程中如果想更新firmware,那么加一条return语句后是否就能回到boot里执行更新操作。


 

 


作者: strongchen    时间: 2005-12-29 11:33

我想这个操作最好用一个汇编指令来执行。如果只需转去执行,不需返回,用跳转指令即可;如果需要返回,则用调用子程序的指令。注意要有那些跨页操作的,即带PPAGE操作的指令。
作者: shpdlizj    时间: 2005-12-30 15:43     标题: 在哪里看函数编译后生成代码的大小

strongchen:
我想知道在哪里看函数编译后生成代码的大小,另外如何修改最终的可执行文件的文件名?
谢谢
作者: seuafu2005    时间: 2005-12-31 10:42

可以查看.map文件,该文件在你的工程目录里面,打开以后可以看到你所有函数和变量存放的起始地址和大小。

可执行文件名可以在target setting->link for HC12 里面修改,改那个.abs结尾的名字。
作者: shpdlizj    时间: 2005-12-31 11:20     标题: 没有调用的函数会被连接器当成无用代码被而删除掉吗

在MCP文件里是不是只能看到被调用函数的目标代码大小和起始地址,没有被调用的函数在MCP文件里不会体现这些信息吗?
作者: strongchen    时间: 2005-12-31 11:59

是的。
作者: cqx9999    时间: 2006-1-3 15:24     标题: 如何用汇编进行这样的跨页操作

我想这个操作最好用一个汇编指令来执行。如果只需转去执行,不需返回,用跳转指令即可;如果需要返回,则用调用子程序的指令。注意要有那些跨页操作的,即带PPAGE操作的指令。

请教一下,如何用汇编进行这样的跨页操作啊?能否给个事例看看啊?
作者: strongchen    时间: 2006-1-4 10:08

asm jmp Address;

asm call Address;




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