操作系统实验一-Unprivileged模式与系统调用

本文详细介绍了在实时操作系统MicroC/OS-2环境下,如何设计并实现Unprivileged模式下的系统调用,包括输出Hello world!、时钟初始化以及任务交替运行。通过中断处理和系统调用,解决了用户模式下无法执行特定操作的问题,实现了从用户态到内核态的切换,确保了操作系统的正常运行。
摘要由CSDN通过智能技术生成

实验环境:实时操作系统MicroC/OS-2

任务一:设计系统调用

任务详情

设计以下系统调用,以完成用户态下的时钟初始化和显示输出:

  1. 初始话时钟
  2. 显示输出
    要求:
  3. 以上两个系统调用同时存在
  4. 中断处理过程尽可能短

实际操作

(1)实现输出Hello world!

由于在用户模式下不能进行正常的输出,因此对main函数进行逐步调试。当进行到print_str()函数时,函数调用fputcp 函数。而在用户模式下,fputcp函数因为有IO操作所以不能正常进行,需要将print_str()函数切换到系统调用下进行。
在这里插入图片描述

在新的系统调用函数syscall_print_str()中,通过定义全局指针buffer,将需要打印的内容进行复制。然后通过SWI 0x01跳转到startup_stm32f10x_md.s 文件的中断处理程序SVC_Handler中。由中断处理程序进行调用stm32f10x_it.c 文件中的处理函数SVC_Handler_Main,再通过判断立即数,执行相应的真正中断处理,进行case 0x01的操作。
在case 0x01中,需要解决用户态下无法运行的fputcp函数进行打印的问题。在现在的处理程序下,已经处于内核态,系统调用介入,所以可以调用print_str()函数进行打印输

  • 7
    点赞
  • 32
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值