嵌入式系統(tǒng)實(shí)驗(yàn)報(bào)告_第1頁(yè)
嵌入式系統(tǒng)實(shí)驗(yàn)報(bào)告_第2頁(yè)
嵌入式系統(tǒng)實(shí)驗(yàn)報(bào)告_第3頁(yè)
嵌入式系統(tǒng)實(shí)驗(yàn)報(bào)告_第4頁(yè)
嵌入式系統(tǒng)實(shí)驗(yàn)報(bào)告_第5頁(yè)
已閱讀5頁(yè),還剩11頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、感謝你的觀看大連理工大學(xué)本科實(shí)驗(yàn)報(bào)告課程名稱:嵌入式系統(tǒng)實(shí)驗(yàn)學(xué)院(系):電子信息與電氣工程學(xué)部專 業(yè): 自動(dòng)化班 級(jí):0804學(xué) 號(hào):學(xué)生姓名:何韜2011 年11月18 日大連理工大學(xué)實(shí)驗(yàn)報(bào)告學(xué)院(系): 電信 專業(yè): 自動(dòng)化 班級(jí):0804姓 名:何韜 學(xué)號(hào):組:實(shí)驗(yàn)時(shí)間:2011-11-12 實(shí)驗(yàn)室:d108 實(shí)驗(yàn)臺(tái):指導(dǎo)教師簽字: 成績(jī):實(shí)驗(yàn)二ARM勺串行口實(shí)驗(yàn)一、實(shí)驗(yàn)?zāi)康暮鸵笠婎A(yù)習(xí)報(bào)告二、實(shí)驗(yàn)原理和內(nèi)容見預(yù)習(xí)報(bào)告三、主要儀器設(shè)備硬件:AR限入式開發(fā)平臺(tái)、用于 ARM7TDMI白JTAG仿真器、POPentium100以上、串口線。軟件:PC機(jī)操作系統(tǒng)win98、Win2000或Wi

2、nXP、ARMSDT 2.51或ADS1.2集成開發(fā)環(huán)境、仿真器驅(qū) 動(dòng)程序、超級(jí)終端通訊程序。四、實(shí)驗(yàn)步驟見預(yù)習(xí)報(bào)告五、核心代碼在主函數(shù)中實(shí)現(xiàn)將從串口 0接收到的數(shù)據(jù)發(fā)送到串口 0 (Main.c)int main(void)char c11;char err;ARMTargetInit(); /開發(fā)版初始化LCD_Init();LCD_ChangeMode(DspTxtMode);/展換LCD顯示模式為文本顯示模式LCD_Cls();/文本模式下清屏命令while(1)Uart_SendByte(0,0xa);/ 換行Uart_SendByte(0,0xd);回車err=Uart_Getch

3、(c1,0,0); /從串口采集數(shù)據(jù)Uart_SendByte(0,c10); /顯示采集的數(shù)據(jù)LCD_printf(c1);/ 向液晶屏輸出return 0;六、實(shí)驗(yàn)結(jié)果與分析1 .ARM串口實(shí)驗(yàn)超級(jí)終端上顯示:當(dāng)輸入一個(gè)字符,會(huì)在超級(jí)終端中顯示出來(lái),如下圖所示。2 .ARM串口實(shí)驗(yàn)Debu世行顯示:七、實(shí)驗(yàn)心得該實(shí)驗(yàn)展示了 ARM:用行口通訊過程及控制方式, 使我基本掌握了 ARM的串行口工作原理、 編程實(shí)現(xiàn)ARM的UART通訊及CPUJ用串口通訊的方法,對(duì)之前所學(xué)知識(shí)有了明確的理解和認(rèn)識(shí),能夠在正確操作下準(zhǔn)確做出實(shí)驗(yàn)現(xiàn)象,并在實(shí)驗(yàn)箱上顯示出實(shí)驗(yàn)結(jié)果,使我收獲很多。大連理工大學(xué)實(shí)驗(yàn)報(bào)告學(xué)院

