环境:KEIL4.7 + C++
使用了正点原子的源代码,如下:
#if 1
#pragma import(__use_no_semihosting)
struct __FILE
{
int handle;
};
FILE __stdout;
_sys_exit(int x)
{
x = x;
}
int fputc(int ch, FILE *f)
{
while((USART1->SR&0X40)==0);
USART1->DR = (u8) ch;
return ch;
}
#endif
微库没有打开,包含文件#include <stdio.h>。但是会报错:
FILE __stdout;
此处报错:Srcsp.cpp(891): error: #70: incomplete type is not allowed
_sys_exit(int x)
此处报错:Srcsp.cpp(893): error: #260-D: explicit type is missing ("int" assumed)
int fputc(int ch, FILE *f)
此处报错:Srcsp.cpp(898): error: #734: function "fputc(int, std::FILE *)" conflicts with using-declaration of function "std::fputc(int, std::FILE *) C"
采用微库方式,也会报错。
搞不懂啥原因,求指点,谢谢。
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
就是这个问题!!!!!终于找到了
二楼说得对
//??????
#pragma import(__use_no_semihosting_swi)
namespace std{
struct __FILE
{
int handle;
};
FILE __stdout;
FILE __stdin;
FILE __stderr;
//FILE *fopen(const char * __restrict /*filename*/,
// const char * __restrict /*mode*/)
// {
// usart1<<" fopen. ";
// return NULL;
// }
int fputc(int ch, std::FILE *f)
{
while((USART1->SR&0X40)==0);//???fputc
USART1->DR = (u8) ch;
return ch;
}
// int fgetc(FILE *f) {
// /* Your implementation of fgetc(). */
// usart1<<" fgetc ";
// return 0;
// }
int ferror(FILE *stream)
{
/* Your implementation of ferror(). */
return 0;
}
// long int ftell(FILE *stream){
// /* Your implementation of ftell(). */
// usart1<<"ftell ";
// return 0;
// }
// int fclose(FILE *f){
// /* Your implementation of fclose(). */
// usart1<<" fclose ";
// return 0;
// }
// int fseek(FILE *f, long nPos, int nMode){
// /* Your implementation of fseek(). */
// usart1<<"fseek ";
// return 0;
// }
int fflush(FILE *f)
{
/* Your implementation of fflush(). */
return 0;
}
extern "C" void _sys_exit(int)
{
/* declared in <stdlib.h> */
abort();
while(1);
}
extern "C" void _ttywrch(int ch)
{
while((USART1->SR&0X40)==0);
USART1->DR = (u8) ch;
return ;
}
}
#endif
我用C++弄,前面改成这样就可以用了
一周热门 更多>