尧图网站设计 尧图网站设计YAOTU DESIGN
ARTICLE DETAIL

资讯详情

深耕网站设计与一线实操的经验洞察。

计院操作系统实验2

计院操作系统实验2 写到前面笔者是word直接粘贴过来的word吞画质我没有办法。本次实验建议完成时间180分钟如果自己看arm开发手册要240分钟问ai120分钟抄代码5分钟写实验报告30分钟。应该是第一次接触嵌入式开发可以试试据说这个是可以直接下到华为鲲鹏香橙派上面的但是我看了一下一个机子要2000太贵了《操作系统》HelloMiniEuler实验报告目录1 实验项目一... 31.1 项目名称... 31.2 Hello, miniEuler 31.3 实验目的... 31.4 实验资源... 32 实验任务... 42.1 了解virt 42.2 实现PRT_Printf函数... 52.3 支持格式化输出... 62.4 实现 vsnprintf_s 函数... 72.5 调整下构建系统... 82.6 成品展示... 93 作业... 103.1 作业1. 103.2 作业2. 11实验项目一项目名称Hello, miniEuler实验目的做出printf实验资源文档实验任务了解virt定义The virt board is a platform which does not correspond to any real hardware; it is designed for use in virtual machines. It is the recommended board type if you simply want to run a guest such as Linux and do not care about reproducing the idiosyncrasies and limitations of a particular bit of real-world hardware.Virt 机器是一种​​非实体硬件平台​​通过软件模拟完整的计算机系统包括 CPU、内存、外设如磁盘、网络接口等。它不依赖于特定物理硬件而是基于标准化的虚拟化规范例如 RISC-V 的 virt 平台可用于模拟 RISC-V 指令集的开发环境。输出设备就是这个pl011实现PRT_Printf函数这一段代码其实就是实现了一个输出单个字符等效于C的put(char ch)轮询解决的是串口的缓冲区是否满的问题为了保证速度串口设立了缓冲区。支持格式化输出上图的函数实现了打印很多个字符串。现在重点在格式化。现在prtprintf还差一个东西见下文。实现 vsnprintf_s 函数vsnprintf_s 函数的主要作用是依据格式控制符将可变参数列表转换成字符列表写入缓冲区。别人已经实现了接下来读一下代码很语法糖的写法写出了字符转数字非递归的写法进制转换调整下构建系统成品展示作业作业1不启用 fifo通过检测 UARTFR 寄存器的 TXFE 位来发送数据。根据说明书FEN在第四位把它关掉根据说明书TXFE在UARTFR的第七位然后设置这两个参数因为其实只是禁用了FIFOFIFO还要高级一些有个队列缓冲区如果没有FIFO就是个寄存器只要找到寄存器的状态位咱们一样能干和之前找到的标志位相与就可以了。逻辑很简单但是要把电子电路所学的知识还要说明书在讲什么联合起来理解起来有难度理解了就很简单。成品展示过编译了。作业2采用 UniProton 提供的 libboundscheck 库实现 vsnprintf_s 函数。下载这个然后改makefile重新编译这些警告是由于 newlib 对 _close、_fstat、_read、_write 等系统调用仅提供了未实现的桩函数提示你在嵌入式环境中应实现或忽略这些调用。入口函数为 vsnprintf_s和 vsnprintf_truncated_s 的实现类似其主要流程是参数检查通过 SECUREC_VSNPRINTF_PARAM_ERROR 宏检查传入的格式化字符串、目的数组及其长度是否满足安全要求。如果出错则清空目标内存并报告错误。分支处理根据 destMax 与 count 的大小关系分别以不同的 buffer 大小调用内部实现函数 SecVsnprintfImpl 来进行格式化输出。截断处理当 SecVsnprintfImpl 返回 SECUREC_PRINTF_TRUNCATE表示格式化后的字符串超过预设长度时函数返回错误值-1 或者返回 destMax-1对于 vsnprintf_truncated_s防止内存破坏。错误处理若格式化过程中返回其他错误则清空目标字符串并通过相应错误宏报告问题。内部实现主要依靠 SecVsnprintfImpl 完成实际的格式化处理。
返回列表