4、(系): 電信 專業(yè): 自動(dòng)化 班級(jí):0804姓 名:何韜 學(xué)號(hào):組: 實(shí)驗(yàn)時(shí)間:2011-11-12 實(shí)驗(yàn)室:d108 實(shí)驗(yàn)臺(tái):指導(dǎo)教師簽字: 成績(jī):實(shí)驗(yàn)九uC/OS-II在ARMf臺(tái)的移植一、實(shí)驗(yàn)?zāi)康暮鸵笠婎A(yù)習(xí)報(bào)告二、實(shí)驗(yàn)原理和內(nèi)容見預(yù)習(xí)報(bào)告三、主要儀器設(shè)備硬件:AR嘏入式開發(fā)平臺(tái)、用于 ARM7TDM的JTAG仿真器、PCI Pentium100以上、串口線。軟件:PC機(jī)操作系統(tǒng) win98、Win2000或WinXP、ARM SDT 2.51或ADS1.2集成開發(fā)環(huán)境、仿真器 驅(qū)動(dòng)程序、超級(jí)終端通訊程序。四、實(shí)驗(yàn)步驟見預(yù)習(xí)報(bào)告五、核心代碼所涉及到的函數(shù):匯編函數(shù)OSStartHigh

5、Rdy()OSCtxSw()OSIntCtxSw()OSTickISR()C語(yǔ)言函數(shù)void *OSTaskStkInit (void (*task)(void *pd),void *pdata, void *ptos,INT16U opt)void OSTaskCreateHook (OS_TCB *ptcb)void OSTaskDelHook (OS_TCB *ptcb)void OSTaskSwHook (void)void OSTaskStatHook (void)void OSTimeTickHook (void)后5個(gè)函數(shù)為接口函數(shù),可以不加代碼 cut/OS-II 的啟動(dòng): v

6、oid main (void) OSInit(); / 初始化 uC/OS-II .通過調(diào)用OSTaskCreate()或OSTaskCreateExt()創(chuàng)建至少一個(gè)任務(wù); .OSStart(); /開始多任務(wù)調(diào)度,永不返回 基于uC/OS勺應(yīng)用開發(fā): void YourTask (void *pdata) /*用戶代碼*/OSTaskDel(OS_PRIO_SELF);main函數(shù),ucos-ii初始化等定義:#include"./ucos-ii/includes.h" /* uC/OS interface */#include "./ucos-ii/add/

7、osaddition.h"#include "./inc/drivers.h"#include "./inc/sys/lib.h"#include "./src/gui/gui.h"#include <string.h>#include <stdio.h>#pragma import(_use_no_semihosting_swi) / ensure no functions that use semihosting/*任務(wù)定義*/*OS_STK SYS_Task_StackSTACKSIZE尸0,

8、; /system task#define SYS_Task_Prio1void SYS_Task(void *Id);*/OS_STK task1_StackSTACKSIZE=0, ; /Main_Test_Taskvoid Task1(void *Id);Main_Test_Task#define Task1_Prio 12OS_STK task2_StackSTACKSIZE=0, ; /test_Test_Task刷新任務(wù)堆棧堆棧堆棧void Task2(void *Id); /test_Test_Task#define Task2Prio 15/*已經(jīng)定義的。亞務(wù)*#define

9、SYS_Task_Prio1#define Touch_Screen_Task_Prio9#define Main_Task_Prio 12#define Key_Scan_Task_Prio 58#define Lcd_Fresh_prio59#define Led_Flash_Prio60* int main(void)ARMTargetInit(); / do target (uHAL based ARM system) initialisation / OSInit(); / needed by uC/OS-II / OSInitUart();initOSFile();/#if USE

10、_MINIGUI=0/ initOSMessage();/ initOSDC();/ LoadFont();/#endif/loadsystemParam();/ create the tasks in uC/OS and assign increasing / priorities to them so that Task3 at the end of / the pipeline has the highest priority. /LCD_printf("Create task on uCOS-II.n");OSTaskCreate(SYS_Task, (void *

