




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、北京航空航天大學(xué) ARM9實(shí)驗(yàn)報(bào)告實(shí)驗(yàn)四 多任務(wù)綜合實(shí)驗(yàn)一、實(shí)驗(yàn)?zāi)康膶W(xué)習(xí)周期任務(wù)、任務(wù)的同步和任務(wù)間通信。二、實(shí)驗(yàn)內(nèi)容1.運(yùn)行實(shí)驗(yàn)十,刪除任務(wù)四、任務(wù)定義和OSTaskCreate(Task4),任務(wù)三for循環(huán)體內(nèi)僅保留以下兩句BSPprintf(0,“run task3n”); OSTimeDly(3000),在超級(jí)終端上觀察任務(wù)運(yùn)行情況。 2.使用系統(tǒng)定時(shí)中斷實(shí)現(xiàn)周期任務(wù),任務(wù)1 、2、3進(jìn)入for循環(huán)就掛起,在定時(shí)鉤子函數(shù)中定時(shí)1秒、2秒和4秒后將其恢復(fù)。 3.創(chuàng)建信號(hào)量管理數(shù)組實(shí)現(xiàn)任務(wù)間同步,在主函數(shù)中定義一個(gè)INT16U的兩維數(shù)組a23,不同的任務(wù)往數(shù)組內(nèi)寫不同的值,連同任務(wù)號(hào)一起
2、打印在超級(jí)終端上。 4.創(chuàng)建消息郵箱實(shí)現(xiàn)任務(wù)間通信,Task1記錄任務(wù)執(zhí)行的次數(shù),通過消息郵箱在Task2里顯示。 5.附加題 文件的使用 三、實(shí)驗(yàn)設(shè)備硬件:ARM嵌入式開發(fā)平臺(tái)、用于ARM920T的JTAG仿真器、PC機(jī)Pentium100以上。軟件:PC機(jī)操作系統(tǒng)Win2000或WinXP、ARM ADS1.2集成開發(fā)環(huán)境、仿真器驅(qū)動(dòng)程序、超級(jí)終端通訊程序。四、實(shí)驗(yàn)原理1、任務(wù)間通信的管理:事件控制塊ECB。2、同步與互斥:為了實(shí)現(xiàn)資源共享,一個(gè)操作系統(tǒng)必須提供臨界區(qū)操作的功能。C/OS采用關(guān)閉/打開中斷的方式來處理臨界區(qū)代碼,從而避免競(jìng)爭(zhēng)條件,實(shí)現(xiàn)任務(wù)間的互斥。 3、信號(hào)量:信號(hào)量在多任
3、務(wù)系統(tǒng)中的功能,實(shí)現(xiàn)對(duì)共享資源的互斥訪問(包括單個(gè)共享資源或多個(gè)相同的資源),實(shí)現(xiàn)任務(wù)之間的行為同步。4、郵箱:一個(gè)任務(wù)或ISR可以通過郵箱向另一個(gè)任務(wù)發(fā)送一個(gè)指針型的變量,該指針指向一個(gè)包含了特定“消息”(message)的數(shù)據(jù)結(jié)構(gòu);5、消息隊(duì)列:消息隊(duì)列可以使一個(gè)任務(wù)或ISR向另一個(gè)任務(wù)發(fā)送多個(gè)以指針方式定義的變量。圖4.1任務(wù)、ISR和消息郵箱的關(guān)系五、實(shí)驗(yàn)步驟1. 以實(shí)驗(yàn)十為模板。 2. 將任務(wù)函數(shù)內(nèi)的OSTimeDly()刪除,在打印語句之前懸掛任務(wù)13, OSTaskSuspend(Taskn_Prio),按以下路徑 ucos-ii->arch->os_cpu_c.c
4、找到鉤子函數(shù) void OSTimeTickHook (void),用計(jì)數(shù)器控制恢復(fù)任務(wù)操作,編寫OSTaskResume(Taskn_Prio); 3. 信號(hào)量管理 聲明信號(hào)量 OS_EVENT *Fun_Semp; 在Main函數(shù)里創(chuàng)建信號(hào)量Fun_Semp=OSSemCreate(1);在各個(gè)Task里執(zhí)行下列操作 OSSemPend(Fun_Semp,0,&err); . OSSemPost(Fun_Semp); 定義變量 INT8U err;4 . 定義事件控制塊指針OS_EVENT *Str_Box, 在main函數(shù)里創(chuàng)建消息郵箱,Str_Box=OSMboxCreate(
5、void*) 在Task1里發(fā)送消息 Times+=1; s=&Times; OSMboxPost(Str_Box,s); 在Task2里請(qǐng)求消息郵箱ss=OSMboxPend(Str_Box,0,&err);printf("%dn",*ss);5. 文件的使用 文件使用的關(guān)鍵是加載文本文件,用記事本創(chuàng)建 test.txt文件,文件的內(nèi)容不包含漢字。運(yùn)行實(shí)驗(yàn)十三,此時(shí)LCD上沒有任何顯示。 打開超級(jí)終端,按回車鍵,顯示/sys> 用mkdir創(chuàng)建ucos子目錄,在ucos下再創(chuàng)建fj子目錄,用cd進(jìn)入 /sys/ucos/fj> ,在該目錄下執(zhí)行
6、命令dl test.txt d,按回車鍵,加載test.txt 。 再運(yùn)行文件十三,在LCD上即可觀察你編寫的文本文件。 六、實(shí)驗(yàn)程序(1) 多任務(wù)源程序#include"./ucos-ii/includes.h" /* uC/OS interface */#include "./ucos-ii/add/osaddition.h"#include "./inc/drivers.h"#include "./inc/macro.h"#include "./inc/lcd320.h"#include
7、"./inc/sys/lib.h"#include "./src/gui/gui.h"#include <string.h>#include <stdio.h>OS_EVENT *MboxSem;OS_EVENT *Fun_Semp;OS_EVENT *Str_Box;/*任務(wù)定義*/#define SYS_Task_Prio1 void SYS_Task(void *Id);*/OS_STK task1_StackSTACKSIZE=0, ; /Main_Test_Task堆棧void Task1(void *Id); /Mai
8、n_Test_Task#define Task1_Prio 12OS_STK task2_StackSTACKSIZE=0, ; /test_Test_Task堆棧void Task2(void *Id); /test_Test_Task#define Task2_Prio 15OS_STK task3_StackSTACKSIZE=0, ; /test_Test_Task堆棧void Task3(void *Id); /test_Test_Task#define Task3_Prio 17extern U32 LCDBufferII2LCDHEIGHTLCDWIDTH;INT16U a23;
9、int *s,*ss,Times=0;INT8U err;/BOOLEAN ac_key=1;#define rUTRSTAT0 (*(volatile unsigned *)0x50000010)#define RdURXH0() (*(volatile unsigned char *)0x50000024)/*已經(jīng)定義的OS任務(wù)*#define SYS_Task_Prio1#define Touch_Screen_Task_Prio9#define Main_Task_Prio 12#define Key_Scan_Task_Prio 58#define Lcd_Fresh_prio 59
10、#define Led_Flash_Prio 60*/*事件定義*/ Main function. /int main(void) ARMTargetInit(); / do target (uHAL based ARM system) initialisation /OSInit(); / needed by uC/OS-II / Fun_Semp=OSSemCreate(1); Str_Box=OSMboxCreate(void*)0); OSTaskCreate(Task1, (void *)0, (OS_STK *)&task1_StackSTACKSIZE-1, Task1_
11、Prio);OSTaskCreate(Task2, (void *)0, (OS_STK *)&task2_StackSTACKSIZE-1, Task2_Prio);OSTaskCreate(Task3, (void *)0, (OS_STK *)&task3_StackSTACKSIZE-1, Task3_Prio); OSAddTask_Init(0); BSPprintf(0,"Starting uCOS-II.n");OSStart(); / start the OS / never reached /return 0;/main/void Tas
12、k1(void *Id) for(;) OSTaskSuspend(Task1_Prio); OSSemPend(Fun_Semp,0,&err); a00=1; printf("n"); Times+=1; s=&Times; OSMboxPost(Str_Box,s); BSPprintf(0,"run task1: a00 = %d n ",a00); OSSemPost(Fun_Semp); void Task2(void *Id) for(;) OSTaskSuspend(Task2_Prio); OSSemPend(Fun_S
13、emp,0,&err); ss=OSMboxPend(Str_Box,0,&err); printf("n"); a01=2; BSPprintf(0,"run task2: a01 = %d 次數(shù)為:%d nn",a01,*ss); OSSemPost(Fun_Semp); void Task3(void *Id) for(;) OSTaskSuspend(Task3_Prio); OSSemPend(Fun_Semp,0,&err); a02=3; BSPprintf(0,"run task3: a02 = %d n
14、 ",a02); printf("n"); printf("n"); OSSemPost(Fun_Semp); 【鉤子函數(shù)】void OSTimeTickHook (void) static int i=0; i+; if(i%1000=0) OSTaskResume(Task1_Prio); if(i%2000=0) OSTaskResume(Task2_Prio); if(i%4000=0) OSTaskResume(Task3_Prio); i=0; (2)文件的使用源程序#include "./ucos-ii/includes
15、.h" /* uC/OS interface */#include "./ucos-ii/add/osaddition.h"#include "./inc/drivers.h"#include "./inc/sys/lib.h"#include "./src/gui/gui.h"#include <string.h>#include <stdio.h>/*任務(wù)定義*/OS_STK Main_StackSTACKSIZE=0, ; /Main_Test_Task堆棧void Main
16、_Task(void *Id); /Main_Test_Task#define Main_Task_Prio 12OS_STK test_StackSTACKSIZE=0, ; /test_Test_Task堆棧void test_Task(void *Id); /test_Test_Task#define test_Task_Prio 15/*已經(jīng)定義的OS任務(wù)*#define SYS_Task_Prio1#define Touch_Screen_Task_Prio9#define Main_Task_Prio 12#define Key_Scan_Task_Prio 58#define L
17、cd_Fresh_prio 59#define Led_Flash_Prio 60*/*事件定義*/ Main function. /int main(void)ARMTargetInit(); / do target (uHAL based ARM system) initialisation /OSInit(); / needed by uC/OS-II /OSInitUart();initOSFile();#if USE_MINIGUI=0initOSMessage();initOSList();initOSDC();initOSCtrl();LoadFont();#endifloads
18、ystemParam();/ 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(Main_Task, (void *)0, (OS_STK *)&Main_StackSTACKSIZE-1, Main_Task_Prio);/OSTaskC
19、reate(test_Task, (void *)0, (OS_STK *)&test_StackSTACKSIZE-1, test_Task_Prio);OSAddTask_Init(1); LCD_printf("Starting uCOS-II.n");LCD_printf("Entering graph mode.n");LCD_ChangeMode(DspGraMode);OSStart(); / start the OS / never reached /return 0;/mainchar TextFilename="/s
20、ys/ucos/fj/test.txt"int readline(char* str, int n, FILE *pfile)int i;for(i=0; i<n; i+)if(fread(str, 1, 1, pfile)!=1)return 0;if(*str='n')str+;*str=0;return i;str+;return i;void Main_Task(void *Id) /Main_Test_Taskchar str256;/文件緩沖區(qū)FILE* pfile;/定義文件結(jié)構(gòu)指針ClearScreen();/清屏LCD_ChangeMode(D
21、spTxtMode);/改變顯示模式LCD_Cls();/文本模式下清屏pfile=fopen(TextFilename,"r");/打開文件if(pfile=NULL)/文件打開失敗LCD_printf("Can't Open file!n");for(;)OSTimeDly(1000);while(readline(str, sizeof(str), pfile)/以行的方式讀文件LCD_printf(str);/向lcd輸出文件內(nèi)容fclose(pfile);/關(guān)閉文件for(;)OSTimeDly(1000);七、實(shí)驗(yàn)思考題1、用鉤子函數(shù)實(shí)現(xiàn)周期任務(wù)有何特點(diǎn)?答:鉤子函數(shù)的定時(shí)周期為1ms,利用計(jì)數(shù)器,根據(jù)不同計(jì)數(shù)值,設(shè)定不同任務(wù)的定時(shí)周期,當(dāng)?shù)搅硕〞r(shí)器周期后,調(diào)用OSTaskResume(Taskn_Prio)函數(shù),恢復(fù)相應(yīng)的任務(wù)。2、用信號(hào)量是如何實(shí)現(xiàn)任務(wù)間同步的?答:創(chuàng)立一個(gè)信號(hào)量pevent=OSSemCreate(b),然后在相應(yīng)的任務(wù)里,OSSemPend(pevent,timeout,&err),取得一個(gè)信號(hào)量的使用權(quán),OSSemPend()函數(shù)掛起當(dāng)前任
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 服務(wù)合同:自費(fèi)出國(guó)留學(xué)中介服務(wù)委托合同6篇
- 2025年福建貨運(yùn)從業(yè)資格證科目一模擬考試題庫(kù)
- 2025年唐山貨運(yùn)從業(yè)資格證網(wǎng)上考試答案
- 2025年資陽貨運(yùn)員初級(jí)考試題庫(kù)
- 建筑勞務(wù)施工合同
- 勞務(wù)外包安全管理協(xié)議
- 涂料助劑:流平劑產(chǎn)業(yè)分析報(bào)告
- 廠房施工標(biāo)準(zhǔn)合同范例
- 臺(tái)面加工承攬合同范本
- 債權(quán)收益權(quán)轉(zhuǎn)讓合同范本
- 2023年山東藥品食品職業(yè)學(xué)院?jiǎn)握芯C合素質(zhì)考試筆試題庫(kù)及答案解析
- 《工程化學(xué)》全套教學(xué)課件
- 4.1比的意義 導(dǎo)學(xué)案 2022-2023學(xué)年六年級(jí)數(shù)學(xué)上冊(cè)-人教版(含答案)
- 美容手術(shù)的麻醉精品課件
- 蔬菜生產(chǎn)技術(shù)實(shí)踐教學(xué)大綱
- 施耐德APC1-20K不間斷電源內(nèi)部培訓(xùn)(ppt可編輯修改)課件
- 看圖寫話我是乖孩子
- 油管、套管等規(guī)格對(duì)照表
- IEST-RP-CC0053
- 模糊邏輯與模糊推理
- 玉米收割機(jī)的設(shè)計(jì)(機(jī)械CAD圖紙)
評(píng)論
0/150
提交評(píng)論