版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、ucosii实验报告实验1任务的创建、删除、挂起、恢复实验学时: 实验地点: 二综x2 实验日期: 01/12/13 一、实验目的实验环境的建立2.任务的接口函数的应用二、实验内容设计一个只有一个任务ask1,当程序运行后任务的工作就是每秒在显示器上显示一个字符“m”。2.在任务tsk1中在创建一个任务ts2 。当程序运行后,任务tsk的工作在显示器上显示一个字符“m”;task则是在显示器上显示字符 “”。. 要求任务k2运行20次后,挂起任务tsk1;任务task2运行40次后,恢复任务tak1。4. 当任务task1运行5次时,用函数osschedloc()对调度器进行加锁;而当任务as
2、k1运行到第1次时,再用函数schdunlk()对调度器进行解锁,并运行该程序。 5. 使任务tk1能删除任务ask。 三、实验方法包括实验方法、原理、技术、方案等。四、实验步骤1.将c45文件夹拷贝到分区根目录下。2.将softare文件夹拷贝到任意分区根目录下。3 分别完成实验1、3、4、5五、实验结果1. dos窗口每秒显示一个字符“”。每行显示10个“m”字符,行与行的间隔是一行。按ec键程序退出 dos窗口交替显示字符和“y”,每隔一秒显示一次。每行显示10个字符,行与行之间的间隔是一行。按esc键程序退出3. do窗口开始交替显示字符和“y”,显示0次以后,tsk1挂起,只显示“”
3、,当ak2运行40次以后,tas恢复,然后开始task1,ak2交替运行。4. dos窗口开始交题显示字符m和“y”,显示5次以后,sk1将任务调度器上锁,此时只有“m”打印,当task运行1次后,tsk1,task2开始交替运行。5. dos窗口开始交替显示字符“m”和“y”,显示1次后,只显示“y”六、实验结论对实验数据和结果进行分析描述,给出实验取得的成果和结论。1.程序:*exercse * ahor: csu chenn* ti: 03 -1-12*/#inlude incldes.h#define tas_stk_ize256 os_st mtastktsk_stk_sze; in
4、6 ky;in8u x = 0, y ;vod myask(oid *dat)#ifos_citicalmthd = 3o_cpur cpu_sr;#edifpata= pdata;os_nr_critc();pc_ectet(08, osckisr);csttkrat(os_ics_per_ec);os_exit_rtial();sttni();for(;)f( 10)x =;y = y + ;c_dispchr(x, y,*(ca*)pdaa,,dispbn_black+ is_fndwhite);x= x ;if(pcetey(&ey) = 1)if(key = 0x1b)pc_dosr
5、etun();osmedlhms(,1,);vd man(void)har* ch = m;osnit();pc_dossaeretrn();pcectset(uco, ostxs);pc_disclscr(isp_gn_ie disp_bgd_blck);otakceate(mytask,ch, &mytaskskaskstsze-1, );sstr();程序源代码:/* eercise 2 -*uor: cs cnan* time: 201- 2 - 13*#iclue ncludes.h#fine my_tas1_tksize 26 #dfie y_task2stkse 256os_tk
6、 mytask1stkmy_task1_stkize;os_sk mtask2kysk2st_size;int6 key;int8u x = ,y ;void ytas2(void data)#f s_citial_mehod = os_cu_sr cu_sr;#endifpdata = pdata;os_ter_critcal();pc_vets(x, ostick);pc_seickate(_tkspersec);os_exi_rtical();fo(;;)i(x 0)x 0;y + ;pc_dispchr(x, y, *(cha*)data,isgnblack + p_n_whe);x
7、= x + ;(pc_ekey(&key) =1)i(key = 0x1b)pc_dosrrn();ostmelysm(0,0,1,0);i mytas1(vod *pdata)#ifs_citical_metho = 3os_cpu_r cpu_sr;endifchr*ch = y;pdat daa;oseer_crial();p_vctst(0x, osticksr);pcsettirate(o_ticks_per_sec);osexcrtia();ostatinit();stskcreate(myask2, &tstkmy_s2_stksize - , 1);for(;)if(x 10)
8、x = ; = y + 2;c_dispca(x,y, *(char)data, ip_bgdblack + sp_fgnd_wite);x = x+ 1;if(c_tey(&ke) 1)if(k = 0x1b)pc_doreurn();osiedlyhms(0,0,1,0);vidmi(oid)car *ch = m;osint();c_dosvretr();pc_vetst(uos,oscxsw);pc_dispclcr(dispg_whte + dipbgnd_black);stakcrate(ytas1, ch, &mytaskstkm_as1_size1, 0);osstart();
9、3.程序:/* xercie 2 3*author: cs ena* me:2013- 12 - 3*/#iclude ncldeshefine myta1_skize 256 ine my_ak_stk_size 256os_k mytask1stmytas1_tk_sze;sstk mytak2stkmy_task2sk_size;int1s key;int8u 0,y = ;int6u cnt = ;od mytak2(od *pdata)if oscticleth = 3s_cpur cpusr;#ndifpdaa= data;for(;;) ct += 1;if(nt= 20) os
10、ssuspend(0);if(cnt = 4) ostskee();f(x 10)x =;y = + 2;_dpchar(x,y,*(har*)dat,dspbd_la+ip_fgnd_white);x = +1;if(pc_gtky(&k) = 1)if(k=x1b)pcdsretr();ostimedlmsm(0,,);void mtk(voiddata) chr * ch2= y;#if os_itialmethod 3o_cu_srcpu_sr;eifata= pdata;os_etr_critical();pcctt(0x08, sticksr);pc_setickrate(os_t
11、ickper_sec);osext_critcal();ssttinit();osaskcreae(yask, ch2,myas2st_as2_tk_iz-1, 1);for(;;)i(x 10) = ; = y + 2;_dispch(x, y, *(char*)pdat, dp_bgnd_blk +isp_fgn_white);x = + 1;if(pc_gtey(&ey)=)if(ke = 0x1b)pc_osretur();ct +;ostmedlhmm(0,0,,0);oi ain(i)h * ch =m;osnit();pc_dosavrturn();c_ectst(uos, os
12、tsw);p_isplrsr(disp_fgnd_ite + dsp_d_black);stakcreat(mk1, ch, mtask1stkmy_tas1_tk_siz-1, 0);start();4.程序:/* xrce 2 -3*utho: csu chena* time: 2013 1 - 13*/#nlde inldes.h#efine my_ts1_stk_si 256 #deie my_task_stk_ze2os_t myts1tyask1_stk_ie;s_s ytskstyak_sk_siz;nt6s ke;it x =0, = 0;int16u cnt 0;od myt
13、ask2(od *pdata)if s_ritical_metd 3o_cu_srcpusr;#endifpdata = data;fo(;)f(x 10)x =0;= y+2;c_dispchr(x, y, (chr*)data,disp_bgnd_black +dis_fndhite);x= x 1;if(pc_getkey(y) =1)if(ke 01b)pc_osreturn();osmedhmsm(,1,0);vias1(void *pd) char * ch =y;#i os_cicl_thd = 3sc_cpu_;enifpdaa = pa;os_ente_crticl();pc
14、_vetst(0x0, ostickis);_ttickate(os_ticks_per_sec);os_xit_critical();statnit();osakcee(mytask2, h2, mytask2stm_tak2_st_siz-, 1);r(;) ct = cnt+ ; i(cnt= 5) osscedlock(); ele f(cn=10) sschdunlok(); if(x 1) = 0;y = y ;c_dispchar(x, y, *(cha*)pta,isp_bgnd_blck dispfgndwit);x = + 1;if(pc_geke(key) = 1)i(k
15、y = 0x1b)pc_dsretrn();stieyhmm(0,0,1,);void min(void)char * h =;sit();cdosaveturn();pc_vtse(ucos, osctxsw);pc_dspclrc(isp_fgnd_white disp_bnd_back);ostaskcrae(mytask, ch, &mytaskstkytask1_tk_sze, 0);stat();5.程序代码如下:/* exerise 2 3 author: csu chnn*time: 2013 2 -13*/#icude inludes.h#de _ask1st_se 56 #
16、efinmytasstk_iz 256s_tk mtasstkmy_tsk_stz;os_tkmytas2sty_ts_stk_sie;nt1s ke;nt8 x 0, y 0;nt6 ct=;void mytak(vd*pa)ifocritica_mtod = 3os_cpusr cpusr;#eifpdat= data;for(;) f(osaskeeq(opri_slf) = os_akdel_re) stakdel(s_po_elf); bre; i(x 10) = 0; =y +;pc_ispchar(x, y, *(har*)pata,disbgnblack + isp_fgnd_
17、whte); = x+;f(pc_gtky(&k) = )if(ky= 0x1b)pc_dortur();otmedlyms(,0,1,0);vod yas(void *pdta) har *ch2 ;if s_rtcal_metho= 3oscu_s cpu_s;#edifpdat =pdat;oseer_ril();pc_vcet(0, otckisr);pc_setticate(os_ckspers);os_et_crial();sstinit();saskcreate(mytsk, h2, &mytk2stmy_tas2_stsiz-1, );fr(;;) cnt = cnt + ;
18、if(cn =10) wile(ostaskeeq(0) ! os_task_noteit) ostedy(1); if(x 0) = 0;y= 2;pdschar(x,y, (char*)pdata, dis_gd_back+ dsp_fndhite);x = +1;i(pc_getky(&key) 1)f(key=0x1b)pc_dsreturn();ostimlhmm(0,0,1,0);vodman(vod)ar* h m;osnit();p_dosaeur();pc_vectset(cs,ostsw);pcicrscr(i_fgn_hit + dspgd_lack);sskre(mys
19、k1, , &mytsk1stkmy_tas_sk_sie-1,0);ostart();注:有程序的要求附上程序源代码,有图表的要有截图并有相应的文字说明和分析七、实验小结给出本次实验的体会,如学会了什么,遇到哪些问题,如何解决这些问题,存在哪些有待改进的地方。实验2时钟节拍及时间管理函数实验学时: 2 实验地点: 综合实验楼x21 实验日期: 20132/1 一、实验目的1实验环境的建立2多任务环境下中断机制及时间ai的应用二、实验内容1在os_pu_c.文件中按如下代码定义函数osimetikhook(),然后运行并查看运行结果。实现显示系统在每发生500次时钟中断期间,调度器进行任务调度
20、的次数。.设计一个有3个任务的应用程序。这3个任务分别是:mytask、youtask、和intetak。其中任务interask是在时钟节拍中断服务程序中用钩子函数otimtihook()中断了0000次时使用一个信号变量interkey激活的。运行并分析由中断服务程序激活任务的工作特点。3. 设计一个应用,在任务myask中调用函数osimedysue()取消任务youtk的延时。为了观察任务uask的延时时间的变化,在钩子函数ometkhook()输出了任务youask在延时时间到时的时钟节拍数。 4. 设计一个应用程序,在任务中调用ostt()函数获得并显示系统的时钟节拍数ostime
21、。当任务运行10s时,调用函数ostimese()将osime的值设为1。5 在kl模拟开发环境下,将顺序执行的程序改为多任务运行,并跟踪程序或设置断点观察多任务系统执行流程。三、实验方法包括实验方法、原理、技术、方案等。四、实验步骤1将bc5文件夹拷贝到c分区根目录下。2.将soar文件夹拷贝到任意分区根目录下。3.安装kei2集成开发环境。4.分别完成实验1、3、5五、实验结果记录实验输出数据和结果。.3.5.六、实验结论对实验数据和结果进行分析描述,给出实验取得的成果和结论。1.s_cpc.c#ifs_pu_oks 0 itu d;nt1u 1=0;vd stimeticook (oid
22、) hr* s0 = 500; cha* s=per; chr* s2 = imesinterrupattepr tims; cha 8; i( = 500) pc_disptr(,4,s1,disgndblakdis_gnd_we);pcdispstr(18,4,s0,dip_bgn_bck+disp_fgnd_hte);pcdipst(22,4,s2,disp_nd_blacdsp_fgdwhite);rntf(s,%d,osctxsctr);pc_dstr(1,d1+5,s,isp_bgnd_black+dis_fwhte); = 0;1+=1; =1;#endi#ncud inclde
23、s.defie tk_sk_sie 512 o_sk ytakstktask_st_sie; int1s k;it8u x=,y=0;vd tsk(voi *d); v n(vod) har* s_m=m; oii(); / nitializ uc/s-ii / p_dsaveeturn(); /* sav envonmet to retuntoos */ pc_vecet(uc, osctxsw); /*instal c/siis ontet switch ector *pc_disclrcr(di_fgn_wite +dsp_bd_back); stakcreate(mytak,sm,&y
24、askstktakt_si-1, 0); osstart(); /* sartmutitsin */void mytak(void ata)#if oscrital_etd = 3 /* allocte soragfr pu sttus regiter */ os_p_r cpsr;#edif dat= pdaa; * pevecompiler wanig */ os_enter_ctcal(); pc_vcts(0x, icksr); pcsettickrae(s_tc_per_sec); os_exicritical(); osstatinit(); for(;;) i(x0) x0; +
25、=2; pc_iscar(,y,*(ha*)pata,dibgnd_blak+dsp_fgnd_hite); x+=1; if(p_etkey(&key)=) f( =0x1b) pcosreu(); timdlyhm(0,0,1,0); .程序:os_opuc.c#if os_pu_hoks_en0 ternbooeainterkey;it6 intectr = 0;void ostmtickhook (voi) f(interctr=1000) intere =1; intercr+;#endifet.c#nud iclude.hdeie ak_stk_sze 512/任务堆栈长度osst
26、k mytasttask_s_ize;/定义任务堆栈区os_st youtasstktas_tk_sze;/定义任务堆栈区s_st intertsksttak_st_siz;/定义任务堆栈区int16s ey;/用于退出ucs_i的键nt8u x=0,y=0;/字符显示位置olean intrkeyfale;voi mytsk(void *at);/声明任务voi ouask(void *dta);/声明任务voidintertak(vod*da);/声明任务i ai(void) chr* s_mm;/定义要显示的字符 osnit( );/初始化cos_ii cdossveer();/保存do
27、环境 p_vecte(cos,octx);/安装cosi中断 pc_ispsc(isgnd_whtdisp_bgdblack); taskcate(mtask,/创建任务myasks_m,/给任务传递参数&ytkstktask_sk_i- ,/设置任务堆栈栈顶指针任务的优先级别为0); sta( );/启动多任务管理vid ytsk (i *pdaa) char* s_=;/定义要显示的字符char* s_h=h;# _riticlmeo= 3 os_u_sr cpu_sr;nd pdata = pdata; os_ente_ctial( ); pcvcst(0x08, otickisr);/
28、安装时钟中断向量 pcsetckrate(os_ticks_per_sec);/设置时钟频率 sexitcitcal( ); ostatnit( );/初始化统计任务 ostaskcate(yoask,/创建任务ytas_,/给任务传递参数&youtaskstkatk_size - 1,/设置任务堆栈栈顶指针1/ myask的优先级别为1);ostascreat(intertak,/创建任务mytasks_,/给任务传递参数intertassttask_sk_ize 1,/设置任务堆栈栈顶指针/ mytak的优先级别为2); or(;;) if(x0) x0; y+=; p_dispchar(
29、x, ,/字符的显示位置*(cr*)pta, dipbgn_blak+sfgd_hte); x = 1; /如果按下esc键则退出ucosiiif (pc_gtey(&k) = tru) f (ke = x1b) dosrtrn( );/恢复dos环境 otmedlmsm(0,0, 3,0);/等待3秒vod outak (id *pdaa)#i oscritial_method = 3 o_pu_sr cpu_sr;#ndif data =pdata; for (;) i(x50) =; y+=; pc_iscar(x, y,/字符的显示位置(cha*)pdt,disp_gnd_lack+d
30、isp_fgnd_wite); x += 1; ostimelyh(, 0,1, 0);/等待1秒 cha*srunning a as r iru de: intertask;voi tertask (voi *pdt)#if oscritialmethod= 3 os_pu_sr usr;#enif pdat paa; or (;) if(inerkey)if (x5) x=0; +=2; pcdischa(x, ,/字符的显示位置*(ha*)pdata, isp_gd_black+disp_fnd_wite );c_dispstr(5,6,,dipgnd_blacksfgndwte); +
31、1;itre=false;/osintntg; ostimdlymsm(0, 0, 1, );/等待秒 3程序:#if os_hok_en 0 int8d0;int8u l=0;in16utt=1;chars;vod otmetchook (vd) f(stcbpritl2-ostcbdly = 1)sprin(s,%d,tt);_dispstr(d,l+4,disp_bgn_lackdis_fgnwt);d=6; t+=1;#niftst.c#inclue ldes.deine ask_st_sie 512/任务堆栈长度stk mytasksttskstksize;/定义任务堆栈区os_st
32、k skstktaskstk_size;/定义任务堆栈区nt6 key;/用于退出co_ii的键int8x,y0;/字符显示位置vod yt(void dat);/声明任务void youts(void *dt);/声明任务vi main (voi) chr* s_m=;/定义要显示的字符 osit();/初始化cs_i pcdossvereturn();/保存o环境 pcvecset(os, osctxsw);/安装ucos_i中断 cisplrsr(dis_fgnd_white + p_gndblck); ossceat(ys,/创建任务mytsks_m,/给任务传递参数&maskskta
33、s_siz - 1,/设置任务堆栈栈顶指针0);/使任务tas的优先级别为0 osstart();/启动ucsi的多任务管理vd mytask (void*pat) char* s_y=y;/定义要显示的字符#if os_critcl_etod = 3 oscu_sr pu_sr;endif pda paa; os_entr_ritica(); pc_ece(x0, ostikisr);/安装ucos_ii时钟中断向量 pcsttickrate(o_tis_er_sec);/设置uo_i时钟频率 s_it_ctical(); ossaiit();/初始化c_i的统计任务 ostakcreae(
34、youask,/创建任务mytks_y,/给任务传递参数&youtaskstktask_tksiz - 1,/设置任务堆栈栈顶指针2);/使任务ytak的优先级别为2 for (;) if (x50) x=0; y+=2; if(y) sielysu(2); /取消youtak任务的延时 pc_diphar(x, y,/显示字符的位置*(char*)pata, ds_bgndlack+dispfnd_whit ); x+; if (pc_gtkey(&key) = tre) f (y = 0x1) pc_dosreurn(); stiml(30);/延时0个时钟节拍 void yutak (o
35、iddta)#ifos_crital_metod 3 s_cusrpu_s;#dif data=pdata; fr (;) if (x50) x=0; =2; pcdischar(,y,/显示字符的位置*(char*)pata, disp_nd_bakdsp_fgnd_whie ); x+= ; otimey(500);/延时00个时钟节拍 .#incldeiludeh#efie skstsze 512/任务堆栈长度sstk taskstartstkask_st_size;/定义任务堆栈区nts ke;it2u sie;/用于退出osii的键intu x=;vid ys(voi *aa);/声
36、明一个任务void ain (void) init();/初始化c_ii pc_dossveretrn();/保存dos环境 pc_vectet(ucos,txsw);/安装ucs_i中断 pc_dispclrscr(dis_gd_whie+dpbgn_lack); osascea(myask,/创建任务mytas(void*),/给任务传递参数asstrtsttas_stk_size - 1,/设置任务堆栈栈顶指针0);/使任务mtask的优先级别为0 ossta();/启动ucos_i的多任务管理oi mytask(vod*at)char5;#ios_critial_ethd= 3 s_cpu_s pu_r;eif pdaa = pdta; osnter_crical(); pc_vctset(x
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 中学学生社团活动成果展示制度
- 2025年中职数据处理(数据统计分析)试题及答案
- 高一地理(查漏补缺)2025-2026年上学期期中测试卷
- 2025年大学本科(会计学)税务筹划应用阶段测试题及答案
- 2025年中职化学(无机化学基础)试题及答案
- 2025年高职空中乘务(客舱服务规范)试题及答案
- 2025年大学第二学年(口腔医学)口腔内科学基础阶段测试试题及答案
- 2025年高职医疗器械维护与管理(设备检修)试题及答案
- 2025年大学(经济学)国际贸易学期末测试题及答案
- 2025年大学二年级(地质工程)地质灾害防治综合测试题及答案
- DB35T 2136-2023 茶树病害测报与绿色防控技术规程
- 盖板涵盖板计算
- 运输工具服务企业备案表
- 医院药房医疗废物处置方案
- 天塔之光模拟控制PLC课程设计
- 金属眼镜架抛光等工艺【省一等奖】
- 《药品经营质量管理规范》的五个附录
- ASMEBPE介绍专题知识
- 八年级上册地理期末复习计划通用5篇
- 初中日语人教版七年级第一册单词表讲义
- GB/T 9065.5-2010液压软管接头第5部分:37°扩口端软管接头
评论
0/150
提交评论