我做的一个产品(用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里执行更新操作。
|