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

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

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

我是用串口往MCU中下载程序的。配合windows超级终端,往flash下载好程序之后,必须先按ctrl+P,出现PC=F03D,然后修改为c029,最后输入G,才能正常运行下载在flash中的程序。
但是,一旦拔掉串口线,按复位健之后,程序就不能正常运行了。本人推测,是因为复位后,PC寄存器中的值复位成默认的F03D,所以不能指向程序的入口地址c029,导致不能正常运行程序。请教大侠们,原因是不是这样的呢?如何设置能使一复位后就能运行flash中的程序
先谢谢啦。。。。

注:我用的单片机是9s12dg128的。。。
你用的串口通讯监控程序(芯片中的)或BOOTLOADER是哪个?它没有关于中断矢量映射的说明吗?
海纳百川  有容乃大
我看了一本书,我觉得这段文字很有价值,不过不太懂:

监控程序代码小于4KB,放在地址$F000处。它把$FF80的中断向量表移到EF80处,顺序不变。用户可以使用$EF80处的中断向量表,此中断向量表和MC9sDP256手册上的中断向量表顺序相同,只是从$FF80移到了$EF80.监控程序运行起来时,如果串口在4s内没有收到数据就会检查$EFFE—$EFFF所指向的用户程序。如果程序运行起来4S内串口接到数据或者$EFFE—$EFFF为$FFFF,则进入DEBUG监控程序。

监控程序不是已经固化在flash中吗?为哪个之分吗?
谢谢解答。。。
芯片出厂时里面并没有监控程序,需要用BDM往里写。
海纳百川  有容乃大
用别人提供的监控程序只是为了方便调试,最后的系统程序还是要用BDM写的,如果是用BDM写的话应该不存在入口地址的问题。
哦,我们用的单片机已经集成在开发板上,里头已经有监控程序
照你上面提到的文档描述,你应该在编程时将C029写入EFFE~EFFF。
海纳百川  有容乃大
可以详细点吗?

还有,如果用BDM写的话,不会出现以上的问题,是吗?

比如你位于C029的用户程序入口函数为User_Entry,那么在PRM文件中你可以定义:

VECTOR ADDRESS 0xEFFE User_Entry

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

如果用BDM写用户程序,监控可能会被全部擦除。此时就需要采用原始的中断矢量地址区了。
海纳百川  有容乃大
谢谢
版主,我找了另一个方法:

用记事本,打开bin文件夹下的*.s19文件,把倒数第二行的 S105FFFEC02914,改为S105EFFEC02924就可以了,其中为什么把FFFE改为EFFE,上面的一个帖子已经说明

我现在#pragma还不怎么会用
不好意思,上面那个方法可能不是都适用。
这个方法只改了S19文件,并没有修改其他文件,所以调试的时候可能会有问题。另外,用PRM文件可以定义所有的中断矢量地址。当要修改的中断矢量较多时,修改S19文件就比较麻烦。
海纳百川  有容乃大
哦,谢谢!

还想问一个问题:如何使C029的指向定义的函数User_Entry?是在程序的开头体现出来吗?
我说的User_Entry只是个例子,你的C029必定是某个函数的起始地址吧。这个函数名就是所谓的User_Entry了。
海纳百川  有容乃大
返回列表