[STM8] 我新建的工程在编译的时候出现这个问题?该怎么解决呢?

[复制链接]
7287|11
 楼主| 王一凡 发表于 2015-4-17 11:28 | 显示全部楼层 |阅读模式
#error clnk Debug\stm8af626x.lkf:84 Debug\stm8_interrupt_vector.o: symbol f_NonHandledInterrupt multiply defined (Debug\stm8s_it.o)
The command: "clnk -l"C:\Program Files (x86)\COSMIC\CXSTM8\Lib"  -o Debug\stm8af626x.sm8 -mDebug\stm8af626x.map Debug\stm8af626x.lkf " has failed, the returned value is: 1
exit code=1.

看了同样出现这个问题的的帖子,所说的解决方法是就是:
将stm8s_it.c文件的INTERRUPT_HANDLER(NonHandledInterrupt,0)注释掉,更本行不通。求大神们指导。。
戈卫东 发表于 2015-4-17 11:42 | 显示全部楼层
f_NonHandledInterrupt
应该是这个函数在两个文件中被定义了两次
chenyu988 发表于 2015-4-17 11:44 | 显示全部楼层
重复定义
xjjspace 发表于 2015-4-17 11:49 | 显示全部楼层
变量重复定义了,两个可能:
1,你确实定义了两个同名变量,解决办法是查找这个变量,看在哪里出现重复,改一下,;
2,这个变量被你定义在头文件中,而你的多个C文件包含了这个头文件,解决办法是加 关键字改变变量作用范围和生存周期。
mmuuss586 发表于 2015-4-17 12:23 | 显示全部楼层

重复定义了;
根据提示把相关的注释掉看看;
 楼主| 王一凡 发表于 2015-4-17 13:47 | 显示全部楼层
戈卫东 发表于 2015-4-17 11:42
f_NonHandledInterrupt
应该是这个函数在两个文件中被定义了两次

我找到那个函数是在stm8s_it.c和stm8s_interrupt_vector.c这两个文件中给了定义,但是我分别将其中的一个注释掉了之后,就报了下面的错误了:
clnk -l"C:\Program Files (x86)\COSMIC\CXSTM8\Lib"  -o Debug\stm8af626x.sm8 -mDebug\stm8af626x.map Debug\stm8af626x.lkf
#error clnk Debug\stm8af626x.lkf:1 symbol f_UART1_ITConfig not defined (Debug\main.o Debug\stm8s_it.o )
#error clnk Debug\stm8af626x.lkf:1 symbol f_UART3_ITConfig not defined (Debug\main.o Debug\stm8s_it.o )
#error clnk Debug\stm8af626x.lkf:1 symbol f_UART1_DeInit not defined (Debug\main.o )
#error clnk Debug\stm8af626x.lkf:1 symbol f_UART3_DeInit not defined (Debug\main.o )
#error clnk Debug\stm8af626x.lkf:1 symbol f_UART1_Init not defined (Debug\main.o )
#error clnk Debug\stm8af626x.lkf:1 symbol f_UART3_Init not defined (Debug\main.o )
#error clnk Debug\stm8af626x.lkf:1 symbol f_UART1_SendData8 not defined (Debug\stm8s_it.o )
#error clnk Debug\stm8af626x.lkf:1 symbol f_UART1_ReceiveData8 not defined (Debug\stm8s_it.o )
#error clnk Debug\stm8af626x.lkf:1 symbol f_UART3_SendData8 not defined (Debug\stm8s_it.o )
#error clnk Debug\stm8af626x.lkf:1 symbol f_UART3_ReceiveData8 not defined (Debug\stm8s_it.o )
The command: "clnk -l"C:\Program Files (x86)\COSMIC\CXSTM8\Lib"  -o Debug\stm8af626x.sm8 -mDebug\stm8af626x.map Debug\stm8af626x.lkf " has failed, the returned value is: 1
exit code=1.
 楼主| 王一凡 发表于 2015-4-17 13:49 | 显示全部楼层
mmuuss586 发表于 2015-4-17 12:23
重复定义了;
根据提示把相关的注释掉看看;