11、)0, (OS_STK *)&SYS_Task_StackSTACKSIZE-1, SYS_Task_Prio);OSTaskCreate(Task1, (void *)0, (OS_STK *)&task1_StackSTACKSIZE-1, Task1_Prio);OSTaskCreate(Task2, (void *)0, (OS_STK *)&task2_StackSTACKSIZE-1, Task2_Prio); OSAddTask_Init(0);LCD_printf("Starting uCOS-II.n");/LCD_printf(&

12、quot;Entering graph moden");LCD_ChangeMode(DspGraMode);OSStart(); / start the OS / / never reached / return 0;/mainvoid Task1(void *Id) for(;)printf("run task1'n");OSTimeDly(1000); void Task2(void *Id) for(;) printf("run task2'n"); OSTimeDly(3000); 六、實(shí)驗(yàn)結(jié)果與分析超級(jí)終端上交替顯示

13、 run task1 , run task2 , run task1 , runtask1 , run task1 , run task2 , run task1 , run task1 , run task1。表明 由于task1的優(yōu)先級(jí)為12,而task2的優(yōu)先級(jí)為15,所以系統(tǒng)在task1和task2 同時(shí)就緒時(shí)總是先執(zhí)行task1后執(zhí)行task2.由于task2掛起時(shí)間為3秒,所以 在task2掛起期間task1能執(zhí)行兩次,而當(dāng)?shù)谌螘r(shí)由于task1與task2同時(shí)處于就緒態(tài),由優(yōu)先級(jí)次序,還是先執(zhí)行taskl在執(zhí)行task2.然后就這樣周而復(fù)始的循環(huán)下去。為驗(yàn)證ucos的強(qiáng)實(shí)時(shí)性,可

14、以去掉task2 ()的“ OSTimeDly(3000); ”然后令taskl ()中的 “ OSTimeDly(1000); " 改為 “ OSTimeDly(10); ”。觀察到的實(shí)驗(yàn)現(xiàn)象是在超級(jí)終端上顯示被“ run taskl ”打斷的” “ run task2 ",反之把taskl和task2的優(yōu)先級(jí)交換則在超級(jí)終端上只顯示“run task2 "。這說明ucos的強(qiáng)實(shí)時(shí)性得到了驗(yàn)證,因?yàn)樵谌魏螘r(shí)候只要高優(yōu)先級(jí)的任務(wù)都可以打斷正在執(zhí)行的低優(yōu)先級(jí)任務(wù),反之低優(yōu)先級(jí)任務(wù)卻不可打斷正在執(zhí)行的高優(yōu)先級(jí)的任務(wù)。七、實(shí)驗(yàn)心得該實(shí)驗(yàn)使我了解了 uCOS-II內(nèi)核的主

15、要結(jié)構(gòu),對(duì)所學(xué)知識(shí)有了加深刻的理解和認(rèn)識(shí), 基本掌握了將uCOS-II內(nèi)核移植到ARM920TM理器上的方法,能夠正確完成基本操作得 出正確結(jié)果。大連理工大學(xué)實(shí)驗(yàn)預(yù)習(xí)報(bào)告學(xué)院(系): 電信 專業(yè): 自動(dòng)化 班級(jí):0804姓 名:何韜 學(xué)號(hào):組:實(shí)驗(yàn)時(shí)間:2011-11-12 實(shí)驗(yàn)室:d108 實(shí)驗(yàn)臺(tái):指導(dǎo)教師簽字: 成績(jī):實(shí)驗(yàn)二ARM勺串行口實(shí)驗(yàn)一、實(shí)驗(yàn)?zāi)康暮鸵? .掌握ARM的串行口工作原理。2 .學(xué)習(xí)編程實(shí)現(xiàn) ARM的UART通訊。3 .掌握CPU利用串口通訊的方法。二、實(shí)驗(yàn)原理和內(nèi)容 實(shí)驗(yàn)原理:1 .硬件電路圖核心板電路接口 硬件電路圖一MAX3232: 接口連線:2 .異步串行I/O

16、異步串行方式是將傳輸數(shù)據(jù)的每個(gè)字符一位接一位(例如先低位、后高位)地傳送。數(shù)據(jù)的各不同位可以分時(shí)使用同一傳車版!道,因此串行I/O可以減少信號(hào)連線,最少用一對(duì)線即可進(jìn)行。接收方對(duì)于同一根線上一連串的數(shù)字信號(hào),首先要分割成位,再按位組成字符。為了恢復(fù)發(fā)送的信息,雙方 必須協(xié)調(diào)工作。在微型計(jì)算機(jī)中大量使用異步串行I/O方式,雙方使用各自的時(shí)鐘信號(hào),而且允許時(shí)鐘頻率有一定誤差,因此實(shí)現(xiàn)較容易。但是由于每個(gè)字符都要獨(dú)立確定起始和結(jié)束(即每個(gè)字符都要重新同步),字符和字符間還可能有長(zhǎng)度不定的空閑時(shí)間,因此效率較低。圖2-1串行通信字符格式圖2-1給出異步串行通信中一個(gè)字符的傳送格式。開始前,線路處于空閑

