- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
实验七-设备驱动程序课案
上海应用技术学院
程序设计语言实验报告
实验名称 设备驱动程序 实验序号 实验七 实验日期 姓 名 学 号 指导教师 专 业 计算机科学与技术 班 级 成 绩 实验目的及要求
调试EOS串口驱动程序向串口发送数据的功能,了解设备驱动程序工作原理。
为EOS串口驱动程序添加从串口接收数据的功能,进一步加深对设备驱动程序工作原理的理解。
实验环境
Windows XP;Tevation OS Lab。 三、添加到软盘镜像的根目录中,如图2。
点击FloppyImageEditor工具栏上的保存按钮,关闭该工具。
图2
2 练习使用EOS应用程序向串口发送数据
按F7生成EOS内核项目如图3。
图3
按F5启动调试如图4。
图4
EOS启动成功后,在控制台中输入命令“serial”按回车,启动串口测试程序serial.exe。程序启动后会显示提示信息和准备向COM2发送数据的提示符“”,如图5。
图5
由于虚拟机上的COM2和主机上的COM7已经建立了连接,所以在向虚拟机的COM2发送数据之前,要先启动主机上的“Terminal”工具,准备从COM7接收数据:
在OS Lab的“工具”菜单中选择“Terminal”,启动“Terminal”工具。
在“连接到”对话框中选择COM7,点击“确定”按钮,如图7。
图7
在“属性”对话框中点击“确定”按钮,使用默认设置。接下来就会显示Terminal的输入输出窗口,用于显示从COM7接收到的数据和向COM7发送的数据。
此时激活虚拟机窗口,在EOS控制台中输入任意字符串并按回车后,Terminal会接收到由serial.exe发送到串口COM2的内容。例如在serial中输入“hello”后按回车,Terminal会接收到并显示“hello” 如图8-9。
图8
图9
Serial.exe将输入内容发送到COM2后,会立刻调用API函数ReadFile从COM2读取数据。由于当前EOS的串口驱动程序尚未实现从串口读取数据的功能,所以ReadFile返回了错误,serial.exe就退出了。
6.结束此次调试。关闭Terminal工具。
3调试EOS串口驱动程序向串口发送数据的功能
按照下面的步骤进行调试:
在OS Lab“项目管理器”窗口中打开串口驱动程序源文件io/driver/serial.c。在函数SrlWrite的第一行(310行)和最后一行(341行)分别添加一个断点;在函数SrlIsr的第一行(352行)添加一个断点;在函数SrlRead唯一的一条返回语句所在行(295行)添加一个断点,如图10-11。
图10
图11
按F5启动调试,如图12。
图12
在内核初始化过程中,初始化8250控制器时会触发一个8250中断,并命中SrlIsr中设置的断点,按F5让EOS继续执行忽略此次中断。
激活虚拟机窗口,在EOS控制台中输入命令“serial”按回车如图13。
图13
在OS Lab的“工具”菜单中选择“Terminal”工具,并按3.2节中的方法打开串口COM7并进入工具的输入输出窗口,如图14。
图14
在EOS控制台中输入“12345”共5个字符后按回车,如图15。
图15
在向串口发送数据时,serial应用程序调用了EOS的API函数WriteFile,而WriteFile最终调用了串口驱动程序的SrlWrite函数,所以会命中设置在SrlWrite函数第一行的断点。打开“调用堆栈”窗口验证函数调用的层次。
将鼠标指针移动到SrlWrite函数参数Request上,可以查看其值为6。
说明要发送包括“12345”和字符串结束符“\0”在内的6个字符。如图16。
图16
对照SrlWrite的流程图,按F10单步跟踪该函数的执行过程。当变量Data被赋值后,查看变量的值为0x31(字符“1”的ASCII代码)。当执行语句(第332行):WRITE_PORT_UCHAR(REG_PORT(DeviceObject, THR), Data);后,将会命中设置在SrlIsr中的断点,开始调试中断处理程序。激活Terminal工具窗口,可以看到已经接收到字符“1”。如图17-18。
图17
图18
4为EOS串口驱动程序添加从串口接收数据的功能
EOS内核项目代码修改完毕后,按F7生成项目。
按F5启动调试。
按照之前练习的方法启动serial.exe和Terminal工具。
在EOS控制台输入字符串并发送到Terminal工具后,从Terminal工具输入字符串应该可以再发送到EOS控制台,并可以交替的进行输入输出。如图19-20:
图19
图20
实验结果与分析
实验中遇到的问题:
在练习使用EOS应用程
原创力文档


文档评论(0)