看了原子哥的usart部分printf函數(shù)重定向的問(wèn)題,自己動(dòng)手試了試,單片機(jī)可以通過(guò)串口打印信息,printf函數(shù)重定向后使用十分方便。
所謂重定向是指修改printf的底層函數(shù),使printf打印到單片機(jī)的外設(shè)中。
還有一個(gè)概念是半主機(jī)。
半主機(jī)是用于 ARM 目標(biāo)的一種機(jī)制,可將來(lái)自應(yīng)用程序代碼的輸入/輸出請(qǐng)求傳送至運(yùn)行調(diào)試器的主機(jī)。 例如,使用此機(jī)制可以啟用 C 庫(kù)中的函數(shù),如 printf() 和 scanf(),來(lái)使用主機(jī)的屏幕和鍵盤,而不是在目標(biāo)系統(tǒng)上配備屏幕和鍵盤。
這種機(jī)制很有用,因?yàn)殚_發(fā)時(shí)使用的硬件通常沒有最終系統(tǒng)的所有輸入和輸出設(shè)備。 半主機(jī)可讓主機(jī)來(lái)提供這些設(shè)備。
半主機(jī)是通過(guò)一組定義好的軟件指令(如 SVC)來(lái)實(shí)現(xiàn)的,這些指令通過(guò)程序控制生成異常。 應(yīng)用程序調(diào)用相應(yīng)的半主機(jī)調(diào)用,然后調(diào)試代理處理該異常。 調(diào)試代理提供與主機(jī)之間的必需通信。
半主機(jī)接口對(duì) ARM 公司提供的所有調(diào)試代理都是通用的。 在無(wú)需移植的情況下使用 RealView ARMulator? ISS、指令集系統(tǒng)模型 (ISSM)、實(shí)時(shí)系統(tǒng)模型 (RTSM)、RealView ICE 或 RealMonitor 時(shí),會(huì)執(zhí)行半主機(jī)操作。
標(biāo)準(zhǔn)庫(kù)使用半主機(jī)模式,半主機(jī)是通過(guò)一組定義好的軟件指令 (如 SVC)SVC 指令 (以前稱為 SWI 指令)來(lái)實(shí)現(xiàn)的,這些指令通過(guò)程序控制生成異常。 應(yīng)用程序調(diào)用相應(yīng)的半主機(jī)調(diào)用,然后調(diào)試代理處理該異常。調(diào)試代理(這里的調(diào)試代理是仿真器)提供與主機(jī)之間的必需通信。也就是說(shuō)使用半主機(jī)模式必須使用仿真器調(diào)試。
ARMv7 之前的 ARM 處理器使用 SVC 指令 (以前稱為 SWI 指令)進(jìn)行半主機(jī)調(diào)用。 但是,如果要為 ARMv6-M 或 ARMv7-M (如 Cortex?-M1 或 Cortex-M3 處理器)進(jìn)行編譯,請(qǐng)使用 BKPT 指令來(lái)實(shí)現(xiàn)半主機(jī)。
簡(jiǎn)單的來(lái)說(shuō),半主機(jī)模式就是通過(guò)仿真器實(shí)現(xiàn)開發(fā)板在電腦上的輸入和輸出。和半主機(jī)模式功能相同的是ITM調(diào)試機(jī)制。
上面介紹的半主機(jī)和ITM功能相當(dāng),他們都是調(diào)試機(jī)制,開發(fā)板均借助仿真器與電腦連接,實(shí)現(xiàn)單片機(jī)利用主機(jī)的屏幕鍵盤的輸入輸出。
這兩種機(jī)制的運(yùn)行均需要仿真器,否則無(wú)法運(yùn)行。
開發(fā)式一般單片機(jī)需要獨(dú)立運(yùn)行,開發(fā)者應(yīng)去掉仿真器,把printf函數(shù)通過(guò)單片機(jī)的外設(shè)來(lái)實(shí)現(xiàn),例如通過(guò)開發(fā)板的串口,lcd或者sd卡。
MDK中通常使用以下兩種方法:
方法1.使用微庫(kù),因?yàn)槭褂梦?kù)的話,不會(huì)使用半主機(jī)模式.
int fputc(int ch, FILE *f)
{
while((USART1->SR&0X40)==0);
USART1->DR = (u8) ch;
return ch;
}
方法2.仍然使用標(biāo)準(zhǔn)庫(kù),在主程序添加下面代碼:
#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;
}
關(guān)于 microlib
microlib 是缺省 C 庫(kù)的備選庫(kù)。 它用于必須在極少量?jī)?nèi)存環(huán)境下運(yùn)行的深層嵌入式應(yīng)用程序。 這些應(yīng)用程序不在操作系統(tǒng)中運(yùn)行。microlib 不會(huì)嘗試成為符合標(biāo)準(zhǔn)的 ISO C 庫(kù)。
microlib 進(jìn)行了高度優(yōu)化以使代碼變得很小。 它的功能比缺省 C 庫(kù)少,并且根本不具備某些 ISO C 特性。某些庫(kù)函數(shù)的運(yùn)行速度也比較慢,例如,memcpy()。
上面給出了正確的方法,我在測(cè)試的過(guò)程中發(fā)現(xiàn)方法二中注釋掉#pragma import(__use_no_semihosting) 程序依然運(yùn)行正確,這個(gè)很讓人費(fèi)解。
也有使用#pragma import(__use_no_semihosting_swi)的。這幾個(gè)的區(qū)別我沒弄懂。
如果使用微庫(kù)或者禁用半主機(jī),沒有重定義fputc函數(shù),程序可以運(yùn)行,但不知道結(jié)果打印到主機(jī)的哪個(gè)地方去了。既沒有禁用半主機(jī)也沒有重定義fputc函數(shù),程序?qū)⒁恢蓖T谥袛嗵帲鐖D:
網(wǎng)上的大部分資料都是禁用了半主機(jī)模式,沒有使用過(guò)半主機(jī)模式借助主機(jī)的鍵盤輸入?yún)?shù),看了很多資料,都是講半主機(jī)的,但講的內(nèi)容太淺顯,
我沒有學(xué)會(huì)使用半主機(jī),更多的是學(xué)會(huì)了禁用半主機(jī)模式,我們好像忽略了半主機(jī)模式的意義。
另外,我們可以查到的大部分資料講解的大同小異,它們更多的告訴我們正確的步驟,而不是讓我們從源頭了解一個(gè)問(wèn)題,當(dāng)然,大部分人看重的是實(shí)用,問(wèn)題解決了,也就不再去思考背后的原理。
最有效最直接最權(quán)威的資料是mdk官方給出的資料,但是資料內(nèi)容太多,看起來(lái)太多,不易懂,大部分人沒有看下去的欲望。我們應(yīng)該讓使用手冊(cè)看起來(lái)更直觀,更易懂,更方便查閱,更高效地查閱。
上一篇:stm32 一上電串口發(fā)送0x00
下一篇:基于STM32的ADS8339 驅(qū)動(dòng)
推薦閱讀
史海拾趣
設(shè)計(jì)資源 培訓(xùn) 開發(fā)板 精華推薦
- 意法半導(dǎo)體推出用于匹配遠(yuǎn)距離無(wú)線微控制器STM32WL33的集成的匹配濾波芯片
- ESP32開發(fā)板連接TFT顯示屏ST7789跳坑記
- 如何讓ESP32支持analogWrite函數(shù)
- LGVL配合FreeType為可變字體設(shè)置字重-ESP32篇
- 使用樹莓派進(jìn)行 ESP32 Jtag 調(diào)試
- ESP32怎么在SPIFFS里面存儲(chǔ)html,css,js文件,以及網(wǎng)頁(yè)和arduino的通訊
- ESP32 freeRTOS使用測(cè)試
- API調(diào)用小記(Touchdesigner和ESP32)
- 關(guān)于ESP32/8266使用async-mqtt-client庫(kù)的一些基本介紹
- 座椅、天窗、電動(dòng)尾門應(yīng)用 國(guó)產(chǎn)車規(guī)級(jí)高壓霍爾效應(yīng)傳感器推薦
- 突發(fā)!又一車企車機(jī)“崩了”
- 寧德時(shí)代為陳立泉院士頒發(fā)“卓越貢獻(xiàn)獎(jiǎng)”
- 一文速覽吉利雷神 AI 電混 2.0 發(fā)布會(huì)重點(diǎn)
- 2025年1-4月ADAS供應(yīng)商裝機(jī)量排行榜:頭部集中與國(guó)產(chǎn)突圍并存
- 國(guó)內(nèi)飛行汽車無(wú)線通信測(cè)試成功,通信安全新突破
- SPAD席卷車載激光雷達(dá)市場(chǎng)
- 大聯(lián)大品佳集團(tuán)推出基于Microchip和ams OSRAM產(chǎn)品的10Base-T1S萬(wàn)級(jí)像素大燈方案
- 哈曼推出采用三星Neo QLED技術(shù)的全新顯示屏
- Syntiant推出超低功耗汽車AI創(chuàng)新技術(shù) 提升車輛安全性和用戶體驗(yàn)
- 是德科技有獎(jiǎng)問(wèn)答活動(dòng)之一,A4WP無(wú)線充電測(cè)試的示波器方案,答題闖關(guān)贏好禮!
- 下載文章:“深入了解信號(hào)發(fā)生器”豐富知識(shí)贏取好禮
- 提交創(chuàng)意【免費(fèi)贏取600元DIY物料】,參賽沖擊萬(wàn)元大獎(jiǎng)!2022得捷創(chuàng)新設(shè)計(jì)大賽火熱報(bào)名中
- 【搶樓有禮】TI TMS320F28377S 入門經(jīng)驗(yàn)大搜集!
- 助力電賽,搶樓有禮啦~~
- 【雙11特別推薦】新產(chǎn)品,新方案,#TI“芯”世界#之電機(jī)驅(qū)動(dòng)器
- 柵極驅(qū)動(dòng)挑花眼?看英飛凌來(lái)支招
- 有獎(jiǎng)直播:走進(jìn)實(shí)驗(yàn)室之是德科技高端新品示波器UXR-B測(cè)評(píng)
- 天津眾推科技研發(fā)出智能電話機(jī)器人,未來(lái)電銷會(huì)被機(jī)器人代替嗎
- 驚訝!不敢相信,機(jī)器人既然可以在任何垂直的表面上畫畫
- 震驚還是荒謬,日本研發(fā)八腳動(dòng)物型機(jī)器人威嚇“熊”
- 香港大學(xué)開發(fā)出神經(jīng)外科機(jī)器人系統(tǒng),用于醫(yī)學(xué)手術(shù)
- 浦桑尼克LDS R2掃地機(jī)器人介紹
- 蘋果汽車能挑戰(zhàn)特斯拉嗎?
- 2020年全球MPU銷售額增長(zhǎng)12%,達(dá)877億美元?dú)v史新高
- Socionext 下一代汽車定制芯片將采用臺(tái)積電5nm工藝
- 上下游聯(lián)動(dòng),給汽車產(chǎn)業(yè)注入“芯”動(dòng)力
- 深度!多傳感器融合是當(dāng)今車輛設(shè)計(jì)核心
- EEPROM擦寫頻率
- 最新發(fā)布的Matter技術(shù)小解
- 產(chǎn)業(yè)升級(jí)|機(jī)智云工業(yè)DTU助力紡織行業(yè)智能化改造
- Qorvo:新的 “Matter” 協(xié)議是智能家居物聯(lián)網(wǎng)市場(chǎng)增長(zhǎng)的關(guān)鍵
- 電壓VSWR&反射系數(shù)Γ
- 這樣擺放管子是有什么特別的好處嗎?需要注意什么呢?
- 什么是功率電阻?電阻選擇錯(cuò)了,會(huì)發(fā)生什么?
- 【功放案例】X射線通信怎么實(shí)現(xiàn)?功率放大器在高頻脈沖發(fā)射特性研究中的應(yīng)用!
- [反饋]頁(yè)面顯示有點(diǎn)問(wèn)題
- 先楫官方工程師干貨:HPM6700/6400系列基于網(wǎng)絡(luò)的IEE1588的功能示例和使用指南