17、狀態(tài),送出連續(xù)1”。傳送開始時(shí)首先發(fā)一個(gè)()”作為起始位,然后出現(xiàn)在通信線上的是字符的二進(jìn)制編碼數(shù)據(jù)。每個(gè)字符的數(shù)據(jù)位長(zhǎng)可以約定為 5位、6位、7位或8位,一般采用ASCII編碼。后面是奇偶校驗(yàn)位,根據(jù) 約定,用奇偶校驗(yàn)位將所傳字符中為1”的位數(shù)湊成奇數(shù)個(gè)或偶數(shù)個(gè)。也可以約定不要奇偶校驗(yàn),這樣就取消奇偶校驗(yàn)位。最后是表示停止位的1”信號(hào),這個(gè)停止位可以約定持續(xù)1位、1.5位或2位的時(shí)間寬度。至此一個(gè)字符傳送完畢,線路又進(jìn)入空閑,持續(xù)為 1”。經(jīng)過一段隨機(jī)的時(shí)間后,下一 個(gè)字符開始傳送才又發(fā)出起始位。每一個(gè)數(shù)據(jù)位的寬度等于傳送波特率的倒數(shù)。微機(jī)異步串行通信中,常用的波特率為50,95, 110,

18、 150, 300, 600, 1200, 2400, 4800, 9600, 119200 等。 接收方按約定的格式接收數(shù)據(jù), 并進(jìn)行檢查,可以查出以下三種錯(cuò)誤:1 )奇偶錯(cuò):在約定奇偶檢查的情況下,接收到的字符奇偶狀態(tài)和約定不符。2)幀格式錯(cuò):一個(gè)字符從起始位到停止位的總位數(shù)不對(duì)。3)溢出錯(cuò):若先接收的字符尚未被微機(jī)讀取,后面的字符又傳送過來(lái),則產(chǎn)生溢出錯(cuò)。每一種錯(cuò)誤都會(huì)給出相應(yīng)的出錯(cuò)信息,提示用戶處理。3. ARM自帶的用行口寄存器ARM自帶兩個(gè)串行口,各帶有16字節(jié)的FIFO (先入先出寄存器),最大波特率115.2K。每個(gè)UART 有7種狀態(tài):溢出錯(cuò)誤、校驗(yàn)錯(cuò)誤、幀錯(cuò)誤、暫停態(tài)、接收

19、緩沖區(qū)準(zhǔn)備好、發(fā)送緩沖區(qū)空、發(fā)送移位 緩沖器空,這些狀態(tài)可以由相應(yīng)的 UTRSTATn/UERSTAT表示,并且與發(fā)送接收緩沖區(qū)相對(duì)應(yīng)的有錯(cuò)誤 緩沖區(qū)。波特率的可以通過控制波特率寄存器( UBRDIVn)控制。 與UART有關(guān)的寄存器主要有以下幾個(gè): (1)UART線性控制寄存器 ULCONn該寄存器的第6位決定是否使用紅外摸式,位53決定校驗(yàn)方式,位2決定停止位長(zhǎng)度,位1和0決定每幀的數(shù)據(jù)位數(shù)。參考:普通模式,無(wú)奇偶校驗(yàn),1位停止位,8為數(shù)據(jù)長(zhǎng)度。(2) UART控制寄存器UCONn該寄存器決定 UART的各種摸式。UART FIFO®制寄存器UFCONn UART MODE瞳制寄

