變量的存儲(chǔ)類(lèi)別分為自動(dòng)、靜態(tài)、寄存器和外部這四種。其中后兩種我們暫不介紹,主要是自動(dòng)變量和靜態(tài)變量這兩種。函數(shù)中的局部變量,如果不加 static 這個(gè)關(guān)鍵字來(lái)修飾,都屬于自動(dòng)變量,也叫做動(dòng)態(tài)存儲(chǔ)變量。這種存
LabVIEW作為一種新型的圖形化編程語(yǔ)言,具有精確、高效、功能強(qiáng)大、開(kāi)發(fā)簡(jiǎn)易、實(shí)時(shí)性強(qiáng)、界面友好等優(yōu)點(diǎn)。但要讓其與C語(yǔ)言做個(gè)較量,就要依據(jù)具體的應(yīng)用環(huán)境來(lái)看,而不能籠統(tǒng)的分出優(yōu)勝來(lái)。C語(yǔ)言:提供了低級(jí)別的控制
本文純屬原創(chuàng),為arm子程序模塊,包含了匯編和C語(yǔ)言?xún)煞N寫(xiě)法,后續(xù)將陸續(xù)完善。ON1、關(guān)閉WATCHDOG,否則CPU會(huì)不斷重啟:匯編:disable_watch_dog:@往WATCHDOG寄存器寫(xiě)0mov r1,#0x53000000mov r2,#0x0str r2,[r1]mov p
指向數(shù)組元素的指針和運(yùn)算法則所謂指向數(shù)組元素的指針,其本質(zhì)還是變量的指針。因?yàn)閿?shù)組中的每個(gè)元素,其實(shí)都可以直接看成是一個(gè)變量,所以指向數(shù)組元素的指針,也就是變量的指針。指向數(shù)組元素的指針不難,但很常用
1.通過(guò)使用預(yù)處理指令#asm 和#endasm來(lái)使用匯編語(yǔ)言。用戶(hù)編寫(xiě)的匯編語(yǔ)言可以緊跟在#asm之后,而在#endasm之前結(jié)束。如下所示:# asm/*匯編源程序*/# endasm在#asm和#endasm之間的語(yǔ)句將作為匯編語(yǔ)言的語(yǔ)句
我們知道C語(yǔ)言是一種高級(jí)語(yǔ)言,所謂高級(jí)語(yǔ)言就是要經(jīng)過(guò)翻譯才能在具體平臺(tái)上運(yùn)行的程序。而編譯程序是一種比較繁瑣的程序,它要把高級(jí)語(yǔ)言編譯和鏈接后,成為能夠在具體平臺(tái)運(yùn)行的程序。這其中有很多知識(shí)是和操作系統(tǒng)
1.匯編程序訪問(wèn)C語(yǔ)言全局變量全局變量只能通過(guò)地址間接調(diào)用,為了訪問(wèn)C++語(yǔ)言中全局變量,首先要通過(guò)extern偽指令引入全局變量,然后將其地址裝入寄存器中。對(duì)于unsigned char類(lèi)型,使用LDRB/STRB訪問(wèn);對(duì)于unsigned
匯編語(yǔ)言是一種用文字助記符來(lái)表示機(jī)器指令的符號(hào)語(yǔ)言,是最接近機(jī)器碼的一種語(yǔ)言。其主要優(yōu)點(diǎn)是占用資源少、程序執(zhí)行效率高。但是不同的CPU,其匯編語(yǔ)言可能有所差異,所以不易移植。對(duì)于目前普遍使用的RISC架構(gòu)的8
大家都知道一般的并行擴(kuò)展總線---地址總線,數(shù)據(jù)總線和控制總線一般是相互獨(dú)立的。但單片機(jī)由于受引腳的限制,P0口為低8位地址/數(shù)據(jù)復(fù)用口。其讀寫(xiě)時(shí)序符合intel8080控制時(shí)序。使用外部擴(kuò)展時(shí),wrrd 等控制引腳不需要
新PIC16Bootloader 在完成HyperBootloader之后(具體詳見(jiàn)我之前的隨筆),我決定重寫(xiě)PIC bootloader。為什么呢? HyperBootloader是由PC端的串口通信軟件--超級(jí)終端來(lái)傳送Hex數(shù)據(jù)的,一行一行地傳送,每傳送一
匯編語(yǔ)言是一種用文字助記符來(lái)表示機(jī)器指令的符號(hào)語(yǔ)言,是最接近機(jī)器碼的一種語(yǔ)言。其主要優(yōu)點(diǎn)是占用資源少、程序執(zhí)行效率高。但是不同的CPU,其匯編語(yǔ)言可能有所差異,所以不易移植。C語(yǔ)言是一種結(jié)構(gòu)化的高級(jí)語(yǔ)言。
對(duì)程序進(jìn)行優(yōu)化,通常是指優(yōu)化程序代碼或程序執(zhí)行速度。優(yōu)化代碼和優(yōu)化速度實(shí)際上是一個(gè)予盾的統(tǒng)一,一般是優(yōu)化了代碼的尺寸,就會(huì)帶來(lái)執(zhí)行時(shí)間的增加,如果優(yōu)化了程序的執(zhí)行速度,通常會(huì)帶來(lái)代碼增加的副作用,很難魚(yú)與熊
HyperBootloader_dsPIC HyperBootloader_dsPIC是我用C語(yǔ)言實(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)行過(guò)程;既要結(jié)果又要
注:keil中單片機(jī)C編程若指針沒(méi)有指向提前聲明的變量,會(huì)產(chǎn)生混亂eg:情景一: 情景二:Type *p,*q; Type *p,*q,pp,qq;給指針p賦值; p=&pp;給指針q賦值; q=&qq;p或q的值會(huì)出問(wèn)題 正常,
新PIC18 Bootloader PhsBoot_v3.0是我最新用C語(yǔ)言實(shí)現(xiàn)的PIC bootloader, 采用串口通信,適用于PIC18, 并為其用C#寫(xiě)了PC端通信程序PhsLoader_v3.0。PhsLoader_v3.0通過(guò)串口按照自定義的通信協(xié)定發(fā)送數(shù)據(jù)PhsBoo
HyperBootloader_PIC18_J 和 HyperBootloader_PIC18_None_J 完成PIC16 bootloader (詳細(xì)情況請(qǐng)閱讀我的上一篇隨筆《自己用C語(yǔ)言寫(xiě)單片機(jī)PIC16serial bootloader》) 后,接著就開(kāi)始寫(xiě)PIC18的UART bootloader。
volatile關(guān)鍵字是一種類(lèi)型修飾符,用它聲明的類(lèi)型變量表示可以被某些編譯器未知的因素更改,比如操作系統(tǒng)、硬件或者其它線程等。遇到這個(gè)關(guān)鍵字聲明的變量,編譯器對(duì)訪問(wèn)該變量的代碼就不再進(jìn)行優(yōu)化,從而可以提供對(duì)特殊地址的穩(wěn)定訪問(wèn)
編了個(gè)PIC的項(xiàng)目,對(duì)C語(yǔ)言里的位運(yùn)算還是蠻有感悟的,特此記錄一下。譬如說(shuō),在程序中定義了一個(gè)char類(lèi)型的變量,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;//(用這種方式