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

正文內(nèi)容

接口技術(shù)_3嵌入式程序設(shè)計語言(參考版)

2025-05-29 12:05本頁面
  

【正文】 107 基于 ARM的嵌入式系統(tǒng)接口技術(shù) 訓(xùn)練實例 2. 訓(xùn)練目的 掌握嵌入式系統(tǒng)開發(fā)中 C語言的編程方法及使用技巧,掌握 ADS集成開發(fā)環(huán)境的使用方法。整步模式下的步距角為 180,半步模式則為 90。 當給步進電機加一個脈沖信號,電機則轉(zhuǎn)過一個步距角。j++)。//下標為 i的元素 , 輸出字形數(shù)據(jù) for(j=0。i++) { //數(shù)碼管從 0到 5依次將字符顯示出來 *((U8*) 0x10000006) = ~(0x20i)。 while(1) { for(i=0。 //只用到 05 104 基于 ARM的嵌入式系統(tǒng)接口技術(shù) 工作過程二 動態(tài)掃描顯示 在函數(shù)中,當點亮左邊第一只數(shù)碼管時,字形數(shù)據(jù)為顯示“ 0”,點亮第二只時,顯示 “ 1”,因此,可以用移位取反的方法,保證地址 0x10000006中的值只有一位為 0,當某位為 0時,相應(yīng)的字形地址 0x10000004里的值與移位的位數(shù)一致,即與所賦的值下標一致,顯示下標的字形。 103 基于 ARM的嵌入式系統(tǒng)接口技術(shù) 工作過程一 建立字形表 用數(shù)組建立字形表。 bl Main 跳轉(zhuǎn)到 C程序入口點 ...... 102 基于 ARM的嵌入式系統(tǒng)接口技術(shù) 回到工作場景二 要想在六只數(shù)碼管上顯示不同的字形 , 因為控制字形的地址只有一個 , 因此必須用掃描顯示的方法:即在點亮某一只數(shù)碼管時 , 字形地址里根據(jù)該數(shù)碼管的顯示內(nèi)容確定 , 接著點亮下一只數(shù)碼管時 , 字形地址里變成下一只數(shù)碼管要顯示的內(nèi)容 , 依次使每一只數(shù)碼管點亮 , 字形地址也依次變成相應(yīng)的內(nèi)容 。對需要清零的區(qū)域清零 mov r2, 0 3 cmp r3, r1 。 STRCC r2, [r1] + ADD r1, r1, 4 bcc %B1 ??截惓跏蓟臄?shù)據(jù) ldrcc r2, [r0], 4 。檢查是否不同 beq %F2 。需要清零的區(qū)域起始地址 。得到 ROM只讀數(shù)據(jù)區(qū)結(jié)束地址 +1 ldr r1, =|Image$$RW$$Base| 。 store to sp, new PC ldmfd sp!,{r8r9,pc} 。取得中斷服務(wù)例程向量 r8 = r8 + r9 * 4 ldr r8,[r8] 。把 INTOFFSET寄存器的值裝載到 r9 ldr r8,=HandleEINT0 。 at 0x18, 0x1c str r1,[r0] IsrIRQ sub sp,sp,4 。t 39。This routine is needed ldr r1,=IsrIRQ 。跳轉(zhuǎn)到初始化堆棧子函數(shù) 99 基于 ARM的嵌入式系統(tǒng)接口技術(shù) 工作過程八 中斷處理程序 。 子函數(shù)對各種工作模式下的堆棧都進行了初始化,初始化堆棧段代碼中用到的常量在程序的開始部分定義。每次在地址上加 4 str r3, [r1], 4 cmp r2, r0 bne %B0 98 基于 ARM的嵌入式系統(tǒng)接口技術(shù) 工作過程七 設(shè)置堆棧 系統(tǒng)堆棧初始化取決于用戶使用哪些異常,以及系統(tǒng)需要處理哪些錯誤類型。SMRDATA的結(jié)束地址 , 共有 13個寄存器 0 。設(shè)置存儲器控制寄存器 ldr r0,=SMRDATA ldr r1,=BWSCON 。Fin=12MHz,Fout=50MHz str r1,[r0] ENDIF 97 基于 ARM的嵌入式系統(tǒng)接口技術(shù) 工作過程六 設(shè)置隨機存儲器 若系統(tǒng)使用了 DRAM或其他存儲器外設(shè),需要設(shè)置相關(guān)寄存器,以確定其刷新頻率、總線寬度等信息。調(diào)整 LOCKTIME 寄存器 , 首先設(shè)置鎖相環(huán)的 lock time ldr r0,=LOCKTIME ldr r1,=0xffffff str r1,[r0] 。禁止所有子中斷 , 即設(shè)置子中斷屏蔽寄存器 str r1,[r0] 96 基于 ARM的嵌入式系統(tǒng)接口技術(shù) 工作過程五 設(shè)置系統(tǒng)時鐘頻率 有時需要設(shè)置系統(tǒng) CPU的速度和時鐘頻率(各寄存器意義參見第十章 2410時鐘設(shè)置)。此三條匯編代碼使寄存器 WTCON置為 0 str r1,[r0] 95 基于 ARM的嵌入式系統(tǒng)接口技術(shù) 工作過程四 關(guān)中斷 ( 包括中斷和子中斷 ) ldr r0,=INTMSK ldr r1,=0xffffffff 。復(fù)位中斷時跳到這里開始執(zhí)行 , 復(fù)位異常入口 ldr r0,=WTCON 。IRQ中斷異常 b HandlerFIQ 。數(shù)據(jù)終止異常 b . 。軟件中斷異常 b HandlerPabort 。復(fù)位異常 , 跳轉(zhuǎn)到 ResetHandler標號處 b HandlerUndef 。 93 基于 ARM的嵌入式系統(tǒng)接口技術(shù) 工作過程二 異常入口 啟動代碼從 ENTRY處開始執(zhí)行,這里放的是異常向量表,第一個就是復(fù)位異常, b ResetHandler,跳轉(zhuǎn)到復(fù)位異常處。 92 基于 ARM的嵌入式系統(tǒng)接口技術(shù) 工作過程一 參數(shù)初始化 通常程序的最開始的地方做變量定義等初始化工作, ARM的啟動代碼也不例外,在啟動代碼最開始的地方,對代碼中使用到的變量進行定義。也就是說,對于兩塊不同的嵌入式系統(tǒng)板而言,即使它們采用的CPU是相同的,它們的系統(tǒng)引導(dǎo)程序也可能不同。由于以上的操作均與處理器體系結(jié)構(gòu)和系統(tǒng)配置密切相關(guān),所以一般是采用匯編語言編寫的 不同的硬件,啟動代碼會有差異,但基本原理是相似的,因此我們選擇了其中一種進行簡單的分析,以期了解一下匯編語言程序的實際應(yīng)用 91 基于 ARM的嵌入式系統(tǒng)接口技術(shù) 回到工作場景一 系統(tǒng)引導(dǎo)程序是在硬件上執(zhí)行的第一段程序代碼,它通常被安排在系統(tǒng)復(fù)位異常向量地址處。函數(shù)返回 88 基于 ARM的嵌入式系統(tǒng)接口技術(shù) 小結(jié) 以上通過幾個簡單的例子說明了嵌入式開發(fā)中常用的 C語言和匯編語言混合編程的一些方法和基本的思路 , 其實最核心的問題就是如何在 C和匯編之間傳值 , 其余的問題就是各自用自己的方式來進行處理 。 asse_add ADD r0, r0, r1 。調(diào)用函數(shù) END 87 基于 ARM的嵌入式系統(tǒng)接口技術(shù) 匯編語言中的函數(shù)定義 在匯編語言中對函數(shù)的定義比較簡單,直接用函數(shù)入口地址標號代表函數(shù)名,不需要象 C語言程序中的函數(shù)一樣的形式參數(shù)和實參,如例題中的函數(shù)定義語句④ ⑤ 。 AREA asmfile, CODE, READONLY IMPORT cFun 。 int cFun(int a, int b, int c) { return a+b+c。假如函數(shù)有不多于四個參數(shù),對應(yīng)的用 R0R3來進行傳遞,多于 4個參數(shù)時借助堆棧,函數(shù)的返回值通過R0來返回。 IMPORT main 2. 函數(shù)調(diào)用 在匯編程序中用 BL指令調(diào)用函數(shù)或 B指令跳轉(zhuǎn),如例題中的語句③。如果不是 , 程序跳轉(zhuǎn)到 strcopy繼續(xù)復(fù)制 MOV pc,lr 。存儲字節(jié)并更新目的字符串指針地址 CMP R2, 0 。R1指向源字符串 LDRB R2, [R1],1 。用于聲明全局符號可以被其他文件引用 strcopy 。 } 83 基于 ARM的嵌入式系統(tǒng)接口技術(shù) 在 C語言程序中調(diào)用匯編程序 下面為調(diào)用的匯編程序。\n,srcstr,dststr)。\n 39。 printf( 39。 strcopy(dststr,srcstr)。%s39。%s39。 printf(Before copying:\n)。 //聲明引用的函數(shù)在其他源文件中定義 int main() { const char *srcstr = First string source。 82 基于 ARM的嵌入式系統(tǒng)接口技術(shù) 在 C語言程序中調(diào)用匯編程序 再看一個如何在 C程序中調(diào)用匯編語言子程序的例子,該段代碼實現(xiàn)了將一個字符串復(fù)制到另一個字符串。 APCS規(guī)定了子程序調(diào)用的基本規(guī)則,這些規(guī)則包括子程序調(diào)用過程中寄存器、數(shù)據(jù)棧的使用規(guī)則以及參數(shù)的傳遞規(guī)則。 x = asse_add(10, 20)。 EXPORT asse_add 如果被調(diào)用的函數(shù)是在 ARM匯編中定義的,則需要在 ARM匯編程序中使用偽操作如 EXPORT聲明此函數(shù)為全局符號,可被外部程序引用。 當調(diào)用函數(shù)與被調(diào)用函數(shù)位于不同文件時,在 C語言程序中把被調(diào)函數(shù)先聲明為 extern,表示此函數(shù)在其他源文件中定義,函數(shù) asse_add是在匯編語言程序中定義的。 } 79 基于 ARM的嵌入式系統(tǒng)接口技術(shù) 在 C語言程序中調(diào)用匯編程序 1. C語言中函數(shù)聲明 在 C語言程序中,把被調(diào)用的匯編語言的函數(shù)聲明為extern,如例題中的語句⑥。 __asm { add tmp, x, y }。 2. GNU ARM編譯器中使用的格式 __asm__(“指令 ...... 指令 ” )。 } 77 基于 ARM的嵌入式系統(tǒng)接口技術(shù) 1. ARM編譯器(如 ADS IDE)中使用的格式 __asm //使用的是兩個下劃線 { 指令 [。 __asm //內(nèi)嵌了匯編代碼 ⑩ { add tmp, x, y }。 //調(diào)用匯編函數(shù) asse_add ⑧ y = embed_add(10, 20)。 //函數(shù)聲明 ⑦ void main() { int x, y。 extern int asse_add(int x, int y)。r0 = r0 + r1 MOV pc, lr 。調(diào)用 C程序的函數(shù) ,要用 BL(不能用 B)調(diào)用 ③ stop B stop asse_add 。 程序入口地址 start MOV sp, 0x33000000 。聲明可被外部程序引用 ② AREA init, CODE, READONLY 。 IMPORT main 。 } } } C語言和匯編語言混合編程 75 基于 ARM的嵌入式系統(tǒng)接口技術(shù) C語言和匯編語言混合編程 通過如下兩段匯編程序代碼 , 讓我們認識一下C語言和匯編語言混合編程的方法 。i){ //數(shù)碼管從 F到 0依次將字符顯示出來 *((U8*) 0x10000004) = seg7table[i]。 } for(i=0xf。i++) { //數(shù)碼管從 0到 F依次將字符顯示出來 *((U8*) 0x10000004) = seg7table[i]。 //位碼置全 0, 兩只數(shù)碼管同時選中 , 同時亮 while(1) { for(i=0。 //延時函數(shù) void Test_Seg7(void) { int i。 } } } 73 基于 ARM的嵌入式系統(tǒng)接口技術(shù) 嵌入式 C語言編程 例題三:數(shù)碼管顯示程序 define U8 unsigned char //沒有包含頭文件 , 因此直接使用宏定義 unsigned char seg7table[16] = { /* 0 1 2 3 4 5 6 7*/ 0xc0, 0xf9, 0xa4, 0xb0, 0x99, 0x92, 0x82, 0xf8, /* 8 9 A B C D E F*/ 0x80, 0x90, 0x88, 0x83, 0xc6, 0xa1, 0x86, 0x8e, }。i!=0。j++){ *((unsigned char *)0x10000000)=~(0x0Fj)。 for(j=1。i!=0。 while(1){ *((unsigned char *)0x10000000)=0xFF。i)。 //位 j為 0燈亮 for(i=100000。i)。//放在循環(huán)內(nèi) , 每次亮過后全滅 for(i=100000。j8。 例題一:使跑馬燈從左開始,依次亮,滅(全滅 —1亮 —全滅 —2亮 —全滅 —3亮 …… ) void main(void) { int i,j。= ~BIT2。 void Set_bit2(void) //聲明函數(shù) , 功能是設(shè)置位 [2] { a |= BIT2。 //若 rUTRSTAT0位 [0]為 0則 !(rUTRSTAT0 amp。 // 0x1234ff78 whi
點擊復(fù)制文檔內(nèi)容
規(guī)章制度相關(guān)推薦
文庫吧 www.dybbs8.com
備案圖鄂ICP備17016276號-1