计院操作系统实验10
基于QEMU将UART串口重定向至控制台的实现使用UART串口作为输入设备通过设置信号量和中断每次用户输入字符串GIC会接收到中断号33随后调用shell进程存储输入至缓冲区并在控制台上回显输入实现简单的shell功能本次实验难度比较低最好随便水水然后赶快去做CS的汇编题目建议耗时120分钟目录1 实验项目一... 31.1 项目名称... 31.2 实验目的... 31.3 实验资源... 42 实验任务... 52.1.1 src/include/prt_shell.h. 52.2 接受输入... 52.2.1 src/bsp/print.c. 52.2.2 src/bsp/prt_exc.c. 82.2.3 src/kernel/task/prt_task.c. 82.2.4 src/kernel/tick/prt_tick.c. 82.2.5 src/shell/shmsg.c. 93 总结... 143.1 实验中出现的问题... 143.2 真实感受... 14实验项目一项目名称SHELL实验目的实现shell实验资源实验任务src/include/prt_shell.h接受输入src/bsp/print.cPRT_UartInit()定义了一个新的中断用于串口接收设置了这些操作数的位数0x24是波特率的设置。之后再启用。控制位启用接收使能和发送使能非常重要。OsUartRxHandle()每次输入字符以后等到FIFO非空的时候结束循环因为已经接收到了字符基本上也是轮询pollingsrc/bsp/prt_exc.csrc/kernel/task/prt_task.csrc/kernel/tick/prt_tick.csrc/shell/shmsg.c运行过程任务启用时SHELL先WAIT等待串口输入shell自己放弃运行进入阻塞态串口输入中断号33调用串口处理程序把输入的内容传到shell内并POST唤醒SHELL周SHELL继续经过循环等待直到输入换行符shell开始解析指令。指令完成后清空buffer等待下一次输入。以上便是一次完整的过程作业这里需要清除中断后才能正常进行信号接收之前因为我是RR调度Post会直接运行新的任务在中断启用之前所以说要把Post操作放到这里才能正常运行并发任务。实现了创建并发任务这里以DPP哲学家就餐问题示例清屏操作展示当前时钟展示当前任务展示当前系统运行轨迹取消运行轨迹展示还有退出这7个功能。Flag打印自己的logoTrace展示系统运行轨迹从这里可以看出运行过程与之前的分析一致Untrace关闭追踪多线程任务创建以及Top查看运行任务Tick显示运行时间Quit退出终端总结实验中出现的问题这次实验比较轻松主要难点还是之前综合知识点的运用中断和信号一起上如果掌握不好会有些应接不暇。这次写的驱动和print那次难度差不多这也不是第一次写驱动了所以比较容易看文档也轻松多了。我做shell的时候遇到了创建并发任务的时候遇到tick无法更新的bug因为我是RR调度这里默认是基于优先级的抢占式调度他在post的时候就开始唤醒任务了导致运行任务的时候没有开中断只有下一次wait了以后恢复内核栈的上下文运行到UARThandler结束后的intclear才会关闭中断所以说时间计数一开始才会准确但是运行并发任务的时候会出问题。做完全部实验的真实感受感觉这次最后的实验还是放了我们一马难度相当于实验二的printf一路走来从不会写驱动到现在稍微会一点嵌入式开发还是可以的也解决了许多并发问题做完实验以后才觉得掌握数据结构最重要了任务调度那块比较难做出来也对掌握任务的运行状态有帮助。内存mmu那里也很难理解了页表的数据结构就不难了再见了所有的OS实验
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2423452.html
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!