綜合能力訓練:在樹莓派上動手寫一個小OS(4):實驗16-3:實現printk函式
本文節選自《實驗指導手冊》第二版第16.5章
實驗指導手冊是奔跑吧Linux核心入門篇第二版配套實驗書,pdf版本已經release,可以免費下載和自由列印!
下載方法:
登陸“奔跑吧linux社群”微信公眾號,輸入“奔跑吧2”獲取下載地址。
本文是《奔跑吧Linux核心 入門篇》第16章中的實驗16-3:實現printk列印函式。前面的實驗,我們直接使用串列埠函式來列印,非常不方便。我們在實現BenOS其他功能之前,還需要需要實現一個簡單好用的列印函式,這樣我們可以通過串列埠來列印需要的資料型別,方便我們後面的除錯工作。
1.實驗目的
瞭解printk()函式的實現。
2.實驗要求
我們在實驗16-1中實現了串列埠輸出,本實驗將實現printk()函式以格式化輸出。
3.實驗詳解
本實驗的主要目的是實現printk列印函式。
參考程式碼在lib/printk.c檔案裡,讀者可以自行實現。
Printk函式類似C語言的printf函式,需要實現如下方面的格式要求。
首先看一下,printf是在標頭檔案stdio.h中宣告的:
int printk(
const char *format, … );
第一個引數就是輸出格式,這是一個字串,裡面可以用%的形式表示一個佔位符,這個%處的內容會被後面的引數替換。
%佔位符的格式是這樣的 方括號裡的[]表示可選
%[flags][width][.prec][hlL]type
(1) 格式字元type
Printk函式應該支援如下這些格式字元。
格式字元 含義
-
i或者d 輸出有符號的十進位制整數
-
u 輸出無符號的十進位制整數
-
x/x 輸出十六進位制數
-
o 輸出八進位制數
-
p 輸出指標型別
-
c 輸出一個字元
-
s 輸出一個字串
(2) 控制符flags
控制符 含義
-
- 實現被顯示資料的左對齊
-
+ 顯示數字的正負號
-
# 當格式字元是 o、x、X 時,增加字首0x
-
0 使用零 填充欄位寬度
(3) 域寬width與精度prec
width指明瞭輸出的寬度,prec表示小數點位數。
另外,這裡的字元數width可以用*,表示用下一個引數作為寬度。
例如
printf(“%*d”,
6,
12)
是用6當做輸出寬度,相當於:
printf(“%
6d”,
12);
(4) 修飾型別
這裡表示修飾變數的型別。
修飾型別 含義
-
hh 單個位元組
-
h short
-
l long
-
ll long long
為了檢驗printk函式的列印效果,我們希望讀者能列印BenOS的映象檔案中各個段的起始地址、結束地址和大小等資訊。
另外,我們也可以做其他一些測試。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/70005277/viewspace-2872526/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 綜合能力訓練:在樹莓派上動手寫一個小OS(6):實驗16-5:程式建立實驗樹莓派
- 綜合能力訓練:在樹莓派上動手寫一個小OS(2):實驗16-1:輸出welcome benos樹莓派
- 樹莓派上利用Tensorflow實現小車的自動駕駛樹莓派自動駕駛
- 在樹莓派上安裝 Ubuntu MATE樹莓派Ubuntu
- 樹莓派 - 實戰篇 [基於 websocket 實現手機遠端控制樹莓派小車]樹莓派Web
- 在樹莓派上執行 DOS 系統樹莓派
- 在樹莓派上安裝mysql/MariaDB樹莓派MySql
- 在樹莓派上搭建智慧家居閘道器樹莓派
- OpenYurt 入門 - 在樹莓派上玩轉 OpenYurt樹莓派
- 樹莓派上安裝php樹莓派PHP
- 在樹莓派上編譯安裝golang環境樹莓派編譯Golang
- 樹莓派上配置伺服器樹莓派伺服器
- 實現call函式,手寫Function.prototype.call函式函式Function
- 關於在windows,ubuntu,樹莓派上安裝使用opencvWindowsUbuntu樹莓派OpenCV
- 在樹莓派上安裝go環境很簡單樹莓派Go
- 樹莓派使用入門:在樹莓派上使用 Mathematica 進行高階數學運算樹莓派
- 手寫一個jsonp實現JSON
- 動手實現一個localcache - 實現篇
- 樹莓派上安裝2.8寸TFT觸控式螢幕樹莓派
- 在樹莓派上部署yolo模型推理並使用onnx加速樹莓派YOLO模型
- 亞馬遜詳解如何使用MXNet在樹莓派上搭建實時目標識別系統亞馬遜樹莓派
- 手寫一個bind函式(大概)函式
- 練手專案,實現一個web框架Web框架
- Go 實現字串首字母大、小寫函式Go字串函式
- 在樹莓派上設定家庭網路的家長控制功能樹莓派
- 在樹莓派上安裝c++版本的opencv並執行樹莓派C++OpenCV
- 如何自己動手實現一個圖片解答小助手
- 機器學習實踐:TensorFlow最後一個epoch訓練損失函式顯著增大機器學習函式
- [手寫系列] Spirit帶你實現防抖函式和節流函式函式
- 面試題,實現一個求和函式面試題函式
- 動手實現一個 LRU cache
- [C練習]實現memcpy原型函式memcpy原型函式
- 如何在樹莓派上部署Kubernetes樹莓派
- 樹莓派上使用Slowloris進行DDoS攻擊樹莓派
- 樹莓派上使用螞蟻礦機挖礦樹莓派
- 基於樹莓派的叢集實驗(一)--spark on yarn樹莓派SparkYarn
- 小程式實現手寫簽名
- 計算機實驗室之樹莓派計算機樹莓派