imx6ull-裸機學習實驗13——串口格式化函數移植實驗

目錄

前言

格式化函數

實驗程序編寫

stdio文件夾

main.c

Makefile修改

編譯下載


前言

在學習實驗12:imx6ull串口通信實驗,我們實現了 UART1 基本的數據收發功能,雖然可以用來調試程序,但是功能太單一了,只能輸出字符。

本講實驗我們就來學習如何將 printf 這樣的格式化函數,移植到正點原子 I.MX6U-ALPHA 開發板上。

格式化函數

格式化函數說的是 printf、 sprintf 和 scanf 這樣的函數,分為格式化輸入和格式化輸出兩類函數。

我們剛開始學習 C 語言的時候,常常通過 printf 函數在屏幕上顯示字符串,通過 scanf 函數從鍵盤獲取輸入。

在 I.MX6U-ALPHA 開發板上也可以,將 printf 和 scanf 映射到串口上,這樣就可以使用 MobaXterm 作為開發板的終端, 完成與開發板的交互。

也可以使用 printf 和 sprintf 來實現各種各樣的格式化字符串,方便我們后續的開發。

實驗程序編寫

stdio文件夾

在正點原子提供的源碼資料里,有一個文件夾 stdio ,里面的文件就是我們要移植的源碼文件。

stdio 里面有兩個文件夾: include 和 lib,這兩個文件夾里面的內容如圖:

stdio 里面的文件其實是從 uboot 里面移植過來的,但stdio 中并沒有實現完全版的格式化函數,比如 printf 函數并不支持浮點數。

main.c

移植好以后就要測試相應的函數工作是否正常,我們使用 scanf 函數等待鍵盤輸入兩個整數,然后將兩個整數進行相加并使用 printf 函數輸出結果。

int main(void)
{unsigned char state = OFF;int a , b;int_init(); 				/* 初始化中斷(一定要最先調用!) */imx6u_clkinit();			/* 初始化系統時鐘 			*/delay_init();				/* 初始化延時 			*/clk_enable();				/* 使能所有的時鐘 			*/led_init();					/* 初始化led 			*/beep_init();				/* 初始化beep	 		*/uart_init();				/* 初始化串口,波特率115200 */while(1)					{	printf("輸入兩個整數,使用空格隔開:");scanf("%d %d", &a, &b);					 		/* 輸入兩個整數 */printf("\r\n數據%d + %d = %d\r\n\r\n", a, b, a+b);	/* 輸出兩個數相加的和 */state = !state;led_switch(LED0,state);}return 0;
}

Makefile修改

修改 Makefile 中的 TARGET 為 printf,在 INCDIRS 中加入“stdio/include”,在 SRCDIRS中加入“stdio/lib”,

在編譯 C 文件的時候添加了選項“-Wa,-mimplicit-it=thumb”

否則的話會有如下類似的錯誤提示:

