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

[求助]请教有关程序起始地址的问题

你用的串口通讯监控程序(芯片中的)或BOOTLOADER是哪个?它没有关于中断矢量映射的说明吗?
海纳百川  有容乃大
芯片出厂时里面并没有监控程序,需要用BDM往里写。
海纳百川  有容乃大
照你上面提到的文档描述,你应该在编程时将C029写入EFFE~EFFF。
海纳百川  有容乃大
比如你位于C029的用户程序入口函数为User_Entry,那么在PRM文件中你可以定义:

VECTOR ADDRESS 0xEFFE User_Entry

这样就可以将C029写入EFFE~EFFF里了。

如果用BDM写用户程序,监控可能会被全部擦除。此时就需要采用原始的中断矢量地址区了。
海纳百川  有容乃大
这个方法只改了S19文件,并没有修改其他文件,所以调试的时候可能会有问题。另外,用PRM文件可以定义所有的中断矢量地址。当要修改的中断矢量较多时,修改S19文件就比较麻烦。
海纳百川  有容乃大
我说的User_Entry只是个例子,你的C029必定是某个函数的起始地址吧。这个函数名就是所谓的User_Entry了。
海纳百川  有容乃大
EFFE处应该放的是你的用户程序的入口地址,但这个地址不一定非要是C029。如果你知道程序启动后从哪里开始执行,那么将这个起始函数的函数名用VECTOR ADDRESS的格式写入EFFE即可。现在你说程序入口地址是C029,那么这个C029是哪里来的呢?它是哪个函数的起始地址呢?
海纳百川  有容乃大
如果你想要程序从START12.C中的_Startup开始执行,就这样写:
VECTOR ADDRESS 0xEFFE _Startup
如果你想程序从main处开始执行,就这样写:
VECTOR ADDRESS 0xEFFE main
但是main函数必须放入非分页地址中,要在它前面加一个声明
#pragma CODE_SEG __NEAR_SEG NON_BANKED
以上是指采用CodeWarrior自带的start12.c时的情形。我不知道你的project是采用这个文件,还是监控程序另外提供了一个start12.c文件。
海纳百川  有容乃大
我想在网上肯定可以找到很多关于S19文件格式的介绍。
在S19文件中,以S0开头的行是起始行,里面是文件属性的信息;
以S1开头的行才是16进制文件的正文;S1后面的一个字节表示此行的字节数,然后跟着的是两个字节地址,最后一个字节是校验和;
以S9开头行是整个S19文件的结束行,里面的内容与16进制程序无关,可以不用管它。
海纳百川  有容乃大
不是的,S9行的内容与程序本身无关,一般都写为0。
海纳百川  有容乃大
你试试将PRM文件中ROM_C000段的定义中,将结束地址由0xFEFF改为0xEEFF。
海纳百川  有容乃大
这应该与CodeWarrior的版本无关,而应该与你使用的监控程序有关。如果有BDM,就用不着监控程序了。
海纳百川  有容乃大
返回列表