欢迎来到淘文阁 - 分享文档赚钱的网站! | 帮助中心 好文档才是您的得力助手!
淘文阁 - 分享文档赚钱的网站
全部分类
  • 研究报告>
  • 管理文献>
  • 标准材料>
  • 技术资料>
  • 教育专区>
  • 应用文书>
  • 生活休闲>
  • 考试试题>
  • pptx模板>
  • 工商注册>
  • 期刊短文>
  • 图片设计>
  • ImageVerifierCode 换一换

    2023年ARM实验报告新编.pdf

    • 资源ID:90863376       资源大小:2.16MB        全文页数:24页
    • 资源格式: PDF        下载积分:15金币
    快捷下载 游客一键下载
    会员登录下载
    微信登录下载
    三方登录下载: 微信开放平台登录   QQ登录  
    二维码
    微信扫一扫登录
    下载资源需要15金币
    邮箱/手机:
    温馨提示:
    快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。
    如填写123,账号就是123,密码也是123。
    支付方式: 支付宝    微信支付   
    验证码:   换一换

     
    账号:
    密码:
    验证码:   换一换
      忘记密码?
        
    友情提示
    2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
    3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
    4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
    5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。

    2023年ARM实验报告新编.pdf

    南 京 邮 电 大 学 通 达 学 院嵌入式系统B实验报告班级 1 00023专 业 通 信 工 程(嵌入式系统开发1学号 1000230 4姓名 陆海霞实验项目:1、A D S下简朴ARM汇编程序2、熟悉LIN U X开发环境3、多线程应用程序设计指 导 教 师 范 山 岗实验一 ADS下简朴ARM汇编程序实验目的:1、熟悉ADSL 2 下进行汇编语言程序设计的基本流程;2、熟悉在ADS中创建工程及编写、编译和运营汇编语言程序的方法;3、熟悉AX D中各种调试功能。实验环境:1、硬件:PC机。2、软件 ADS1.2。实验内容:1、在 A D S 中新建工程,并设立开发环境。2、在 Code Warri o r 环境中编辑、编译和链接汇编语言程序,并生成可执行文献。3、在 AXD中调试汇编程序;4、使用命令行界面编辑、编译和链接汇编程序。实验环节:本实验规定在ADS环境下,编写一个汇编程序,计算S=1+2+3+n的累加值。把累加结果S 存入到存储器的指定位置;在AXD中调试该程序,使用A R Mula t o r模拟目的机。1、新建工程。打开 Code Wa r rio r,选择 File-New(proj e c t)选项,使用 ARM E x ecutable Ima g e 模版新建一个工程。2、设立编译和链接选项。由于我们使用的是模拟机,设立汇编语言编译器的模拟解决器架构为Xsc a le;在 ARM Linke r 中,选择output选项卡并选择Lin ktyp e 为 Simpl e 类型,确认RO B a s e 为 0 x 800 0,修改 RW Base 为 0 x9000,3、为当前工程添加源程序文献。A R M 汇编程序源文献后缀名为S 大小写均可。保证添加入当前工程复选框选上。4、编辑源程序代码。参考程序a d d.s:a rm add源程序N EQU 7。;累加次数;定义名为A d d in g 的代码段oAREAAdd i ng,COD E,R E A D O NLY。ENTRYooMOV R0,#0。MOV Rl,#lREPEAT ADDRO,RO,RI6 DD R 1,R1,#1CM PR1,#NoBLERE P EATooLDR R2,=R E SULT。STR RO,R2HEREoB HER E。定义名为Data s pace的数据段AREA Dataspace,DA T A,READWRITERESULT DCD 0-END实验中程序编写如下图所示:10002304.S,.,M,国,nP,Path:D:my workarmadd Ihx.iNEQU 7;AREA Aciding,CODE,READONLYENTRYMOV R0,40MOV R lz#l|REPEATADD RO,RO,RIADDCMP R1,#NBLE REPEATLDR R2,=RESULTSTR R0zR2HEREB HEREAREA D ataspace,DATA,READURITERESULTDCD 0END5、编译汇编源代码文献。右击a d d.S 文献,选择Com p i le,假如没有成功会弹犯错误和警告窗口。生成Q 目的代码文献。实验中生成的WMM.O 文献如下图所示:搜索 文 件 夹 团,irkarmaddarmadd DataDebugRelObjectCode务 会:件夹10002304.O。文件2KB6、编译整个工程。选 择 P r o j e c t-M a k e 进行整个工程的编译。可以在目录空间查看是否生成了映像文献add.axfo7、确认调试目的设立。设立目的解决器型号。8、运营映像文献。9、调试准备在 A X D 中,打开各个观测窗口,做调试准备。选择Pro c e s s o r Vi e wsfRegisters选项,打开ARM寄存器显示窗口。调整窗口大小,使得C o rren t节点的R0 R 2寄存器可见。选 择Pr o c e s s or ViewsT M e mo r y选项,打开A RM存储器显示窗口。在Start A d d r ess输入框中输入准备查看的内存区域首地址0 x90 0 0。10、调试映像文献。打开调试窗口。为了便于调试,观测各个寄存器和存储器的变化情况。11、单步运营程序,观测并记录结果。在A X D中,选 择Execute今Step选项,或 者F 1 0键,单步运营程序,查看相关寄存器和存储器相应地址上的变化,请把每一步的结果填入下表中。运营结果如图所示:丧 Search Processor Views Sistefn Views Execute Options Window Help剧 明 闽 潮型 I I喻陶_ X lREPEATIC12RESULT XScale-D:my workarmadd 10001304sAREA D atasp ace,D A T AzREADWRITEDCD 0151 617i;Li7MOV R l,#lADD R 0.R 0.R 1ADD R 1,R 1Z#1CMPBLE REPEATLDR R 2Z=RESULTSTR RO.FRZ lEHEREScale-RegistersR eg isterValue3-Current FrOOxOOOOOOlCl-r l0 x00000008|-r20 x00009000p r30 x00000000|-r40 x00000000分析源程序可以看出,我们的程序仅对少数几个寄存器进行了读写操作。序号执行指令执行后的变化情况寄 存 器(十六进制)存储器(十六进制)R 0R 1R2PC0 x90001MOVR 0,#00 x0000000 0Ox 0 0000000Ox 0 00000 000 X 0 00 0 80040 x 90002MO VR I,#1Ox 0 00 000000 x 0 0 0 000010 X000000000 x000080080 x9 0 1 03A D D0 x000000 010 x00 0 00 x 0 0 00 x000 0800c0 X 9020RO,R0,R10001000004ADDRI,R1,#10 x 0 00000 010 X000000020 x00 0 00000Ox 0 0 008010Ox 9 0305CMPR 1 ,#N0 X00000(X)10 x 0 00000020 x000000000 X 00008 0 140 x9 0 4 06B L EREPEAT0 x00 0 000010 x00000 0020 x00 0 000000 x 00 0 0 8 008Ox 9 0507AD DRO,RO,R10 X 000 0 00030 x 00 0 00002Ox 0 00 000000 xOOOO 8 00c0 x 9 0 60注意:假如错过记录的时机可以选择Fi 1 e-Rc o a d Curre n t Im a g e 重新加载映像文献。实验思考:1、有没有办法让AX D 中寄存器和存储器单元的值直接显示为十进制?答:暂停ads,修改相关参数,即可显示同组同学:10002 2 0 1孙郡遥1 0002304陆海霞10002 3 02 祁蕾100 0 2 3 0 8 梁玉实 验 二 熟 悉LINUX开发环境实验目的:熟悉L in u x 开发环境,学会基于S3c2 4 1 0 的L i n u x 开发环境的配置和使用。使用Li n u x 的armv41-u n known-1 inux-g c c 编译,使用基于N F S 方式的下载调试,了解嵌入式开发的基本过程。实验环境:硬件:UP-NETARM2410-S嵌入式实验平台、P C 机Pentium 5 0 0 以上,硬盘1 0 G 以上。软件:PC 机操作系统 REDHAT L I N U X 9.0+MINIC0M+ARM-L I NUX 开发环境实验内容:1、本次实验使用Red hat Linux 9.0 操作系统环境,安装A RM-Lin u x 的开发库及编译器。2、创建一个新目录,并在其中编写hello,c和Ma k e f i 1 e 文献。学习在L in u x 下的编程和编译过程.3、ARM开发板的使用和开发环境的设立。4、下载已经编译好的文献到目的开发板上运营。实验环节:1、嵌入式交叉开发环境的建立1)宿主机的环境搭建选择一种方式在宿主机上直接安装Linux操作系统,如安装R e dll a t.下载V M W a r e,解压后根据提醒对的安装VMWare到硬盘中;运营VMWare,根据向导创建一台虚拟机并选择L in u x 作为客户操作系统;根据向导安装R e dHat Linux 9.02)虚拟机中启动Li n u x 操作系统用户名:ro o t 密码:1 234 5 678将 Window s 下的e 盘设为共享目录,则在L inu x 的/m nt/h g f s/目录下就可以访问到Wi n d o w s 下的e 盘了。3)开发工具软件的安装1、安装g c c在 L i n u x 主窗口中单击鼠标右键,选 择“新建终端”命令,打开L i n u x 命令行窗口。在目录/m n t/h g f s/e/L i n u x v 7.2 /a r m 41 t o o 1 s/下找到 g c c 的安装文献 i n s t a 1 1.s h 并执行它。操作命令如下:#1s#./i n s t a 1 1 .s h2、配置P A TH途径/r o o t /下有一个.b a s h P r o f i l e”文献(由于该文献是隐藏文献,所以需要用“Is-a”命令才干显示);用 v i编辑器编辑该文献:#v i.b a s h _ P r of ile将文献中 P AT H 变量改为 P AT H=$P AT H:$H O ME/b in:/op t/h os t/a r mv 4 1/b i n /;存盘后执行口#s ou r c e .b a s h _ p r of i 1 e以后a r mv 4 1-u nk n ow n-1 i n u x-g c c 将会被自动搜索到。4)宿主机上的开发环境配置1、配 置 IP 地址实验箱的I P地 址 是 1 92.1 68.0.1 1 5,所以可以把主机的I P配置成1 9 2.1 6 8.0.1 2 1,具体配置时间方法如下:#i f c on f i g e t h O 1 92.1 68.0.1 2 1在 Linu x 中选择“R e d”菜单一“系统设立”一“网络”,打 开“网络配置”窗口,双击设备e t h O 的蓝色区域,进入以太网设立界面。2、关闭防火墙单 击“R e d”菜单一“系统设立”一安全级别,打 开“安全级别配置”窗口,选 择“无防火墙”选 项。3、配 置NF S单 击“R e d”菜单-系统设立-服务器设立-服 务,在“服 务 配 置”窗 口 中 勾 选n f s ,单 击“开 始”4、N F S设立单 击“R e d”菜单-系统设立-服务器设立-NF S服务器,打 开“N F S服务器配置”窗口,设 立NF S共 享。单击增长,在“目录”文本框中填入需要共享的途径,在主机文本框中填入允 许 进 行 连 接 的 主 机IP地 址。选择允许客户对共享目录的操作为只读或读写。最后退出时则 完 毕NF S配 置。配置好后,界面应显示如下图所示:NFS服务器。文件(E)帮助I I,尊 谷,添加 ;,巴.D帮助(H)目录|主机|权限/arm2410s 192.168.0.*Read/Write至此,交叉开发环境的主机部分派置完毕。5)目的机的信息输出使用超级终端介绍宿主机与实验箱的通信。一 方 面 连 接串口线:一端连接P C的 串 口(C 0M1),另 一 端 连 接 到U P-NE T AR M2 4 1 0-S实验箱的串口。接下来建立超级终端:运营W ind ow s系 统 下 的“开 始”-“所有程序”-“附件“通 讯”一“超 级 终 端”,新建一个通信终端。文件(E)编 辑(日 杳看(V)终 端CD 标签帮助(tW?l c oro o t的 主 IOPTIOCo n p iM n i c o m Co n rra n d Sun rn i ryCo n rra n d s c a n b e c a l l e d b y CTRL-A 回收却/$A/b i n/$/aM i n Fun c l i o n sOi h e r Fun c l i o n sDi a l i n g d i re c to rySe n d f-i 1 u s.c o n m Pa ra n v t e r s.Ca p ture o n/o f f.se n d b re a k.Te rm i n a l se l l i n g s1 i n e W-a p o n/o f f.run sc r i p t (Go).GPLFTWRe c e i ve f i l e sAd d Ii n e f e e d.l n g up.run Ke rm i t1 o c a 1 Ec h o o n/o f f.ECl e a r Sc re e n.c5 f i g ure M n i c o m.Su sp e n d m i n i c o m.e Xi t a n d re se t.Qj i I wi th n o re se tCurso r k e y n ud e.He 1p sc re e n.sc ro 11 Ba c k.XQ1ZBDRi n i ti a l i ze M)d e m.MOSe l e c t f un c t i o n o r p re ss En I e r f o r n o n e.W i t te n b y M q u e 1 va n Sn o o re n b urg r 1991-1995So n t a d d i t i o n s b y Juk k a La h l i n e n 1997-2000i 18n b y Arn a Id o Ca rva 1 h o d e M?Io 19986)程序的运营打开超级终端,打开实验箱电源开关,系统会由v i v i 开始引导。正常显示时会显示启动信息到“Pr es s R et u r n t o s t a r t t h e L I N U X n ow,a n y ot h er k ey for v i v i ,假如不进行任何操作等待30 s 或按回车键则启动进入L i n u x 系统;假如按回车键以外的其他键则进入v i vi控制台。在这里输入b oo t ,会引导K e r n el 启动L i n u x 系统。L i n u x 系统启动完毕后,屏幕显示:/m n t/y a ffs root(3 local h o s t:-文件编辑查看终端CD 标 签 国 柄助(旦)W?1 com?t o mi n i com 2.4)0.0 t 的 IOPT!Cb6:Ili s to ry B u ffe r.F-k e y M e ro s.Sea r ch Hi s to ry Bu f fe r.1 1 8nConp iIe d on Jun 15 2004.2 0:4 5:2 7.可收却/$AT S7=45/b in/a sh:c 1/$/b in/a sh con f i grur aenanvs ande t r an s fe rCon f i grurati on savedS e r ia l por t se t upM)dem and d i a 1 i ngrS creen and keyboard基于Linux的应用程序的开发环节1、建立工作目录roo t z xt sm ile#mk d i r hell or o otzxt s m i le#cd h e llo2、编写程序源代码在L inux下的文本编辑器有许多,常用的是vim 和Xwindow界面下的g e d i t 等,我们在开发过程中推荐使用v im,用户需要学习v im 的操作方法,请参考相关书籍中的关于v i m的操作指南。K develope、a n j u t a 软件的界面与vc6.0 类似,使用它们对于熟悉windows环境下开发的用户更容易上手。实际的hello,c 源代码较简朴,如下:#in c I u d e ma i n()(p r in tf(h ello world n );)我们可以是用下面的命令来编写h e 1 1 o.c 的源代码,进入h e l l o 目录使用v i 命令来编辑代码:r o o t z xt he 1 loit vi h e 11 o.c按“i”或者“a”进入编辑模式,将上面的代码录入进去,完毕后按E s c 键进入命令状态,再用命令“:wq”保存并退出。这样我们便在当前目录下建立了一个名为hello,c 的文献。3、编写 M a k efi l e要使上面的h e l l o.c 程序可以运营,我们必须要编写一个Makef i 1 e 文献,M a k e f ile文献定义了一系列的规则,它指明了哪些文献需要编译,哪些文献需要先编译,哪些文献需要重新编译等等更为复杂的命令。使用它带来的好处就是自动编译,你只需要敲一个make”命令整个工程就可以实现自动编译,当然我们本次实验只有一个文献,它还不能体现出使用M a k e f i l e 的优越性,但当工程比较大文献比较多时,不使用Ma k e f i l e 几乎是不也许的。下面我们介绍本次实验用到的Ma k e f i l e 文献。CC=a r m v 4 1 -u n k n o w n _ 1 i n u x-g c cEX EC=h e 1 1 oOBJ S =h e 11 o .oCFL AGS +=L D F L A G S+=-s t a t i ca l l:$(EX EC)$(EX EC):$(OBJS)$(CC)$(LDFLAGS)-o$(OBJS)c l e a n:r m -f$(EX EC)*.e l f *.g d b *.o下面我们来简朴介绍这个M a k e f i l e 文献的几个重要部分:C C 指明编译器E XE C 表达编译后生成的执行文献名称O B J S 目的文献列表C F L A G S 编译参数LDFLAGS 连接参数a 1 1:编译主入口c l e a n:清除编译结果与上面编写h e 1 l o.c 的过程类似,用 vi来创建一个M a k e f i l e 文献并将代码录入其中 r o o t z x t h e l l o#v i Ma k e f i 1 e4、编译应用程序在上面的环节完毕后,我们就可以在h e l l。目录下运营 m a k e”来编译我们的程序了。假如进行了修改,重新编译则运营:r o o t z x t h e l l o#make c 1 e a n r o o t z x t h e Ho#m a k e5、下载调试在宿主P C计算机上启动NF S服务,并设立好共享的目录,具体配置请参照前面第一章第四节中关于嵌入式L i n u x环境开发环境的建立。在建立好NF S共享目录以后,我们就可以进入M I NI C 0 M中建立开发板与宿主P C机之间的通讯了。r o o t z x t h e 1 1 o#m i n i c o m/m n t /y a f f s m o u n t t n f s -o n o l o c k 19 2.1 6 8.0.56:/a r m 24 1 Os /h o s t假如不想使用我们提供的源码的话,可以再建立一个N F S共享文献夹。如/r o o t/s h a r e,我们把我们自己编译生成的可执行文献复制到该文献夹下,并通过MIN IC0M挂载到开发板上。r o o t z x t h e l 1 o#c p h e l 1 o /r o o t/s h a r e r o o t z x t he l l o m i n i c o m/m n t /y a f f s m o u n t -t n f s -o n o l o c k 19 2.168.0.5 6:/r o o t/s h a r e /h o s t再进入/host目录运营刚刚编译好的h e l l。程序,查看运营结果。/m n t/y a f f s c d /h o s t/h o s t ./h e l l ohello w o r 1 d实验思考:1.Ma k e f i 1 e是如何工作的?其中的宏定义分别是什么意思?答:解释m a k e f i l e如何工作:m a k e f i l e是一个文本文献,用于描述程序源代码之间以及程序可执行代码与源代码之间的依赖关系。A简朴例子:最终编译生成的可执行文献a b.o ut是由a.c和b.c共同编译生成的,那么make文献就要写两行:a b.out:a.c b.cgcc a.c b.c-O a b.ou tA第一行描述了依赖关系,第二行描述了依赖关系是如何达成的。更复杂的例子:最终编译生成的可执行文献ab.o u t是由a.c 和 b.o b j功能编译生成的,而b.o b j 是由bl.c 和 b2.c 编译而成,那么要写好多行:Mb.out:a.c b.o bjgcc a.c b.obj-o ab.outb.o bj:bl.c b 2.c A g c c -c bl.c b2.c-o b.o b j A 这就是makefi 1 e 的工作方法。A关于宏定义,简朴点说就是文本替换。为了方便使用不同的编译器或者编译环境以及硬件环境,一些复杂的软件使用了大量的宏定义来代替诸如“gcc同组同学:10 0 022 0 1 孙郡遥1 0002304陆海霞1 00 0 2 3 02 祁蕾1000 2 308 梁玉实验三多线程应用程序设计实验目的:了解多线程程序设计的基本原理。学习p t hrea d库函数的使用。实验环境:硬件:UP-NETARM24 1 0-S 嵌入式实验平台,P C 机Pen t ium 5 0 0 以上,硬盘4 0 G 以上,内存大于12 8M。软件:PC 机操作系统 REDHAT LINUX 9.0+M I NICOM+ARM-LINUX 开发环境实验内容:读懂p th re a d.c的源代码,熟悉几个重要的PTHREAD库函数的使用。掌握共享锁和信号量的使用方法。进入/a r m2 4 10 s/e xp/b a s i c /02_ p threa d 目录,运营m a k e 产生 p thr e ad程序,使用NFS方式连接开发主机进行运营实验。实验环节:1.实验源代码与结构流程图本实验为著名的生产者-消费者问题模型的实现,主程序中分别启动生产者线程和消费者线程。生产者线程不断顺序地将0 到1000的数字写入共享的循环缓冲区,同时消费者线程不断地从共享的循环缓冲区读取数据。流程图如下图所示:主程序泪由本实验具体代码如下:#i n c l u d e#i n c 1 u d e#i n c l u d e f t i n c l u d e /p t h r e a d.h#d e f i n e B U F F E R _ S I Z E 1 6/*设立一个整数的圆形缓冲区*/s t r u c t p r o d c o n s i n t b u f f e r B U F F E R _ S I Z E ;/*缓冲区数组*/p t h r e a d _ m u t e x _t 1 o c k;/*互斥锁*/i n t r e a d p o s,w r i t e p o s;/*读写的位置文/p t h r e a d c o n d t n o t e m p t y;/*缓冲区非空信号*/p t h r e a d _ c o n d t n o t f u l 1 ;/*缓冲区非满信号*/);/*初始化缓冲区*/v o i d i n i t (s t r u c t p r o dco n s *b)(p t h r e a d_m u t e x _i n i t (&b-l o ck,N U L L);p t hr ea d _co n d_i n i t(&b-n o t em p t y,N D L L);p t h r e a d_ c o n d_i n i t (&b-n o t fu l l,N U L L);b-r e a dp o s =0 ;b-w r i t e p o s =0;/*向缓冲区中写入一个整数*/v o i d p u t (s t r u c t p r o d c o n s *b,i n t da t a )(p t h r ea d_m u t e x l o ck (&b-1 o c k);/*等待缓冲区非满*/w hi l e(b-w r i t e p o s 4-1)%B U F F E R _ S I Z E=b r ea dp o s)p r i n t f(w a i t f o r n o t fu 1 l n);p t h r ea d_ co n d w a i t (&b-n o t f u l l,&b l o ck);)/大写数据并且指针前移*/b-bu ffer b-w r i t e p o s =da t a;b-w r i t ep o s +;i f(b-w r i t ep o s =BU F F ER _ S I Z E)b-w r i t e p o s =0 ;/*设立缓冲区非空信号文/p t hr e a d_co n d_ s i g n a 1 (&b n o t em p t y);p t hr e a d_m u t ex _u n 1 o c k (&b-l o c k);)/*从缓冲区中读出一个整数*/i n t get (s t r u c t p r o dco n s *b)(i n t d a t a;p t h r ea d m u t ex _l o c k (&b-1 o c k);/*等待缓冲区非空文/w hi l e(b-w r i t e p o s =b-r ea d p o s)p r i n t f Cw a i t fo r n o t em p t y nz,);p t hr ea d_ c o n d w a i t (&b-n o t em p t y,&b-l o ck);)/文 读数据并且指针前移*/d a t a =b-bu ffer b-r e a d p o s;b-r ea dp o s+;i f(b-r ea dp o s =BU F F ER _S I Z E)b-r e a dp o s =0 :/*设立缓冲区非满信号*/p t hr ea d_co n d_ s i g n a 1 (&b-n o t fu l 1);p t h r ea d_ m u t ex _ u n 1 o ck (6 b-l o c k );r et urn da t a;defi n e OV ER (-1)s t r u ct p r o d c o n s bu ffer;v o i d*p r o du c er (v o i d*da t a)i n t o;f o r (n =0;n%d n);p u t (&bu f f er,n);)p u t (&b u ffe r ,O VE R);p r i n t f(p r o du c e r s t o p p e d!n);r et u r n N U L L;)v o i d*c o n s u m er(v o i d*d a t a)(i n t d;w hi l e(1)d=g e t (&bu f f er);i f(d 二二 OV E R )b r ea k;p r i n t f(H%d g e t n d);)p r i n t f(c o n s u m e r st o p p ed!n );r e t u r n NULL;i n t m a i n (v o i d)p t hr e a d_t t h_ a ,t h _ b;v o i d*r et v a l;i n i t (&b u ff e r);p t hr ea d_ er e a t e(&t h_a,NULL,p r o du c e r,0);p t hr e a d_ c r ea t e(&t h_ b,N U L L,co n s u m e r ,0);/*等待生产者和消费者结束*/p t hr ea d_ j o i n(t ha,&r et v a l);p t h r ea d_ j o i n (t h_ b,&r et v a l);r et u r n 0;)3.重要函数分析:下面我们来看一下,生产者写入缓冲区和消费者从缓冲区读数的具体流程,生产者一方面要获得互斥锁,并且判断写指针+1 后是否等于读指针,假如相等则进入等待状态,等候条件变量n o t fu l l;假如不等则向缓冲区中写一个整数,并且设立条件变量为n o t em p t y ,最后释放互斥锁。消费者线程与生产者线程类似,这里就不再过多介绍了。流程图如下:进行消费S e t)生产者写入共享的循环缓冲区函数PUTv o i d p u t (s t r u c t p r o dco n s *b,i n t d a t a )(p t h r e a d j n u t ex _ 1 o c k (&b-1 o c k);获取互斥锁w hi l e(b-w r i t ep o s +1)%BU F F E R _S I Z E=b-r e a dp o s )假如读写位置相同p t hr e a d_ c o n d_w a i t (&b-n o t f u 1 1,&bl o c k);等待状态变量6!1。1加1 1,不满则跳出阻塞)b-b u ffer b-w r i t ep o s =da t a ;/写入数据b-w r i t ep o s+;i f(bw r i t e p o s =BU F F ER _ S I Z E)b-w r i t ep o s =0;p t hr ea d_ c o n d_s i g n a l (&b-n o t e m p t y);/设立状态变量p t hr ea d m u t e x _ u n l o c k(&b-l o c k);释放互斥锁)消费者读取共享的循环缓冲区函数G E Ti n t ge t (s t r u ct p r o dco n s *b)(i n t da t a;p t hr ea d_m u t ex _l o ck (&b-l o c k );获取互斥锁w hi 1 e(b-w r i t ep o s =二 b-r ea d p o s)假如读写位置相同p t h r e a d _c o n d_ w a i t (&b-n o t em p t y,&b-l o ck);/等待状态变量bn o t em p t y,不空则跳出阻塞。否则无数据可读。)da t a =b-b u ffer br ea d p o s ;/读取数据b-r ea dp o s+;if(b-read p o s=BUFFER_SIZ E)b-r e ad p os=0;p threa d c o n d_sign a 1(&b-not f u l l);/设立状态变量pthre a d_mutex_ u nlock(&b-1 oc k);/释放互斥锁r e tur n d ata;)1、阅读源代码及编译应用程序进入exp/b a s i c/02_ p t h r e a d 目录,使用v i 编辑器或其他编辑器阅读理解源代码。运营 make产生p th read 可执行文献。10s/exp/basic/02 _ptliread-Slie fl-Konsote会话 编辑 查看书签 设置 帮助,阚Iroot 02_pt hread#nake.ar mr4l-unknown-l i nux-gcc-c-o pt hread.o pt hread.car mr4l-unknown-!i nux-gcc-o./bi n/pt hread pt hread.o-I pt hreadarnv41-unknoun-1i nux-gcc-o pt hread pt hread.o-I pt hreadroot x t 02_pt hread#1 sM k e file Mikefi I pt hread pt hread.c pt hread.oroot EXI 02_pt hread#|2、下载和调试切 换 到 m i ni c om终端窗口,使 用 NF S mo u n t开发主机的/arm241 0 s 至 lj/h o st 目录。后一部分结果如下:w a it fo r not e mptyp ut-994p u t 9 9 5put 996p u t 997p u t-9 9 8put-9 9 9prod u cer s to p ped!993get9 94 get995get9 9 6 g e t997g e t99 8 g e t9 99一ge tcons u me r stopped!/hos t/e x p/b a s ic/02_pth r ea d 实验思考:1.加入一个新的线程用于解决键盘的输入,并在按键为ES C 时终止所有线程。答:1 .记录所有线程IDA 2.收到键盘信号时,判断为E S C 时,发送终止信号给所有的线程ID2.线程的优先级的控制。每个线程都具有各自的优先级,线程的优先级可以在程序中表白该线程的重要性,假如有很多线程处在就绪状态,系统会根据优先级来决定一方面使哪个线程进入运营状态。但这个并不意味着低优先级的线程得不到运营,而只是它运营的几率比较小。同组同学:1000220 1 孙郡遥1 0002304陆海霞1 0 002302 祁蕾1 0002308 梁玉

    注意事项

    本文(2023年ARM实验报告新编.pdf)为本站会员(无***)主动上传,淘文阁 - 分享文档赚钱的网站仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知淘文阁 - 分享文档赚钱的网站(点击联系客服),我们立即给予删除!

    温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。




    关于淘文阁 - 版权申诉 - 用户使用规则 - 积分规则 - 联系我们

    本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知淘文阁网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

    工信部备案号:黑ICP备15003705号 © 2020-2023 www.taowenge.com 淘文阁 

    收起
    展开