thumb conditional instruction should be in IT block -- `addcs r5,r5,#65536'

編譯下載

使用 Make 命令編譯代碼,編譯成功以后使用軟件 imxdownload 將編譯完成的 printf.bin 文件下載到 SD 卡中,命令如下:

燒寫成功以后將 SD 卡插到開發板的 SD 卡槽中,打開 MobaXterm,設置好連接,然后復位開發板。

根據提示,輸入兩個整數,使用空格隔開,輸入完成以后按下“回車鍵”,

本講實驗到此結束啦,是不是很簡單~

我們下次見,比心~
?

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/88479.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/88479.shtml
英文地址,請注明出處:http://en.pswp.cn/web/88479.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

CCF-GESP 等級考試 2025年6月認證C++三級真題解析

1 單選題(每題 2 分,共 30 分)第1題 8位二進制原碼能表示的最小整數是:( )A. -127 B. -128 C. -255 …

【網絡安全】服務間身份認證與授權模式

未經許可,不得轉載。 文章目錄 問題背景用戶到服務的身份認證與授權系統對系統的通信服務與服務之間的通信需求分析Basic Auth(基本身份認證)優點缺點mTLS 證書認證優點缺點OAuth 2.0優點缺點JWS(JSON Web Signature)優點缺點結合 Open Policy Agent 的 JWS 方案優點缺點結…

【EGSR2025】材質+擴散模型+神經網絡相關論文整理隨筆(四)

An evaluation of SVBRDF Prediction from Generative Image Models for Appearance Modeling of 3D Scenes輸入3D場景的幾何和一張參考圖像,通過擴散模型和SVBRDF預測器獲取多視角的材質maps,這些maps最終合并成場景的紋理地圖集,并支持在任…

Grid網格布局完整功能介紹和示例演示

CSS Grid布局是一種強大的二維布局系統,可以將頁面劃分為行和列,精確控制元素的位置和大小。以下是其完整功能介紹和示例演示: 基本概念 網格容器(Grid Container):應用display: grid的元素。網格項&#x…

學習C++、QT---21(QT中QFile庫的QFile讀取文件、寫入文件的講解)

每日一言把大目標拆成小步,每天前進一點點,終會抵達終點。QFile讀取文件我們記事本要進行讀取文件、寫入文件、等等的操作,那么這個時候我們的QT有一個QT類叫做QFile這個類的話是專門對于文件操作的,所以我們來學習我們在QT的幫助…

AD736ARZ-R7精密真有效值轉換器 高精度測量的首選方案

AD736ARZ-R7精密轉換器產品概述AD736ARZ-R7是ADI(Analog Devices Inc.)推出的一款低功耗、高精度的真有效值(RMS)轉直流(DC)轉換器,采用SOIC-8封裝,適用于需要精確測量交流或復雜波形…

【web應用】若依框架前端報表制作與導出全攻略(ECharts + html2canvas + jsPDF)

文章目錄前言一、ECharts準備工作1. 檢查ECharts安裝2. 導入ECharts3. 創建餅圖組件4. 模板部分二、報表導出功能實現1. 安裝依賴2. 導入依賴3. 完整導出函數實現4. 樣式優化三、完整組件實現四、常見問題與解決方案1. 圖表截圖不完整或模糊2. 圖表背景透明3. 導出PDF中文亂碼4…

vue3+express聯調接口時報“\“username\“ is required“問題

我用node .js的express框架寫的登錄接口,發現postman可以調通,但是vue3前端報錯vue3我發現是我后端node.js的app.js入口文件中配置的解析前端參數的解析中間件和前端請求頭中的Content-Type配置不一致的原因 解決方案 因為我后端配置解析表單數據的中間件…

《月亮與六便士》:天才的背叛與凡人救贖的殘酷辯證法

當滿地六便士成了庸人的火葬場??毛姆筆下的斯特里克蘭德,是一把捅穿中產幻夢的利刃。這個拋妻棄子、背叛友人的證券經紀人,在倫敦客廳的茶香與銀勺碰撞聲中,突然聽見了遠方的驚雷——“我必須畫畫”。如書中所言:??“在滿地都…

vue2往vue3升級需要注意的點(個人建議非必要別直接升級)

將 Vue 2 項目升級到 Vue 3 的過程中,需要重點關注以下幾個難點和關鍵點: 建議小項目直接用vue3重寫更快,bug更少 文章目錄1. **Composition API 的學習與應用**2. **全局 API 的變更**3. **模板語法的兼容性變化**4. **組件選項和生命周期的…

聚焦數據資源建設與應用,浙江省質科院赴景聯文科技調研交流

7月10日上午,浙江省質科院標準化中心副主任蔣建平、應珊婷等一行領導帶隊蒞臨景聯文科技調研指導工作。雙方圍繞工業數據展開深度交流。座談會上,景聯文科技詳細匯報了數據資源建設與應用方面的成果與規劃,介紹了公共數據授權運營與對外合作的…

【Linux】系統引導修復

目錄 開機引導過程 一.通電 二.BIOS環境檢測 三.磁盤引導階段 四.文件引導階段 自動引導配置文件丟失修復 內核參數文件丟失修復 內核鏡像文件丟失修復 內核初始化文件丟失修復 boot目錄誤刪丟失修復 開機引導過程 磁盤引導階段 /boot/grub2/grub.cfg #讀取自動引…

2023年全國青少年信息素養大賽C++編程初中組決賽真題+答案解析

2023年全國青少年信息素養大賽C++編程初中組決賽真題+答案解析 編程題 第一題 判斷是否存在重復的子序列 題目描述 從m 個字符中選取字符,生成n 個符號的序列,使得其中沒有2 個相鄰的子序列相同? 如從1,2,3,生成長度為5 的序列,序列“12321”是合格的,而“12323”和“12123”…

MySQL5.78.0鎖表確認及解除鎖表完全指南

目錄 一、MySQL鎖機制基礎 1.1 鎖的分類與作用 1.2 關鍵鎖類型詳解 二、鎖表的常見原因與風險 2.1 引發鎖表的典型場景 2.2 鎖表的業務影響 三、鎖表狀態確認方法 3.1 基礎工具:SHOW PROCESSLIST 3.2 MySQL 8.0鎖信息查詢(推薦) 3.2…

springboot生成pdf方案之dot/html/圖片轉pdf三種方式

文章目錄pdf生成方案dot轉pdfhtml轉pdfopenhtmltopdfaspose-pdf實踐playwright實踐圖片轉pdfApache PDFBox實踐框架場景匹配后記前言:隨著客戶對報告審美的提升,需求也越來越五彩斑斕~ 原有的dot模板已經滿足不了他們了!這篇文章主打列出各種…

前端開發—全棧開發

全棧開發者在面試前端或全棧崗位時,自我介紹需要巧妙融合“技術廣度”與“崗位針對性”,避免成為泛泛而談的“樣樣通樣樣松”。以下是結合面試官關注點和全棧特性的專業介紹策略:🧠 一、自我介紹的核心理念 突出全棧優勢&#xff…

Redis生產環境過期策略配置指南:務實落地,避免踩坑

在生產環境中合理配置Redis過期策略是保障系統穩定性和內存效率的關鍵。以下配置建議基于實戰經驗,避免理論堆砌,直擊核心要點:一、核心策略配置:惰性刪除 定期刪除(默認已啟用)無需額外配置:R…

Ubuntu 20.04 安裝 Node.js 20.x、npm、cnpm 和 pnpm 完整指南

🌐 Ubuntu 20.04 安裝 Node.js 20.x、npm、cnpm 和 pnpm 完整指南 🚀 在本文中,我們將介紹如何在 Ubuntu 20.04 上安裝 Node.js 20.x,以及如何安裝 npm、cnpm 和 pnpm 來提高開發效率 ?。1?? 安裝 Node.js 20.x 為了確保使用最…

【時時三省】(C語言基礎)通過指針引用數組元素

山不在高,有仙則名。水不在深,有龍則靈。 ----CSDN 時時三省引用一個數組元素,可以用下面兩種方法:( 1 )下標法,如a[i]形式;( 2 )指針法,如* ( a i )或* ( p i )。其中a是數組名,p…

Guava LoadingCache

LoadingCache 是 Google Guava 庫提供的一個高級緩存實現,它通過自動加載機制簡化了緩存使用模式。核心特性自動加載機制當緩存未命中時,自動調用指定的 CacheLoader 加載數據線程安全:并發請求下,相同key只會加載一次靈活的過期策…