20、存器,分別決定UARTFIFO和MODEM勺模式。其中UFCONnW第0位決定是否啟用 FIFO, UMCONn勺第0位是請(qǐng)求發(fā)送位,對(duì)我們來(lái)說是比較重要的。參考:Tx電平觸發(fā),Rxfe沿觸發(fā),禁止接收超時(shí)中斷,允許接收錯(cuò)誤中斷,發(fā)送和接受模式均為01。(3)讀寫狀態(tài)寄存器UTRSTAT以及錯(cuò)誤態(tài)寄存 UERSTAT可以反映芯片目前的讀寫狀態(tài)以及錯(cuò)誤 類型。FIFO狀態(tài)寄存器UFSTAT和MODE毗態(tài)寄存器UMSTAT通過前者可以讀出目前 FIFO是否滿以 及其中的字節(jié)數(shù);通過后者可以讀出目前MODEMJCTS狀態(tài)。(4)發(fā)送寄存器UTXH和接收寄存器URXH這兩個(gè)寄存器存放著發(fā)送和接收的數(shù)據(jù)

21、,當(dāng)然只有一個(gè) 字節(jié)8位數(shù)據(jù)。需要注意的是在發(fā)生溢出錯(cuò)誤的時(shí)候,接收的數(shù)據(jù)必須要被讀出來(lái),否則會(huì)引發(fā)下次 溢出錯(cuò)誤。(5)最后是波特率引子寄存器 UBRDIV該寄存器為十六位,算法參見上頁(yè)的部分。計(jì)算公式如下:UBRDIVn = (round_off)(MCLK/(bps x 16) )-1其中MCLK是系統(tǒng)頻率,例如在 40MHz的情況下,當(dāng)波特率取115200時(shí),X 16)+0.5 ) -1=(int)(21.7+0.5)-1 =22 -1 = 21注意:由于ARM工作時(shí)存在小端和大端兩種工作模式,所以同樣一個(gè)寄存器在不同模式時(shí)地址也不 一樣,需要加以區(qū)別。實(shí)驗(yàn)內(nèi)容:學(xué)習(xí)串行通訊原理,了解

22、串行通訊控制器,閱讀ARM芯片文檔,掌握ARM的UART相關(guān)寄存器的功能,熟悉ARM系統(tǒng)硬件的UART相關(guān)接口。編程實(shí)現(xiàn) ARM和計(jì)算機(jī)實(shí)現(xiàn)串行通訊:ARM監(jiān)視串行口,將接收到的字符再發(fā)送給串口(計(jì)算機(jī)與開發(fā)平臺(tái)是通過超級(jí)終端通訊的), 即按PC鍵盤通過超級(jí)終端發(fā)送數(shù)據(jù),開發(fā)平臺(tái)將接收到的數(shù)據(jù)再返送給PC在超級(jí)終端上顯示。 三、實(shí)驗(yàn)步驟1 .新建工程,將“ Exp2 ARM串口實(shí)驗(yàn)”中的文件添加到工程中,這些是啟動(dòng)時(shí)所需要的文件。2 .定義與UART有關(guān)的各個(gè)寄存器地址和一些特殊的位命令。主要有以下各寄存器(44b.h ):/* UART的全部功能寄存器*/#define rULCON0 (*

23、(volatile unsigned *)0x1d00000)#define rULCONI (*(volatile unsigned *)0x1d04000)#define rUCONO (*(volatile unsigned *)0x1d00004)#define rUCONI (*(volatile unsigned *)0x1d04004)#define rUFCONO (*(volatile unsigned *)0x1d00008)#define rUFCONI (*(volatile unsigned *)0x1d04008)#define rUMCONO (*(volatil

24、e unsigned *)0x1d0000c)#define rUMCONI (*(volatile unsigned *)0x1d0400c)#define rUTRSTATO "volatile unsigned *)0x1d00010)#define rUTRSTAT1 "volatile unsigned *)0x1d04010)#define rUERSTAT0 "volatile unsigned *)0x1d00014)#define rUERSTAT1 "volatile unsigned *)0x1d04014)#define rUFS

25、TAT0 "volatile unsigned *)0x1d00018)#define rUFSTAT1 (*(volatile unsigned *)0x1d04018)#define rUMSTAT0 (*(volatile unsigned *)0x1d0001c)#define rUMSTAT1 (*(volatile unsigned *)0x1d0401c)#define rUBRDIV0 "volatile unsigned *)0x1d00028)#define rUBRDIV1 (*(volatile unsigned *)0x1d04028)#ifdef

