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

如何编写由2个S19文件组成的系统

如何编写由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里执行更新操作。


 

 

              非学无以广才,非志无以成学;              
我想这个操作最好用一个汇编指令来执行。如果只需转去执行,不需返回,用跳转指令即可;如果需要返回,则用调用子程序的指令。注意要有那些跨页操作的,即带PPAGE操作的指令。
海纳百川  有容乃大

在哪里看函数编译后生成代码的大小

strongchen:
我想知道在哪里看函数编译后生成代码的大小,另外如何修改最终的可执行文件的文件名?
谢谢
              非学无以广才,非志无以成学;              
可以查看.map文件,该文件在你的工程目录里面,打开以后可以看到你所有函数和变量存放的起始地址和大小。

可执行文件名可以在target setting->link for HC12 里面修改,改那个.abs结尾的名字。

没有调用的函数会被连接器当成无用代码被而删除掉吗

在MCP文件里是不是只能看到被调用函数的目标代码大小和起始地址,没有被调用的函数在MCP文件里不会体现这些信息吗?
              非学无以广才,非志无以成学;              
是的。
海纳百川  有容乃大

如何用汇编进行这样的跨页操作

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

请教一下,如何用汇编进行这样的跨页操作啊?能否给个事例看看啊?
asm jmp Address;

asm call Address;
海纳百川  有容乃大
返回列表