|
|
親,首先檢查一下RX與TX是不是交叉相連,如果不是請(qǐng)把代碼先發(fā)出來(lái),看一下有沒(méi)有寫錯(cuò),最后,搜索半主機(jī)調(diào)試。
半主機(jī)是這么一種機(jī)制,它使得在ARM目標(biāo)上跑的代碼,如果主機(jī)電腦運(yùn)行了調(diào)試器,那么該代碼可以使用該主機(jī)電腦的輸入輸出設(shè)備。
這點(diǎn)非常重要,因?yàn)殚_發(fā)初期,可能開發(fā)者根本不知道該 ARM 器件上有什么輸入輸出設(shè)備,而半主基機(jī)制使得你不用知道ARM器件的外設(shè),利用主機(jī)電腦的外設(shè)就可以實(shí)現(xiàn)輸入輸出調(diào)試。
所以要利用目標(biāo) ARM器件的輸入輸出設(shè)備,首先要關(guān)掉半主機(jī)機(jī)制。然后再將輸入輸出重定向到 ARM 器件上,如 printf 和 scanf,你需要重寫 fputc和 fgetc 函數(shù)。下面就是將 scanf 和 printf 重定向到 uart 的代碼。
int fputc(int ch, FILE *f)
{
while (USART_GetFlagStatus(USART1, USART_FLAG_TC) == RESET)
{
}
USART_SendData(USART1, (uint8_t) ch);
return ch;
}
int fgetc(FILE *f)
{
int ch;
while (USART_GetFlagStatus(USART1, USART_FLAG_RXNE) == RESET)
{
}
ch = USART_ReceiveData(USART1);
while (USART_GetFlagStatus(USART1, USART_FLAG_TC) == RESET)
{
}
USART_SendData(USART1, (uint8_t) ch);
return ch;
}
printf() 之類的函數(shù),使用了半主機(jī)模式。使用標(biāo)準(zhǔn)庫(kù)會(huì)導(dǎo)致程序無(wú)法運(yùn)行 ,以下是解決方法 :
方法 1.使用微庫(kù) ,因?yàn)槭褂梦?kù)的話 ,不會(huì)使用半主機(jī)模式 .
如果使用的是 MDK,請(qǐng)?jiān)诠こ虒傩缘?“Target “- 》”Code Generation “中勾選 ”Use MicroLIB “這樣以后就可以
使用 printf ,sprintf 函數(shù)了
方法 2.仍然使用標(biāo)準(zhǔn)庫(kù) ,在主程序添加下面代碼 :
/*為確保沒(méi)有從 C 庫(kù)鏈接使用半主機(jī)的函數(shù),因?yàn)椴皇褂冒胫鳈C(jī),標(biāo)準(zhǔn) C 庫(kù) stdio.h 中有些使用半主機(jī)的
函數(shù)要重新寫 ,您必須為這些函數(shù)提供自己的實(shí)現(xiàn) */
#pragma import(__use_no_semihosting) // 確保沒(méi)有從 C 庫(kù)鏈接使用半主機(jī)的函數(shù)
_sys_exit(int x) //定義 _sys_exit() 以避免使用半主機(jī)模式
{
x = x;
}
struct __FILE // 標(biāo)準(zhǔn)庫(kù)需要的支持函數(shù)
{
int handle;
};
/* FILE is typedef ’ d in stdio.h. */
FILE __stdout;
在獨(dú)立應(yīng)用程序中,您不太可能支持半主機(jī)操作。 因此,必須確保您的應(yīng)用程序中沒(méi)有鏈接 C 庫(kù)半主機(jī)函數(shù)。
為確保沒(méi)有從 C 庫(kù)鏈接使用半主機(jī)的函數(shù), 必須導(dǎo)入符號(hào) __use_no_semihosting 。可在您工程的任何 C 或匯編語(yǔ)言源文件中執(zhí)行此操作,如下所示:
在 C 模塊中,使用 #pragma 指令:
#pragma import(__use_no_semihosting)
在匯編語(yǔ)言模塊中,使用 IMPORT 指令:
IMPORT __use_no_semihosting
如果仍然鏈接了使用半主機(jī)的函數(shù),則鏈接器會(huì)報(bào)告錯(cuò)誤。
————————————————
版權(quán)聲明:本文為CSDN博主「Robben.Han」的原創(chuàng)文章,遵循 CC 4.0 BY-SA 版權(quán)協(xié)議,轉(zhuǎn)載請(qǐng)附上原文出處鏈接及本聲明。
原文鏈接:https://blog.csdn.net/hxlawf/article/details/89491088 |
|