#pragma import(__use_no_semihosting)
/******************************************************************************
*标准库需要的支持函数
******************************************************************************/
struct __FILE
{
int handle;
/* Whatever you require here. If the only file you are using is */
/* standard output using printf() for debugging, no file handling */
/* is required. */
};
/* FILE is typedef’ d in stdio.h. */
FILE __stdout;
你的重定向有点问题啊,用下面这个吧,我发一个串口的文件给你,你打开看看,上面的四个串口都是同时在运行的
重定向程序
#if 1
//可以在这里写
//#define USARTx 为哪个串口,我用的方法是,当用到哪个串口时,就把哪个串口赋给USARTx
//例如要用到串口4,那就写成
//USARTx =UART4 ;
//不过你得先定义一下USARTx 这个变量,定义为32位的,因为UART4是指向一个32位的地址的,上面的赋值只是把
//UART4指向的地址赋给USARTx 而已,其它串口的使用也是一样的
#pragma import(__use_no_semihosting)
/******************************************************************************
*标准库需要的支持函数
******************************************************************************/
struct __FILE
{
int handle;
/* Whatever you require here. If the only file you are using is */
/* standard output using printf() for debugging, no file handling */
/* is required. */
};
/* FILE is typedef’ d in stdio.h. */
FILE __stdout;
/// <summary>
/// 定义_sys_exit()以避免使用半主机模式
/// </summary>
/// <param name="x"></param>
/// <returns></returns>
_sys_exit(int x)
{
x = x;
}
int fputc(int ch, FILE *f)
{
USARTx->DR = (u8) ch;
/* Loop until the end of transmission */
while(USART_GetFlagStatus(USARTx, USART_FLAG_TXE) == RESET)
{
}
return ch;
}
/*******************************************************************************
* 函数名 :fgetc
* 输 入 :
* 输 出 :
* 功能说明 :
* 重定义getc函数,这样可以使用scanff函数从串口1输入数据
*******************************************************************************/
int fgetc(FILE *f)
{
/* 等待串口1输入数据 */
while (USART_GetFlagStatus(USARTx, USART_FLAG_RXNE) == RESET);
return (int)USART_ReceiveData(USARTx);
}
#endif
好的,我先试试看,有什么问题我们再探讨,谢谢你。
不用谢,上面的程序是在我跑裸机的时候用的,我现在才刚刚开始跑系统,也是uCOS II的
开始还发了几个数是正确的 只不过中间有些乱数据 但再下进去就程序跑不起来了 可能是哪里还没对
一周热门 更多>