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

用清华那个开发板发现不能写中断函数

用清华那个开发板发现不能写中断函数

我用清华的开发板想熟悉下9s12dg128b,发现不写中断函数正常,但写了中断函数后连接就有问题,根据邵老师的书上介绍,中断向量被移到了EF8C-EFFF ,我的中断函数这样写的:i
nterrupt 7 void Realtimer(void){  }
然后在prm文件里规定了入口地址:
VECTOR  ADDRESS 0x0EFF0 Realtimer                    /* realtimee  */
编译后指示连接错误,信息如下:

Link Error   : L1119: Vector allocated at absolute address 0xEFF0 overlaps with sections placed in segment ROM_C000

Link Error   : Link failed
不知哪位高人能否指点一下,我用的是codewarrior3.1
              非学无以广才,非志无以成学;              
你已经将Realtimer定义为中断7,就不用在PRM文件里再定义入口地址了。
海纳百川  有容乃大

还是不行啊

我把prm文件里的VECTOR ADDRESS 0x0EFF0 Realtimer /* realtimee */这一行不要也不行。
另外我保留prm文件里这行不变,把原文件里interrupt后面的7不要,还是不行,请问大虾要怎么解决。
              非学无以广才,非志无以成学;              
在前面加一句声明,如下:

#pragma CODE_SEG __NEAR_SEG NON_BANKED
interrupt 7 void Realtimer(void){}
海纳百川  有容乃大

有几点疑惑

1、MOTOROLA HC12 Compiler手册第999页里好象要求原文件里要求这样写interrupt   void INCcount(void){},然后在prm文件里用VECTOR NUM_interrupt或VECTOR ADDR_interrupt。
2、我用处理器专家时,不管原文件里中断函数和prm文件里中断入口地址怎么安排都会连接失败。
3、我不用处理器专家时,如果在原文件里关键字"interrupt"和中断函数名之间不写任何中断号,同时在prm文件里用VECTOR 7 "中断函数名",这样就成功了,而此时prm文件里用VECTOR ADDRESS  NUM_addr,则不能成功,这样的话,邵老师说他们把中断向量空间移到了EF80-EFFF,我就没法把中断向量入口地址移过来了。
4、我发现用处理器专家和不用处理器专家生成的prm文件居然不相同,RAM和ROM的定位空间都不一样。而代理商的工程师第一次见面就建议我用处理器专家,我在网上还看到有人发贴说在使用处理器专家时发现并不好。
所以我希望strong_chen指点以下2个问题:
1、使用处理器专家有什么利弊?
2、按手册上介绍prm文件里中断函数地址安排可以用VECTOR+数字+函数名或用VECTOR ADDRESS+地址+函数名,至于原文件里关键字interrupt与函数名之间是否要加数字(中断号)则不太详细。
其他朋友如对此有较深的了解,能否贡献出来与大家共享
              非学无以广才,非志无以成学;              
可以这么说,使用处理器专家功能后,程序结构变得比较复杂,也会占用一些资源,所以在以后的编程中要笔记注意才行。
定义中断及其地址有多种方式,都是可以的。你可以各种方法都试试,就会体会它们各自的使用之道了。
海纳百川  有容乃大

codewarrior里处理器专家好象不是什么好东西

codewarrior hc12里处理器专家害得我好苦,原来专家里不能写中断函数!我真不知道处理器专家有什么好,看里面建的一些头文件半天都没弄清里面在搞什么名堂。
              非学无以广才,非志无以成学;              
返回列表