7 顯示變量值(harib02g)
現在可以顯示字符串了,那么這一節我們就來顯示變量的值。能不能顯示變量值,對于操作系統的開發影響很大。這是因為程序運行與想象中不一致時,將可疑變量的值顯示出來是最好的方法。
習慣了在Windows中開發程序的人,如果想看到變量的值,用調試器(debugger)很容易就能看到,但是在開發操作系統過程中可就沒那么容易了。就像用Windows的調試器不能對Linux的程序進行調試一樣,Windows的調試器也不能對我們的“紙娃娃操作系統”的程序進行調試,更不要說對操作系統本身進行調試了。如果在“紙娃娃操作系統”中也要使用調試器的話,那只有自己做一個調試器了(也可以移植)。在做出調試器之前,只能通過顯示變量值來查看確認問題的地方。
閑話就說這么多,讓我們回到正題。那怎么樣顯示變量的值呢?可以使用sprintf函數。它是printf函數的同類,與printf函數的功能很相近。在開始的時候,我們曾提到過,自制操作系統中不能隨便使用printf函數,但sprintf可以使用。因為sprintf不是按指定格式輸出,只是將輸出內容作為字符串寫在內存中。
這個sprintf函數,是本次使用的名為GO的C編譯器附帶的函數。它在制作者的精心設計之下能夠不使用操作系統的任何功能。或許有人會認為,什么呀,那樣的話,怎么不做個printf函數呢?這是因為輸出字符串的方法,各種操作系統都不一樣,不管如何精心設計,都不可避免地要使用操作系統的功能。而sprintf不同,它只對內存進行操作,所以可以應用于所有操作系統。
■■■■■
我們這就來試試這個函數吧。要在C語言中使用sprintf函數,就必須在源程序的開頭寫上#include <stdio.h>,我們也寫上這句話。這樣以后就可以隨便使用sprintf函數了。接下來在HariMain中使用sprintf函數。
sprintf(s, "scrnx = %d", binfo->scrnx); putfonts8_asc(binfo->vram, binfo->scrnx, 16, 64, COL8_FFFFFF, s);
sprintf函數的使用方法是:sprintf(地址,格式,值,值,值,……)。這里的地址指定所生成字符串的存放地址。格式基本上只是單純的字符串,如果有%d這類記號,就置換成后面的值的內容。除了%d,還有%s, %x等符號,它們用于指定數值以什么方式變換為字符串。%d將數值作為十進制數轉化為字符串,%x將數值作為十六進制數轉化為字符串。
關于格式的詳細說明

我們來運行一下看看。……運行正常。
說點題外話。因為這本書是在筆者吭哧吭哧寫完之后大家才看到的,所以雖然講到“能顯示變量的值了”,“以后調試就容易了”,恐怕大家也很難體會到其中的艱辛。但是,筆者是真刀真槍地編程,在此過程中犯了很多的錯(大多都是低級錯誤)。以前,因為不能顯示變量的值,所以發現運行異常的時候,只能拼命讀代碼,想象變量的值來修改程序,非常辛苦。但從今以后可以顯示變量的值就輕松多了。

話說,在分辨率是320×200的屏幕上,8×16的字體可是很大喲(笑)。
- pcDuino開發實戰
- Cybersecurity:Attack and Defense Strategies
- Getting Started with oVirt 3.3
- VMware Horizon View 6 Desktop Virtualization Cookbook
- 嵌入式應用程序設計綜合教程(微課版)
- Ubuntu Linux操作系統
- Windows Server 2012 Hyper-V Cookbook
- 嵌入式實時操作系統:RT-Thread設計與實現
- Mobile First Design with HTML5 and CSS3
- AWS Development Essentials
- jQuery UI Cookbook
- Social Data Visualization with HTML5 and JavaScript
- Building Telephony Systems With Asterisk
- OpenVZ Essentials
- Linux內核修煉之道