好像所有講述編程的書(shū)都用同一個(gè)例子來(lái)開(kāi)始,就是在用戶(hù)的屏幕上顯示出“Hello,World!”。總是使用這個(gè)例子可能有一點(diǎn)叫人厭煩,可是它確實(shí)可以幫助讀者迅速地接觸到在編程環(huán)境中書(shū)寫(xiě)簡(jiǎn)單程序時(shí)的簡(jiǎn)便方法和可能的困難。就這個(gè)意義來(lái)說(shuō),“Hello,World!”可以作為檢驗(yàn)編程語(yǔ)言和計(jì)算機(jī)平臺(tái)的一個(gè)基準(zhǔn)。
不幸的是,如果按照這個(gè)標(biāo)準(zhǔn)來(lái)說(shuō),嵌入式系統(tǒng)可能是程序員工作中碰到的最難的計(jì)算機(jī)平臺(tái)了。甚至在某些嵌入式系統(tǒng)中,根本無(wú)法實(shí)現(xiàn)“Hello,World!”程序。即使在那些可以實(shí)現(xiàn)這個(gè)程序的嵌入式系統(tǒng)里面,文本字符串的輸出也更像是目標(biāo)的一部分而不是開(kāi)始的一部分。
你看,“Hello,World!”示例隱含的假設(shè),就是有一個(gè)可以打印字符串的輸出設(shè)備。通常使用的是用戶(hù)顯示器上的一個(gè)窗口來(lái)完成這個(gè)功能。但是大多數(shù)的嵌入式系統(tǒng)并沒(méi)有一個(gè)顯示器或者類(lèi)似的輸出設(shè)備。即使是對(duì)那些有顯示器的系統(tǒng),通常也需要用一小段嵌入式程序,通過(guò)調(diào)用顯示驅(qū)動(dòng)程序來(lái)實(shí)現(xiàn)這個(gè)功能。這對(duì)一個(gè)嵌入式編程者來(lái)說(shuō)絕對(duì)是一個(gè)相當(dāng)具有挑戰(zhàn)性的開(kāi)端。
看起來(lái)我們還是最好以一個(gè)小的,容易實(shí)現(xiàn)并且高度可移植的聯(lián)人式程序來(lái)開(kāi)始,這樣的tb程序也不太會(huì)有編程錯(cuò)誤。歸根到底,我這本書(shū)繼續(xù)選用“Hello,World!”。這個(gè)例子的原因是,實(shí)現(xiàn)這個(gè)程序?qū)嵲谔?jiǎn)單了。這起碼在讀者的程序第一次就運(yùn)行不起來(lái)的時(shí)候,會(huì)去掉一個(gè)可能的原因,即:錯(cuò)誤不是因?yàn)榇a里的缺陷:相反,問(wèn)題出在開(kāi)發(fā)工具或者創(chuàng)建可執(zhí)行程序的過(guò)程里面。
嵌人式程序員在很大程度上必須要依靠自己的力量來(lái)工作。在開(kāi)始一個(gè)新項(xiàng)目的時(shí)候,除了他所熟悉的編程語(yǔ)言的語(yǔ)法,他必須首先假定什么東西都沒(méi)有運(yùn)轉(zhuǎn)起來(lái),甚至連標(biāo)準(zhǔn)庫(kù)都沒(méi)有,就是類(lèi)似printf()和scanf()的那些程序員常常依賴(lài)的輔助函數(shù)。實(shí)際上,庫(kù)例程常常作為編程語(yǔ)言的基本語(yǔ)法出現(xiàn)。可是這部分標(biāo)準(zhǔn)很難支持所有可能的計(jì)算平臺(tái),并且常常被嵌入式系統(tǒng)編譯器的制造商們所忽略。
所以在這一章里你實(shí)際上將找不到一個(gè)真正的”Hello,World!”程序,相反,我們假定在第一個(gè)例子中只可以使用最基本的C 語(yǔ)言語(yǔ)法。隨著本書(shū)的進(jìn)一步深人,我們會(huì)逐步向我們的指令系統(tǒng)里添加C++的語(yǔ)法、標(biāo)準(zhǔn)庫(kù)例程和一個(gè)等效的字符輸出設(shè)備。然后,在第九章“綜合所學(xué)的知識(shí)”里面。我們才最終實(shí)現(xiàn)一個(gè)“Hello,World!”程序。到那時(shí)候你將順利地走上成為一個(gè)嵌入式系統(tǒng)編程專(zhuān)家的道路。