新手上路
- 积分
- 33
- 金钱
- 33
- 注册时间
- 2016-5-12
- 在线时间
- 5 小时
|
1金钱
本帖最后由 tan143 于 2016-5-13 11:39 编辑
请教高手:
我用的MDK5.14,库函数版本3.5,Mini板,STM32F103RCT6;
自己新建的工程,用原子哥的参考代码 SYSTEM 里面的usart.c,
//加入以下代码,支持printf函数,而不需要选择use MicroLIB
#if 1
#pragma import(__use_no_semihosting)
//标准库需要的支持函数
struct __FILE
{
int handle;
};
//FILE __stdout;
//定义_sys_exit()以避免使用半主机模式
_sys_exit(int x)
{
x = x;
}
//重定义fputc函数
int fputc(int ch, FILE *f)
{
while((USART1->SR&0X40)==0);//循环发送,直到发送完毕
USART1->DR = (u8) ch;
return ch;
}
#endif
在不勾选 use microlib后,进行编译,会弹出如下错误:
linking...
.\OBJ\HostDriver.axf: Error: L6200E: Symbol __stdout multiply defined (by stdio_streams.o and usart.o).
Not enough information to list image symbols.
Not enough information to list the image map.
Finished: 2 information, 0 warning and 1 error messages.
".\OBJ\HostDriver.axf" - 1 Error(s), 0 Warning(s).
如果我注释掉 FILE __stdout 这一行则会报出其他的错误:
linking...
.\OBJ\HostDriver.axf: Error: L6915E: Library reports error: __use_no_semihosting was requested, but _sys_open was referenced
.\OBJ\HostDriver.axf: Error: L6915E: Library reports error: __use_no_semihosting was requested, but _ttywrch was referenced
Finished: 0 information, 0 warning and 2 error messages.
".\OBJ\HostDriver.axf" - 2 Error(s), 0 Warning(s).
奇怪的是,如果直接用原子哥的模板工程则不会报错。
刚才我又试过直接用原子哥的模板,然后将自己的APP程序文件夹添加工程目录下,再编译,发现会弹出同样的错误。
然后我再删除掉我自己的APP目录又好了,我怀疑是不是我的APP程序里面有用到什么不该用的函数?
还是说我的APP文件夹放的位置不对?(我是将APP文件夹、SYSTEM文件夹、CORE、USER在一个目录下的)
再次补充::
我发现问题出在哪了,但是不知道怎么解决:情况如下:
在我的APP文件夹里面有一个文件 cybtldr_parse.c,这个文件是解析其他文件流的函数,其中有一个定义:static FILE* dataFile;应该是这一个定义和其他的定义冲突了;
这个问题能解决吗?还是说这两者不能同时存在?
|
最佳答案
查看完整内容[请看2#楼]
原因就是我最后发现的那个,有一个解析文件的地方,定义了:static FILE* dataFile,这样就出现冲突了。
|