大家在開發(fā)嵌入式產(chǎn)品時(shí)首先會(huì)想到用控制器的匯編語言編寫監(jiān)控程序,主要原因是:①匯編語言生成的程序?qū)?yīng)的二進(jìn)制代碼少,程序執(zhí)行要比高級(jí)語言生成的程序快;②控制器剛問世時(shí),沒有相應(yīng)的高級(jí)語言可供使用;③存儲(chǔ)器的價(jià)格問題和尋址空間的限制。
1. 流水線被指令填滿時(shí)才能發(fā)揮最大效能,即每時(shí)鐘周期完成一條指令的執(zhí)行(僅指單周期指令)。如果程序發(fā)生跳轉(zhuǎn),流水線會(huì)被清空,這將需要幾個(gè)時(shí)鐘才能使流水線再次填滿。因此,盡量少的使用跳轉(zhuǎn)指令可以提高程序執(zhí)
前言:有些程序每次執(zhí)行時(shí)不應(yīng)該產(chǎn)生相同的結(jié)果,如游戲和模擬,此時(shí)隨機(jī)數(shù)就非常有用。下面這兩個(gè)函數(shù)合在一起使用能夠產(chǎn)生偽隨機(jī)數(shù)(pseudo-random number):通過計(jì)算產(chǎn)生的隨機(jī)數(shù),可能有重復(fù)出現(xiàn),所以并不是真正
一.基礎(chǔ)知識(shí)1.聚合數(shù)據(jù)類型(aggregate data type)能夠同時(shí)存儲(chǔ)超過一個(gè)的單獨(dú)數(shù)據(jù)。C提供了兩種類型的聚合數(shù)據(jù)類型,數(shù)組和結(jié)構(gòu)。(1)數(shù)組是相同類型的元素的集合,它的每個(gè)元素是通過下標(biāo)引用或指針間接訪問來選擇的
一.前言1.編譯一個(gè)C程序涉及很多步驟。其中第一步驟稱為預(yù)處理(preprocessing)階段。C預(yù)處理器(preprocessor)在源代碼編譯之前對其進(jìn)行文本性質(zhì)的操作。2.它的主要任務(wù)包括刪除注釋、插入被#include指令包含的內(nèi)容、
在C和C++語言開發(fā)中,指針、內(nèi)存一直是學(xué)習(xí)的重點(diǎn)。因?yàn)镃語言作為一種偏底層的中低級(jí)語言,提供了大量的內(nèi)存直接操作的方法,這一方面使程序的靈活度最大化,同時(shí)也為bug埋下很多隱患。
雖然目前大多數(shù)DSP都支持C語言編程,但是在實(shí)際工程應(yīng)用中,多是用C語言編寫流程控制,搭建工程框架。具體的算法模塊以及比較耗時(shí)的功能模塊還是采用匯編語言來編寫。因?yàn)橛脜R編語言進(jìn)行編程可以利用電路。
模塊劃分的\"劃\"是規(guī)劃的意思,意指怎樣合理的將一個(gè)很大的軟件劃分為一系列功能獨(dú)立的部分合作完成系統(tǒng)的需求。C語言作為一種結(jié)構(gòu)化的程序設(shè)計(jì)語言,在模塊的劃分上主要依據(jù)功能(依功能進(jìn)行劃分在面向?qū)ο笤O(shè)計(jì)中成為一個(gè)錯(cuò)誤,牛頓定律遇到了>相對論),
一個(gè)C程序經(jīng)過編譯鏈接之后形成可執(zhí)行文件,可執(zhí)行文件即由一條條的匯編指令組成,其排布方式如圖1所示。歷史沿襲至今,C程序一直由以下幾部分組成:
上面這個(gè)程序如果家能夠?qū)懗稣_結(jié)果,我相信不管什么筆試題??嫉竭@類型的都不會(huì)錯(cuò)了。分32位系統(tǒng)還是64位系統(tǒng)。
之前剛開始工作時(shí),參與做過嵌入式代碼優(yōu)化,除了最基本的函數(shù)實(shí)現(xiàn)細(xì)節(jié)算法優(yōu)化外,還有一些細(xì)節(jié)的處理。當(dāng)然之前優(yōu)化時(shí),也是借助了分析工具來分析哪些函數(shù)調(diào)用頻繁,哪些開銷比較大。對于具體細(xì)節(jié)的處理記得不一定
以前稍微寫過操作系統(tǒng)上的C程序,感受不出來:BSS段,堆棧的意義。到了在單片機(jī)上寫程序也沒有考慮這些問題。但是到了ARM上環(huán)境似乎沒有那么簡單了,C的環(huán)境要自己來創(chuàng)建,不然就不能用。這也深刻的感受到了C語言中原來難以理解的概念。
c語言和c51大部分的地方都是相同的,他們的語句,結(jié)構(gòu),順序都是很相似的,只是c51相比與c語言,多了很多變量類型和其他的東西,下面是總結(jié)c語言和c51的一些不同之處。變量類型位變量聲明 bit c51中特有的一種變量聲明,b
stdarg宏:可變參數(shù)列表是通過宏來實(shí)現(xiàn)的,這些宏定義于stdarg.h頭文件,它是標(biāo)準(zhǔn)庫的一部分。這個(gè)頭文件聲明的一個(gè)va_list的類型,和三個(gè)宏va_start,va_arg,va_end。我們可以生明一個(gè)va_list類型的變量,配合三個(gè)
fopen()需要頭文件:#include函數(shù)原型:FILE *fopen(const char *path,const char *mode)函數(shù)參數(shù):path:要打開的文件的路徑及文件名mode:文件打開方式,見下函數(shù)返回值:成功:指向文件的FILE類型指針失?。篘ULL
測試函數(shù)1#include#includeint main(){int a[5]={65,66,67,68};char value[10],i;FILE *pf;if(!(pf = fopen("printf.txt","w+"))){perror("open file:");return -1;}fprintf(pf,"%d %c %d %c",a[0],a[1],a[2],a[3])
本文主要介紹可變參數(shù)的函數(shù)使用,然后分析它的原理,程序員自己如何對它們實(shí)現(xiàn)和封裝,最后是可能會(huì)出現(xiàn)的問題和避免措施。VA函數(shù)(variable argument function),參數(shù)個(gè)數(shù)可變函數(shù),又稱可變參數(shù)函數(shù)。C/C++編程中
stdarg宏:可變參數(shù)列表是通過宏來實(shí)現(xiàn)的,這些宏定義于stdarg.h頭文件,它是標(biāo)準(zhǔn)庫的一部分。這個(gè)頭文件聲明的一個(gè)va_list的類型,和三個(gè)宏va_start,va_arg,va_end。我們可以生明一個(gè)va_list類型的變量,配合三個(gè)
ARM匯編語言和C語言混合編程ATPCS規(guī)則體現(xiàn)了一種模塊化設(shè)計(jì)的思想,其基本內(nèi)容是C模塊(函數(shù))和匯編模塊(函數(shù))相互調(diào)用的一套規(guī)則(C51中也有類似的一套規(guī)則)。我感覺比在線匯編功能強(qiáng)大(不用有很多忌諱),條理更清楚
最開始學(xué)習(xí)C語言時(shí),使用printf和scanf進(jìn)行格式化輸入輸出十分方便。學(xué)習(xí)單片機(jī)有很長時(shí)間了,之前要再屏幕上顯示一個(gè)變量或者通過串口傳出一些變量值觀測的話,需要進(jìn)行一系列的取余取整運(yùn)算,很是麻煩。最近又研究