freepeople性欧美熟妇, 色戒完整版无删减158分钟hd, 无码精品国产vα在线观看DVD, 丰满少妇伦精品无码专区在线观看,艾栗栗与纹身男宾馆3p50分钟,国产AV片在线观看,黑人与美女高潮,18岁女RAPPERDISSSUBS,国产手机在机看影片

正文內(nèi)容

接口技術(shù)_3嵌入式程序設(shè)計(jì)語(yǔ)言-預(yù)覽頁(yè)

 

【正文】 LTORG src DCD 1,2,3,4,5,6,7,8,1,2,3,4,5,6,7,8,1,2,3,4 。 語(yǔ)法格式: {標(biāo)號(hào) } SPACE 分配字節(jié)數(shù) 。 ARM: IF ELSE ENDIF 語(yǔ)法格式: IF 邏輯表達(dá)式 …… {ELSE …… } ENDIF GNU: .if .else .endif 語(yǔ)法格式: .if …… {.else …… } .endif 35 基于 ARM的嵌入式系統(tǒng)接口技術(shù) 常用偽操作的用法 GNU: .macro、 .endm(宏結(jié)束標(biāo)志)、 .exitm(宏跳出) 語(yǔ)法格式: .macro 宏名 {參數(shù) 1 } {,參數(shù) 2} … {,參數(shù) N} …… .endm 參數(shù)可以使用 “ \字符 ” 直接使用,如: MOV R0,\arg 。文件名不用雙引號(hào)等符號(hào) GNU: .include 語(yǔ)法格式: .include 文件名 匯編語(yǔ)言程序設(shè)計(jì) 38 基于 ARM的嵌入式系統(tǒng)接口技術(shù) ARM匯編程序設(shè)計(jì) 嵌入式系統(tǒng)開發(fā)的編程語(yǔ)言有匯編語(yǔ)言、C/C++語(yǔ)言及 C與匯編混合編程、 JAVA語(yǔ)言。 如: ARM匯編環(huán)境: AREA TEST,CODE,READONLY …… END GNU ARM環(huán)境: .section .text …… .end 匯編語(yǔ)言程序的編程規(guī)則 40 基于 ARM的嵌入式系統(tǒng)接口技術(shù) 段的內(nèi)部 , ARM匯編程序中每一行的通用格式為 : {標(biāo)號(hào) } {指令 |指示符 |偽指令 } {;注解 }。 匯編語(yǔ)言程序的編程規(guī)則 41 基于 ARM的嵌入式系統(tǒng)接口技術(shù) 標(biāo)簽是一個(gè)符號(hào),可以代表指令的地址、變量、數(shù)據(jù)的地址和常量。 在 ARM匯編編譯器中,所有的標(biāo)簽必須在一行的開頭頂格寫,前面不能留空格,后面不能加 “ :”; 在 GNU ARM匯編編譯器中,標(biāo)簽的后面需要加上 “ :”,對(duì)前面是否留空格也沒(méi)有嚴(yán)格的規(guī)定?!遍_始;而在 GNU ARM匯編編譯器中,注釋從“ ”開始。 值得注意的是內(nèi)置變量的設(shè)置不能用 SETA、 SETL或 SETS等指示符來(lái)設(shè)置 , 只能用于表達(dá)式或條件語(yǔ)句 。 字符串變量的前面有一個(gè) “ $”字符,在匯編時(shí)編譯器將用該字符串變量的內(nèi)容代替該串變量,類似于取變量的值。 asse_add 。調(diào)用時(shí)不需要考慮參數(shù)的問(wèn)題,只要用帶返回的跳轉(zhuǎn)指令直接跳轉(zhuǎn)即可。跳轉(zhuǎn)到子程序 ADD R1,R2,2 。復(fù)制返回地址到 PC, 實(shí)現(xiàn)子程序的返回 (MOV pc,lr) 52 基于 ARM的嵌入式系統(tǒng)接口技術(shù) 子程序的實(shí)現(xiàn)及調(diào)用 3. 子程序調(diào)用的實(shí)現(xiàn)過(guò)程 子程序的功能完成后,需要用一個(gè) MOV指令將 LR(14)中的值復(fù)制到 PC(R15)中,即恢復(fù)現(xiàn)場(chǎng),從而實(shí)現(xiàn)了子程序調(diào)用的返回功能,恢復(fù)現(xiàn)場(chǎng)即恢復(fù) PC的值不是自動(dòng)完成的,必須使用 MOV pc,lr這條語(yǔ)句。子程序定義 , ARM匯編中不加 “ :”, GNU匯編中用“ :” …… 。 include ① define rled_display (*(U8 *)0x10000000) ② void main(void) { int i。i!=0。i!=0。 57 基于 ARM的嵌入式系統(tǒng)接口技術(shù) 預(yù)處理指令 文件名外用尖括號(hào)括起來(lái)時(shí)為標(biāo)準(zhǔn)頭文件。搜索自定義頭文件時(shí),首先在當(dāng)前目錄(通常為源文件所在目錄)中查找,如果沒(méi)找到,再按環(huán)境變量所指定的目錄順序搜索(即后按標(biāo)準(zhǔn)方式檢索)。 如: / INTERRUPT define rSRCPND (*(volatile unsigned *)0x4a000000) //源未決寄存器 define rINTMOD (*(volatile unsigned *)0x4a000004) //中斷模式寄存器 define rINTMSK (*(volatile unsigned *)0x4a000008) //中斷屏蔽寄存器 59 基于 ARM的嵌入式系統(tǒng)接口技術(shù) 預(yù)處理指令 1) 在中斷處理時(shí)需要用到這些寄存器,如果編程的時(shí)候直接使用地址進(jìn)行賦值等操作,即不好記憶又容易出錯(cuò),如果換一種硬件還不容易修改,利用宏定義,如第一個(gè)中斷源末決寄存器地址是0x4a000000,取一個(gè)相關(guān)的名字 rSRCPND( r表示是寄存器),則以后在程序中就可以使用這個(gè)名字進(jìn)行賦值等操作,如同使用一個(gè)普通的變量一樣。 ④ 60 基于 ARM的嵌入式系統(tǒng)接口技術(shù) 預(yù)處理指令 2) unsigned意思是無(wú)符號(hào)整數(shù),即 32位的寄存器( CPU以字節(jié)為單位編址,而 C語(yǔ)言指針以指向的數(shù)據(jù)類型長(zhǎng)度作自增和自減)。 5) 修飾符 volatile將在后面介紹。 ifndef __DEF_H__ define __DEF_H__ …… endif /*__DEF_H__*/ 63 基于 ARM的嵌入式系統(tǒng)接口技術(shù) 預(yù)處理指令 3. 條件編譯 條件編譯的格式如下所示。 const常量是以變量的形式來(lái)定義的一個(gè)量,并且通過(guò)使用關(guān)鍵字 const,來(lái)表明這個(gè)變量的值不能被改變。這樣做可能會(huì)產(chǎn)生問(wèn)題,如硬件寄存器中內(nèi)容的改變,可能不是程序中改變的,因而每次訪問(wèn)其中的值都可能不一致。 以上程序的意義為在絕對(duì)地址 0xF0000FF00中寫入8位字節(jié)數(shù)據(jù) 11。 define rSOURCE (*(volatile unsigned char *)0xF000FF00) 可以象 C語(yǔ)言的變量一樣使用 rSOURCE, 更加方便 , 它代表一個(gè)物理地址里面的內(nèi)容 。= ~0x4 //~0x4即 1011, 把 b的第 2位設(shè)置為 0 c amp。 unsigned int a, b, mask = 0x0000ff00。 // 0x00000056 b = (a 8) amp。 b = a amp。 b = a | mask。 0x1)為真 70 基于 ARM的嵌入式系統(tǒng)接口技術(shù) 位運(yùn)算 掩碼的方法是一種具有極高可移植性的方法 , 可以使用 define 和位掩碼 ( bit masks) 提高程序的移植性 , 例如: define BIT2 (0x1 2) static int a。 } 71 基于 ARM的嵌入式系統(tǒng)接口技術(shù) 嵌入式 C語(yǔ)言編程 用存儲(chǔ)器地址 0x10000000的高四位控制跑馬燈 ,在下面的控制程序中,假設(shè)跑馬燈 1(最左邊一個(gè)發(fā)光二極管)由位 [4]控制,跑馬燈 2(左邊第二個(gè)發(fā)光二極管)由位 [5]控制,依次類推。j++){ *((unsigned char *)0x10000000)=0xFF。 //延時(shí)程序 , 自己調(diào)節(jié)延時(shí)時(shí)間 *((unsigned char *)0x10000000)=~(0x1j)。 } } } 72 基于 ARM的嵌入式系統(tǒng)接口技術(shù) 嵌入式 C語(yǔ)言編程 例題二:使跑馬燈從左開始,一個(gè)亮,兩個(gè)亮,三個(gè)亮 …… 最后全滅( 1亮 12亮 123亮 …… ) void main(void) { int i,j。i)。 //4~ 3+j為 0 for(i=1000000。//定義顯示字形的數(shù)組 , 某位為 0時(shí)點(diǎn)亮 , 下標(biāo)對(duì)應(yīng)要顯示的字形 , 方便查表 void Delay(int time)。i0x10。i=0x0。 匯編程序代碼如下 。 定義段 ENTRY 。此函數(shù)可被外部程序引用 ④ ADD r0, r0, r1 。 //聲明外部定義的函數(shù) ⑥ int embed_add(int x, int y)。 //調(diào)用函數(shù) embed_add ⑨ } int embed_add(int x, int y) { int tmp。 指令 ] //注釋 or /*注釋 */,不能用分號(hào)注釋 ...... [指令 ] }。 return tmp。 80 基于 ARM的嵌入式系統(tǒng)接口技術(shù) 在 C語(yǔ)言程序中調(diào)用匯編程序 2. 匯編語(yǔ)言程序中函數(shù)聲明 在匯編語(yǔ)言程序中,把被調(diào)用的函數(shù)聲明為EXPORT,如例題中的語(yǔ)句②。 //在 C程序中直接調(diào)用,參數(shù)遵循 APCS 81 基于 ARM的嵌入式系統(tǒng)接口技術(shù) 在 C語(yǔ)言程序中調(diào)用匯編程序 為了滿足 ARM匯編、 C與 C++之間的互相調(diào)用,必須保證編寫的代碼遵循 APCS( ARM過(guò)程調(diào)用標(biāo)準(zhǔn))。 include extern void strcopy(char *d, const char *s)。 printf( 39。\n,srcstr,dststr)。%s39。 return 0。R0指向目的字符串 。判斷是否為字符串結(jié)尾 BNE strcopy 。 BL main 85 基于 ARM的嵌入式系統(tǒng)接口技術(shù) 在匯編語(yǔ)言程序中調(diào)用 C代碼 3. 參數(shù)傳遞 C程序和匯編程序之間的參數(shù)傳遞是通過(guò)APCS的規(guī)定來(lái)進(jìn)行的。 } 86 基于 ARM的嵌入式系統(tǒng)接口技術(shù) 在匯編語(yǔ)言程序中調(diào)用 C代碼 在 ARM匯編程序中調(diào)用上面的函數(shù)的代碼如下。 但在函數(shù)結(jié)束時(shí)必須顯示地恢復(fù)現(xiàn)場(chǎng),通常使用語(yǔ)句 MOV pc,lr,相當(dāng)于 C語(yǔ)言中的返回語(yǔ)句return或右括號(hào)“ }”。 回到工作場(chǎng)景 90 基于 ARM的嵌入式系統(tǒng)接口技術(shù) 回到工作場(chǎng)景一 初始化程序即系統(tǒng)的啟動(dòng)代碼,是系統(tǒng)在加電后運(yùn)行的第一段代碼,主要任務(wù)是初始化處理器模式,設(shè)置堆棧,初始化變量等等。在一塊板子上運(yùn)行正常的系統(tǒng)引導(dǎo)程序,要想移植到另一塊板子上,也必須進(jìn)行修改。 b ResetHandler 。指令終止異常 b HandlerDabort 。FIQ中斷異常 94 基于 ARM的嵌入式系統(tǒng)接口技術(shù) 工作過(guò)程三 關(guān)看門狗定時(shí)器 ResetHandler 。禁止所有中斷 , 即設(shè)置中斷屏蔽寄存器 str r1,[r0] ldr r0,=INTSUBMSK ldr r1,=0x3ff 。如果啟用鎖相環(huán) , 則需要使用下面的代碼配置 MPLL IFDEF PLL_ON_START ldr r0,=MPLLCON ldr r1,=((M_MDIV12)+(M_PDIV4)+M_SDIV) 。BWSCON地址 add r2, r0, 52 。一般情況下,管理模式堆棧必須設(shè)置;若使用了 IRQ中斷,則 IRQ中斷堆棧必須設(shè)置。 Setup IRQ handler ldr r0,=HandleIRQ 。subs pc,lr,439。把中斷服務(wù)例程向量基地址裝載到 r8 add r8,r8,r9,lsl 2 。跳轉(zhuǎn)到新的 PC處即中斷處理例程處 100 基于 ARM的嵌入式系統(tǒng)接口技術(shù) 工作過(guò)程九 初始化應(yīng)用程序執(zhí)行環(huán)境 ldr r0, =|Image$$RO$$Limit| 。 Zero init base = top of initialised data cmp r0, r1 。 LDRCC r2, [r0] + ADD r0, r0, 4 strcc r2, [r1], 4 。Zero init strcc r2, [r3], 4 bcc %B3 101 基于 ARM的嵌入式系統(tǒng)接口技術(shù) 工作過(guò)程十 跳轉(zhuǎn)到 C程序的入口點(diǎn) 至此,啟動(dòng)代碼執(zhí)行完畢,啟動(dòng)代碼完成了:參數(shù)初始化;設(shè)置中斷異常向量表;初始化硬件,包括鎖相環(huán)、看門狗、中斷、系統(tǒng)時(shí)鐘和主頻等;初始化 RAM;初始化堆棧;復(fù)制 RW段到 RAM,將 Zi段清零;最后跳轉(zhuǎn)到 C語(yǔ)言程序。因?yàn)橹灰@示六種字形 05,因此建立的字形表只需要六個(gè)元素 define U8 unsigned char //用宏定義 , 定義 U8 U8 seg7table[6] = { //如果前面沒(méi)有定義 U8, 也可以直接使用 unsigned char /* 0 1 2 3 4 5*/ 0xc0, 0xf9, 0xa4, 0xb0, 0x99, 0x92, }。i0x6。j0x1000。電機(jī)有兩種工作模式:半步模式和整步模式。 108 基于 ARM的嵌入式系統(tǒng)接口技術(shù) 訓(xùn)練實(shí)例 3. 訓(xùn)練過(guò)程 在 CodeWarrior
點(diǎn)擊復(fù)制文檔內(nèi)容
規(guī)章制度相關(guān)推薦
文庫(kù)吧 www.dybbs8.com
備案圖鄂ICP備17016276號(hào)-1