我知道报错是因为重定义了,但是我把其中的一个注释掉之后又出现了下面的问题:
clnk -l"C:\Program Files (x86)\COSMIC\CXSTM8\Lib"  -o Debug\stm8af626x.sm8 -mDebug\stm8af626x.map Debug\stm8af626x.lkf
#error clnk Debug\stm8af626x.lkf:1 symbol f_UART1_ITConfig not defined (Debug\main.o Debug\stm8s_it.o )
#error clnk Debug\stm8af626x.lkf:1 symbol f_UART3_ITConfig not defined (Debug\main.o Debug\stm8s_it.o )
#error clnk Debug\stm8af626x.lkf:1 symbol f_UART1_DeInit not defined (Debug\main.o )
#error clnk Debug\stm8af626x.lkf:1 symbol f_UART3_DeInit not defined (Debug\main.o )
#error clnk Debug\stm8af626x.lkf:1 symbol f_UART1_Init not defined (Debug\main.o )
#error clnk Debug\stm8af626x.lkf:1 symbol f_UART3_Init not defined (Debug\main.o )
#error clnk Debug\stm8af626x.lkf:1 symbol f_UART1_SendData8 not defined (Debug\stm8s_it.o )
#error clnk Debug\stm8af626x.lkf:1 symbol f_UART1_ReceiveData8 not defined (Debug\stm8s_it.o )
#error clnk Debug\stm8af626x.lkf:1 symbol f_UART3_SendData8 not defined (Debug\stm8s_it.o )
#error clnk Debug\stm8af626x.lkf:1 symbol f_UART3_ReceiveData8 not defined (Debug\stm8s_it.o )
The command: "clnk -l"C:\Program Files (x86)\COSMIC\CXSTM8\Lib"  -o Debug\stm8af626x.sm8 -mDebug\stm8af626x.map Debug\stm8af626x.lkf " has failed, the returned value is: 1
exit code=1.

这应该怎么解决啊?
 楼主| 王一凡 发表于 2015-4-17 13:54 | 显示全部楼层
xjjspace 发表于 2015-4-17 11:49
变量重复定义了,两个可能:
1,你确实定义了两个同名变量,解决办法是查找这个变量,看在哪里出现重复,改 ...

在stm8s_it.c的文件里的定义是
extern @far @interrupt void NonHandledInterrupt(void)
{   
/*
                In order to detect unexpected events during development,
    it is recommended to set a breakpoint on the following instruction.
*/
}

而在stm8_interrupt_vector.c的文件里的定义是

@far @interrupt void NonHandledInterrupt(void)
{
/*
           in order to detect unexpected events during development,
           it is recommended to set a breakpoint on the following instruction
       
*/
        return;
}

在头文件里的定义
#ifdef _COSMIC_
void _stext(void); /* RESET startup routine */
INTERRUPT void NonHandledInterrupt(void);
#endif /* _COSMIC_ */

即使是在 INTERRUPT void NonHandledInterrupt(void);前面加了extern,还是会报错。我就不知道该怎么处理了。。
lgq_123 发表于 2015-4-17 15:11 | 显示全部楼层
你可以不注释掉这两个文件中的f_NonHandledInterrupt这个函数,只需要把其中的一个函数名修改一下,然后在该调用的地方重新调用一下,,,
xjjspace 发表于 2015-4-17 15:54 | 显示全部楼层
王一凡 发表于 2015-4-17 13:54
在stm8s_it.c的文件里的定义是
extern @far @interrupt void NonHandledInterrupt(void)
{   

刚我开了下我自己的工程,你把stm8s_it.c移除你的工程目录试试,别的都恢复原样。
 楼主| 王一凡 发表于 2015-4-17 16:59 | 显示全部楼层
lgq_123 发表于 2015-4-17 15:11
你可以不注释掉这两个文件中的f_NonHandledInterrupt这个函数,只需要把其中的一个函数名修改一下,然后在 ...

好的,我试试。。
 楼主| 王一凡 发表于 2015-4-17 16:59 | 显示全部楼层
xjjspace 发表于 2015-4-17 15:54
刚我开了下我自己的工程,你把stm8s_it.c移除你的工程目录试试,别的都恢复原样。  ...

恩,好的。。谢谢哈。。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

2

主题

12

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部