RVMDK 4.10编译出现这样的错误!Error: L6218E: Undefined symbol FIQ_Handler (refer
如题,错误信息如下:TEST.axf: Error: L6218E: Undefined symbol DAbt_Handler (referred from aduc702x.o).
TEST.axf: Error: L6218E: Undefined symbol FIQ_Handler (referred from aduc702x.o).
TEST.axf: Error: L6218E: Undefined symbol IRQ_Handler (referred from aduc702x.o).
TEST.axf: Error: L6218E: Undefined symbol PAbt_Handler (referred from aduc702x.o).
TEST.axf: Error: L6218E: Undefined symbol SWI_Handler (referred from aduc702x.o).
TEST.axf: Error: L6218E: Undefined symbol Undef_Handler (referred from aduc702x.o).
不知大家有没有碰到,我也没有用到中断,只是一个简单的跑马灯例程。例程是用一个很老的版本realview2.xx建立的,有代码量限制,就换了现在的高版本。 启动文件也是用的默认的,怎么搞啊,浪费几天了!!!!
http://cache.amobbs.com/bbs_upload782111/files_34/ourdev_597394GFXI9U.JPG
(原文件名:未命名.JPG) 就是那几个函数没有定义 回复【2楼】superyongzhe最后的骑士
-----------------------------------------------------------------------
我都没有用到哪些函数!就只有一个Test.c:
/*********************************************************************
作者:QCM
功能:SPI接口测试,实现跑马灯显示
*********************************************************************/
#include<ADuC7026.h>
/*****************************************************************************/
unsigned char results = {0x7f,0xbf,0xdf,0xef,0xf7,0xfb,0xfd,0xfe};
/*****************************************************************************/
void delay(int lengh)
{
while(lengh>0)
lengh--;
}
/*****************************************************************************/
int main()
{
int i = 0;
GP1CON = 0x22220000; // 配置SPI总线
SPIDIV = 0xCC; // 配置SPI 时钟 40960000/(2x(1+SPIDIV))
// 0xCC = 100kHz
SPICON = 0x104B; // 使能SPI主机,连续转换模式
while(1)
{
SPITX = 0xff;
for (i=0;i<8;i++) // 跑马灯顺序显示
{
SPITX = results;
delay(200000);
}
delay(400000);
SPITX = 0xff;
for (i=7;i>=0;i--) // 跑马灯反序显示
{
SPITX = results;
delay(200000);
}
}
}
/*****************************************************************************/ 还有初始化代码可能使用这写函数,这里面的几个函数都是arm的异常中断处理函数。 看来是MDK为aduc72xx提供的启动代码的问题。我用MDK生成了一个试试,发现这些符号都是"EXTERN"的,看起来是要求自己动手实现这几个异常向量。在test.c中添加以下代码把这几个需要连接进入的函数加入就可以了
void DAbt_Handler(void)
{
while(1);
}
void FIQ_Handler(void)
{
while(1);
}
__asm void IRQ_Handler(void)
{
// todo: 响应中断
}
void PAbt_Handler(void)
{
while(1);
}
void SWI_Handler(void)
{
while(1);
}
void Undef_Handler(void)
{
while(1);
}
要注意的是IRQ_Handler()通常是必须要实现的,除非系统不使用中断。而且这个函数最好用汇编写,因为需要保护现场和操作寄存器。可以在保护现场后再调用一个C函数 回复【6楼】bluelucky
-----------------------------------------------------------------------
谢谢啊,还是没有解决,我移植到IAR了。按你的方法,编译没有问题,可是下载仿真的时候一点反应也没有,运行的还是原来的程序!感觉程序没有下载进去。而且仿真的时候C程序中都没有那个指示运行步骤的朝右的箭头,反汇编窗口有! http://cache.amobbs.com/bbs_upload782111/files_34/ourdev_599077AUBAZ8.JPG
(原文件名:JTAG仿真有问题.JPG)
页:
[1]