26、 _BIG_ENDIAN / 大端摸式#define rUTXH0 (*(volatile unsigned char *)0x1d00023)#define rUTXH1 (*(volatile unsigned char *)0x1d04023)#define rURXH0 (*(volatile unsigned char *)0x1d00027)#define rURXH1 (*(volatile unsigned char *)0x1d04027)#define WrUTXH0(ch) (*(volatile unsigned char *)(0x1d00023)=(unsigned

27、 char)(ch)#define WrUTXH1(ch) (*(volatile unsigned char *)(0x1d04023)=(unsigned char)(ch)#define RdURXH0() (*(volatile unsigned char *)(0x1d00027)#define RdURXH1() (*(volatile unsigned char *)(0x1d04027)#define UTXH0 (0x1d00020+3) byte_access address by BDMA#define UTXH1 (0x1d04020+3)#define URXH0 (

28、0x1d00024+3)#define URXH1 (0x1d04024+3)#else / 小端摸式#define rUTXH0 (*(volatile unsigned char *)0x1d00020)#define rUTXH1 (*(volatile unsigned char *)0x1d04020)#define rURXH0 (*(volatile unsigned char *)0x1d00024)#define rURXH1 (*(volatile unsigned char *)0x1d04024)#define WrUTXH0(ch) (*(volatileunsign

29、ed char *)0x1d00020)=(unsigned char)(ch)#define WrUTXH1(ch) (*(volatileunsigned char *)0x1d04020)=(unsigned char)(ch)#define RdURXH0() (*(volatile unsigned char *)0x1d00024)#define RdURXH1() (*(volatile unsigned char *)0x1d04024)#define UTXH0 (0x1d00020) byte_access address by BDMA#define UTXH1 (0x1

30、d04020)#define URXH0 (0x1d00024)#define URXH1 (0x1d04024)#endif3 .編寫串口驅(qū)動(dòng)函數(shù)(MyUart.c):圖2-4為串口初始化的實(shí)現(xiàn)流程。圖2-4用口初始化4 .在主函數(shù)中實(shí)現(xiàn)將從用口 0接收到的數(shù)據(jù)發(fā)送到串口 0 (Main.c):圖2-7為主函數(shù) 流程圖。大連理工大學(xué)實(shí)驗(yàn)預(yù)習(xí)報(bào)告學(xué)院(系): 電信 專業(yè): 自動(dòng)化 班級(jí):0804姓 名:何韜 學(xué)號(hào):組:實(shí)驗(yàn)時(shí)間:2011-11-12 實(shí)驗(yàn)室:d108 實(shí)驗(yàn)臺(tái):指導(dǎo)教師簽字: 成績(jī):實(shí)驗(yàn)九uC/OS-II在ARMf臺(tái)的移植一、實(shí)驗(yàn)?zāi)康暮鸵? . 了解uCOS-II內(nèi)核的主要結(jié)構(gòu)

31、。2 .掌握將uCOS-II內(nèi)核移植到ARM920TM理器上的基本方法。二、實(shí)驗(yàn)原理和內(nèi)容實(shí)驗(yàn)原理:所謂移植,指的是一個(gè)操作系統(tǒng)可以在某個(gè)微處理器或者微控制器上運(yùn)行。雖然 uCOS-II的大部分源代碼是用C語(yǔ)言寫成的,仍需要用C語(yǔ)言和匯編語(yǔ)言完成一些與處理器相關(guān)的代碼。比如:uCOS-II在讀寫處理器、寄存器時(shí)只能通過匯編語(yǔ)言來(lái)實(shí)現(xiàn)。因?yàn)閡COS-II在設(shè)計(jì)的時(shí)候就已經(jīng)充分考慮了可移植性,所以,uCOS-II的移植還是比較容易的。要使uCOS-II可以正常工作,處理器必須滿足以下要求:1 .處理器的C編譯器能產(chǎn)生可重入代碼??芍厝氲拇a指的是一段代碼(如一個(gè)函數(shù))可以被多個(gè)任務(wù)同時(shí)調(diào)用,而不必

