匯編語言是一種用文字助記符來表示機(jī)器指令的符號(hào)語言,是最接近機(jī)器碼的一種語言。其主要優(yōu)點(diǎn)是占用資源少、程序執(zhí)行效率高。但是不同的CPU,其匯編語言可能有所差異,所以不易移植。C語言是一種結(jié)構(gòu)化的高級(jí)語言。
對(duì)程序進(jìn)行優(yōu)化,通常是指優(yōu)化程序代碼或程序執(zhí)行速度。優(yōu)化代碼和優(yōu)化速度實(shí)際上是一個(gè)予盾的統(tǒng)一,一般是優(yōu)化了代碼的尺寸,就會(huì)帶來執(zhí)行時(shí)間的增加,如果優(yōu)化了程序的執(zhí)行速度,通常會(huì)帶來代碼增加的副作用,很難魚與熊
HyperBootloader_dsPIC HyperBootloader_dsPIC是我用C語言實(shí)現(xiàn)的UART bootloader, 采用串口通信,適用于Microchip的dsPIC30, dsPIC33,同樣適用于PIC24。單片機(jī)端bootloader是用XC16編譯的,電腦端的通信軟件
內(nèi)存這個(gè)大話題key:心里一定要有內(nèi)存的邏輯圖。程序是什么?程序 = 代碼 + 數(shù)據(jù)代碼放在Flash中代碼段,可變的數(shù)據(jù)(全局變量、局部變量)放在內(nèi)存中。運(yùn)行程序的目的是什么?得到運(yùn)行結(jié)果; 關(guān)注運(yùn)行過程;既要結(jié)果又要
注:keil中單片機(jī)C編程若指針沒有指向提前聲明的變量,會(huì)產(chǎn)生混亂eg:情景一: 情景二:Type *p,*q; Type *p,*q,pp,qq;給指針p賦值; p=&pp;給指針q賦值; q=&qq;p或q的值會(huì)出問題 正常,
新PIC18 Bootloader PhsBoot_v3.0是我最新用C語言實(shí)現(xiàn)的PIC bootloader, 采用串口通信,適用于PIC18, 并為其用C#寫了PC端通信程序PhsLoader_v3.0。PhsLoader_v3.0通過串口按照自定義的通信協(xié)定發(fā)送數(shù)據(jù)PhsBoo
HyperBootloader_PIC18_J 和 HyperBootloader_PIC18_None_J 完成PIC16 bootloader (詳細(xì)情況請(qǐng)閱讀我的上一篇隨筆《自己用C語言寫單片機(jī)PIC16serial bootloader》) 后,接著就開始寫PIC18的UART bootloader。
volatile關(guān)鍵字是一種類型修飾符,用它聲明的類型變量表示可以被某些編譯器未知的因素更改,比如操作系統(tǒng)、硬件或者其它線程等。遇到這個(gè)關(guān)鍵字聲明的變量,編譯器對(duì)訪問該變量的代碼就不再進(jìn)行優(yōu)化,從而可以提供對(duì)特殊地址的穩(wěn)定訪問
編了個(gè)PIC的項(xiàng)目,對(duì)C語言里的位運(yùn)算還是蠻有感悟的,特此記錄一下。譬如說,在程序中定義了一個(gè)char類型的變量,purge_short_enable_flag,//bit-- start short circuit circle timing//bit--short circuit enable/
/************************************************//*函數(shù)功能:初始化UART口*//************************************************/voidUART_init(uint32_tbaudrate){uint32_tDL_value,Clear=Clear;//(用這種方式
在一個(gè)程序的編寫過程中,隨著代碼量的增加,如果把所有的語句都寫到 main 函數(shù)中,一方面程序會(huì)顯得的比較亂,另外一個(gè)方面,當(dāng)同一個(gè)功能需要在不同地方執(zhí)行時(shí),我們就得再重復(fù)寫一遍相同的語句。此時(shí),如果把一些
大家在開發(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)在源代碼編譯之前對(duì)其進(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ò)誤,牛頓定律遇到了>相對(duì)論),
一個(gè)C程序經(jīng)過編譯鏈接之后形成可執(zhí)行文件,可執(zhí)行文件即由一條條的匯編指令組成,其排布方式如圖1所示。歷史沿襲至今,C程序一直由以下幾部分組成: