问题1(与编译软件无关):在程序中参加printf句子完成串口输出,但未写重定向函数fputc,呈现编译无任何警号和过错直接下载无法运转,软件仿真可以运转至MAIN函数,硬件仿真在汇编窗口看到停留在“0x0800XXXX
解决办法:编写fputc函数如下:
int fputc(int ch, FILE *f)
{
USART_SendData(USART1, (uint8_t) ch);
while (USART_GetFlagStatus(USART1, USART_FLAG_TC) == RESET)
{}
return ch;
}
int
{
}
问题2(与编译软件有关):重定向函数fputc编写无误,运用的是MDK4.22-3.40之间的编译环境,未运用微库,即MiclroLIB,因printf()之类的函数,运用了半主机形式。运用微库的话,不会运用半主机形式,所以就没有问题。
解决办法:在option
问题3:重定向函数fputc编写无误,不必微库,即MiclroLIB,仍然可以运用printf
解决办法:
在程序中参加如下句子:
#pragma
_sys_exit(int
{
x
}
struct
{
int
};
FILE
此代码功用用于防止运用semhosting(半主机形式)
问题4:运用的是MDK4.22-3.40之间的编译环境,不想运用微库,也不想参加问题三句子。
解决办法:
替换低版本的MDK,3.4以下吧,自己实验运用mdk3.24不勾选MiclroLIB,也不参加问题三句子,可以正常运用printf,无任何问题。