32、擔(dān)心會(huì)破壞數(shù)據(jù)。也就是說,可重入型函數(shù)在任何時(shí)候都可以被中斷執(zhí)行,過一段時(shí)間以后又可以繼續(xù)運(yùn)行,而不會(huì)因?yàn)樵诤瘮?shù)中斷的時(shí)候被其他的任務(wù)重新調(diào)用,影響函數(shù)中的數(shù)據(jù)。下面的兩個(gè)例子可以比較可重入型函數(shù)和非可重入型函數(shù):程序1:可重入型函數(shù)void swap(int *x, int *y)int temp;temp=*x;*x=*y;*y=temp;程序2:非可重入型函數(shù)int temp;void swap(int *x, int *y)temp=*x;*x=*y;*y=temp;程序1中使用的是局部變量temp作為變量。通常的C編譯器,把局部變量分配在棧中。所以,多次調(diào)用同一個(gè)函數(shù),可以保證每次的

33、temp互不受影響。而程序2中temp定義的是全局變量,多次調(diào)用函數(shù)的時(shí)候,必然受到影響。代碼的可重入性是保證完成多任務(wù)的基礎(chǔ), 除了在C程序中使用局部變量以 外,還需要C編譯器的支持。筆者使用的是ARMADS的集成開發(fā)環(huán)境,均可以生成可重 入的代碼。2 .在程序中可以打開或者關(guān)閉中斷。在uCOS-II 中,可以通過 OS_ENTER_CRITICAL()者OS_EXIT_CRITICAL(宏 來(lái)控制系統(tǒng)關(guān)閉或者打開中斷。這需要處理器的支持,在ARM920T勺處理器上,可以設(shè) 置相應(yīng)的寄存器來(lái)關(guān)閉或者打開系統(tǒng)的所有中斷。3 .處理器支持中斷,并且能產(chǎn)生定時(shí)中斷(通常在10Hz1000Hz之間)

34、。uCOS-II是通過處理器產(chǎn)生的定時(shí)器的中斷來(lái)實(shí)現(xiàn)多任務(wù)之間的調(diào)度的。在ARM920T勺處理器上可以產(chǎn)生定時(shí)器中斷。4 .處理器支持能夠容納一定量數(shù)據(jù)的硬件堆棧。5 .處理器有將堆棧指針和其它CPU寄存器存儲(chǔ)和讀出到堆棧(或者內(nèi)存)的指令。uCOS-II進(jìn)行任務(wù)調(diào)度的時(shí)候,會(huì)把當(dāng)前任務(wù)的CPU寄存器存放到此任務(wù)的 堆棧中,然后,再?gòu)牧硪粋€(gè)任務(wù)的堆棧中恢復(fù)原來(lái)的工作寄存器,繼續(xù)運(yùn)行另一個(gè)任務(wù)。所以,寄存器的入棧和出棧是uCOS-II多任務(wù)調(diào)度的基礎(chǔ)。圖4-1說明了 uC/OS的結(jié)構(gòu)以及它與硬件的關(guān)系。ARM920說理器完全滿足上述要求。接下來(lái)將介紹如何把 uCOS-II移植到Samsung 公

35、司的一款A(yù)RM920T-嵌入式處理器 S3c2410X上。實(shí)驗(yàn)內(nèi)容:1 .將uC/OS-II內(nèi)核移植到ARM暇處理器 上。2 .創(chuàng)建兩個(gè)任務(wù)task1、task2 ,分別向串口輸出數(shù)據(jù),在超級(jí)終端上顯示當(dāng)前正在運(yùn)行那個(gè)任務(wù)。三、實(shí)驗(yàn)步驟1 .將uCOS-II內(nèi)核移植到ARM7微處理器上。2 .編寫兩個(gè)簡(jiǎn)單任務(wù),在超級(jí)終端上觀察兩個(gè)任務(wù)的切換來(lái)測(cè)試一下移植 是否成功。為了使uCOS-II可以正常運(yùn)行,除了上述必須的移植工作外,硬件初始化和 配置文件也是必須的。STARTUPS錄下的文件還包括中斷處理,時(shí)鐘,串口 通信等基本功能函數(shù)。在文件main.c中給出了應(yīng)用程序的基本框架,包括初始化和多任務(wù)的創(chuàng)建,啟動(dòng)等。任務(wù)創(chuàng)建方法如下:1)在程序開頭定義任務(wù)堆棧,任務(wù)函數(shù)聲明和任務(wù)優(yōu)先級(jí):OS_STK TaskName_StackSTACKSIZE尸0, ; 任務(wù)堆棧voi

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論