实验环境:实时操作系统MicroC/OS-2
任务一:设计系统调用
任务详情
设计以下系统调用,以完成用户态下的时钟初始化和显示输出:
- 初始话时钟
- 显示输出
要求: - 以上两个系统调用同时存在
- 中断处理过程尽可能短
实际操作
(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()函数进行打印输