本文主要總結(jié)嵌入式系統(tǒng)C語言編程中,主要的錯(cuò)誤處理方式。
本章涉及的一些技術(shù)不僅適用于ARM處理器,也適用于其他RISC處理器。本章首先從ARM編譯器及其優(yōu)化入手,講解C編譯器在優(yōu)化代碼時(shí)所碰到的一些問題。
編程習(xí)慣的培養(yǎng)需要的是一個(gè)長期的過程,需要不斷地總結(jié),積累,并且我們需要從意識上認(rèn)識其重要性,一個(gè)良好的編程習(xí)慣對于我們能力的提高也是有巨大的幫助。
指針沒有指向一塊合法的內(nèi)存 定義了指針變量,但是沒有為指針分配內(nèi)存,即指針沒有指向一塊合法的內(nèi)存。
近期,微軟 NET 團(tuán)隊(duì)在開發(fā)者博客中宣布,他們雖然還會繼續(xù)在 .NET 5.0 上支持 Visual Basic ,但不再將 VB 作為一門獨(dú)立的語言發(fā)展(Going forward, we do
作者:翰墨小生 鏈接:https://www.cnblogs.com/graphics/archive/2010/06/21/1752421.html 問題描述 任意給定一個(gè)32位無符號整數(shù)n,求n的二進(jìn)制表示中1的個(gè)數(shù),比如n = 5(0101)時(shí),返回2,n = 15(1111)時(shí),返回4 這也是一道比較經(jīng)典的題目了,相信不少人
直接來源 :公眾號【嵌入式云IOT技術(shù)圈】,作者:楊源鑫 數(shù)據(jù)壓倒一切。如果選擇了正確的數(shù)據(jù)結(jié)構(gòu)并把一切組織的井井有條,正確的算法就不言自明。編程的核心是數(shù)據(jù)結(jié)構(gòu),而不是算法。 ——Rob Pike 說明 本文基于這樣的認(rèn)識:數(shù)據(jù)是易變的,邏輯是穩(wěn)定的。
在嵌入式開發(fā)過程中具有復(fù)雜性,通常不選擇它用于嵌入式系統(tǒng)開發(fā),而C語言是一種“低層次”的語言,已經(jīng)成為嵌入式系統(tǒng)開發(fā)的最佳選擇。
vi是Linux系統(tǒng)的第一個(gè)全屏幕交互式編輯程序,它從誕生至今一直得到廣大用戶的青睞,歷經(jīng)數(shù)十年仍然是人們主要使用的文本編輯工具,足以見其生命力之強(qiáng),而強(qiáng)大的生命力是其強(qiáng)大的功能帶來的。由于大多數(shù)讀者在此之前都已經(jīng)用慣了Windows平臺上的編輯器,因此,在剛剛接觸時(shí)總會或多或少不適應(yīng),但只要習(xí)慣之后,就能感受到它的方便與快捷。
GNU CC是GNU項(xiàng)目中符合ANSI C標(biāo)準(zhǔn)的編譯系統(tǒng),能夠編譯用C、C++和Object C等語言編寫的程序。gcc不僅功能強(qiáng)大,而且可以編譯如C、C++、Object C、Java、Fortran、Pascal、Modula-3和Ada等多種語言,而且gcc是一個(gè)交叉平臺編譯器。
調(diào)試是所有程序員都會面臨的問題。如何提高程序員的調(diào)試效率,更好、更快地定位程序中的問題從而加快程序開發(fā)的進(jìn)度,是大家都很關(guān)注的問題。就如讀者熟知的Windows下的一些調(diào)試工具,如Visual Studio自帶的設(shè)置斷點(diǎn)、單步跟蹤等,都受到了廣大用戶的贊賞。
到此為止,讀者已經(jīng)了解了如何在Linux下使用編輯器編寫代碼,如何使用gcc把代碼編譯成可執(zhí)行文件,還學(xué)習(xí)了如何使用gdb來調(diào)試程序,那么,所有的工作看似已經(jīng)完成了,為什么還需要make這個(gè)工程管理器呢?
在上一小節(jié),讀者已經(jīng)了解到了make項(xiàng)目管理器的強(qiáng)大功能。的確,makefile可以幫助make完成它的使命,但要承認(rèn)的是,編寫makefile確實(shí)不是一件輕松的事,尤其對于一個(gè)較大的項(xiàng)目而言更是如此。那么,有沒有一種輕松的手段生成makefile而同時(shí)又能讓用戶享受make的優(yōu)越性呢?
通過指定指令的vi操作練習(xí),使讀者能夠熟練使用vi中的常見操作,并且熟悉vi的3種模式,如果讀者能夠熟練掌握實(shí)驗(yàn)內(nèi)容中所要求的內(nèi)容,則表明對vi的操作已經(jīng)很熟練了。
本章是Linux中進(jìn)行C語言編程的基礎(chǔ),首先講解了C語言編程的關(guān)鍵點(diǎn),這里關(guān)鍵要了解編輯器、編譯鏈接器、調(diào)試器及項(xiàng)目管理工具等概念。
本章主要講解C編譯器在代碼優(yōu)化時(shí)遇到的一些問題。要編寫高效的C語言源代碼,必須了解C編譯器對什么形式的代碼有所改動,編譯器涉及的處理器結(jié)構(gòu)的限制,以及一些特殊的C編譯器的限制。
因?yàn)锳RM體系結(jié)構(gòu)本身并不包含除法運(yùn)算硬件,所以在ARM上實(shí)現(xiàn)除法是十分耗時(shí)的。ARM指令集中沒有直接提供除法匯編指令,當(dāng)代碼中出現(xiàn)除法運(yùn)算時(shí),ARM編譯器會調(diào)用C庫函數(shù)(有符合除法調(diào)用_rt_sdiv,無符合除法調(diào)用_rt_udiv),來實(shí)現(xiàn)除法操作。根據(jù)除數(shù)和被除數(shù)的不同,32bit的除法運(yùn)算一般要占有20-140個(gè)指令周期。
ARM指令都是可以條件執(zhí)行的。在代碼中使用條件執(zhí)行指令可以減小代碼密度并提高程序執(zhí)行效率。典型的條件執(zhí)行語句用在比較指令之后,形成程序的分支跳轉(zhuǎn)結(jié)構(gòu)。下面的例子顯示了條件執(zhí)行指令的典型用法。
通常,布爾表達(dá)式被用來檢測某個(gè)數(shù)值是否在特定的范圍內(nèi)。例如,在圖形窗口處理程序中,常使用布爾表達(dá)式判斷屏幕中一個(gè)點(diǎn)是否在當(dāng)前活動窗口范圍內(nèi)。
循環(huán)體是程序設(shè)計(jì)與優(yōu)化的重點(diǎn)考慮對象。本節(jié)將著重講解在ARM上處理for和while循環(huán)最有效的方法。