打印
[STM8]

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

[复制链接]
6963|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文件包含了这个头文件,解决办法是加 关键字改变变量作用范围和生存周期。

使用特权

评论回复
5
mmuuss586| | 2015-4-17 12:23 | 只看该作者

重复定义了;
根据提示把相关的注释掉看看;

使用特权

评论回复
6
王一凡|  楼主 | 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.

使用特权

评论回复
7
王一凡|  楼主 | 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.

这应该怎么解决啊?

使用特权

评论回复
8
王一凡|  楼主 | 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,还是会报错。我就不知道该怎么处理了。。

使用特权

评论回复
9
lgq_123| | 2015-4-17 15:11 | 只看该作者
你可以不注释掉这两个文件中的f_NonHandledInterrupt这个函数,只需要把其中的一个函数名修改一下,然后在该调用的地方重新调用一下,,,

使用特权

评论回复
10
xjjspace| | 2015-4-17 15:54 | 只看该作者
王一凡 发表于 2015-4-17 13:54
在stm8s_it.c的文件里的定义是
extern @far @interrupt void NonHandledInterrupt(void)
{   

刚我开了下我自己的工程,你把stm8s_it.c移除你的工程目录试试,别的都恢复原样。

使用特权

评论回复
11
王一凡|  楼主 | 2015-4-17 16:59 | 只看该作者
lgq_123 发表于 2015-4-17 15:11
你可以不注释掉这两个文件中的f_NonHandledInterrupt这个函数,只需要把其中的一个函数名修改一下,然后在 ...

好的,我试试。。

使用特权

评论回复
12
王一凡|  楼主 | 2015-4-17 16:59 | 只看该作者
xjjspace 发表于 2015-4-17 15:54
刚我开了下我自己的工程,你把stm8s_it.c移除你的工程目录试试,别的都恢复原样。  ...

恩,好的。。谢谢哈。。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

2

主题

12

帖子

0

粉丝