Board logo

标题: 一个中断的问题,求教 [打印本页]

作者: mmanyy    时间: 2007-6-11 11:39     标题: 一个中断的问题,求教

请问,如果消除由中断结束时写#pragma CODE_SEG DEFAULT语句时产生的警告?
谢谢
作者: seuafu2005    时间: 2007-6-11 13:27

#pragma CODE_SEG DEFAULT这个语句只是表示你后面的代码在默认的代码空间里面
和中断没有关系啊?

把你的问题详细描述一下?
作者: mmanyy    时间: 2007-6-11 13:53

例如下面这个ISR:
#pragma CODE_SEG NON_BANKED
#pragma TRAP_PROC
void ISR_Spi(void)
{
SPI_data =SPIDR;
(void) SPISR;
}
#pragma CODE_SEG DEFAULT_ROM
因为中断要放到NON_BANKED里,所以ISR开始要加#pragma CODE_SEG NON_BANKED的吧,然后后面的还要放回默认位置,就需要加#pragma CODE_SEG DEFAULT_ROM.
但是上面这段程序会产生一个警告,警告代号C3804,描述是:
Description
A Segment name was recognized which is a predefined one. Predefined segment names are FUNCS, STRINGS, ROM_VAR, COPY, STARTUP, _PRESTART, SSTACK, DEFAULT_RAM, DEFAULT_ROM and _OVERLAP. If you use such segment names, this may raise conflicts during linking.

Example
#pragma CODE_SEG FUNCS // WARNING here

Tips
Use another name. Do not use predefined segment names.

但是我应该用什么来代替呢,如果需要把下面的内容放入DEFAULT_ROM的话?
作者: seuafu2005    时间: 2007-6-11 14:10

把要放到default里面的程序写到中断程序的前面去呢?
作者: mmanyy    时间: 2007-6-11 14:21

你的意思是,ISR全部放到程序的最下面,然后就不写这句话了对吗?
嗯这是个好办法...这样可以的..
(顺便问一下)但是没有一种表达同样意思可以代替的语句吗?
作者: seuafu2005    时间: 2007-6-11 17:50

对,是这个意思,把ISR放后面
产生这个错误可能是和其他文件的段相冲突了,好像没有其他的替代方式




欢迎光临 电子技术论坛_中国专业的电子工程师学习交流社区-中电网技术论坛 (http://bbs.eccn.com/) Powered by Discuz! 7.0.0