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

一个中断的问题,求教

一个中断的问题,求教

请问,如果消除由中断结束时写#pragma CODE_SEG DEFAULT语句时产生的警告?
谢谢
对不起..
#pragma CODE_SEG DEFAULT这个语句只是表示你后面的代码在默认的代码空间里面
和中断没有关系啊?

把你的问题详细描述一下?
例如下面这个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的话?
对不起..
把要放到default里面的程序写到中断程序的前面去呢?
你的意思是,ISR全部放到程序的最下面,然后就不写这句话了对吗?
嗯这是个好办法...这样可以的..
(顺便问一下)但是没有一种表达同样意思可以代替的语句吗?
对不起..
对,是这个意思,把ISR放后面
产生这个错误可能是和其他文件的段相冲突了,好像没有其他的替代方式
返回列表