RISC-V (三)RVOS

操作系统的定义

        Operating System,是一组系统软件程序。

        -主管并控制计算机操作、运用和运行硬件、软件资源。

        -提供公共服务来组织用户交互。

        操作系统有广义和狭义之分。

        -狭义:内核。

        -广义:发行包 = 内核 + 一组软件  e.g. ubuntu windows 

QEMU-virt地址映射

        其中kernel放置于VIRT_DARM空间,虽然VIRT_DARM在此表格里地址空间写的是0x0,但其实是有一个大小的,kernel就放在这个空间里。

        -Ttext=0x8000000,就是编译的时候告诉链接器指令放置的开始位置。  

        QUMU -kernel os.elf意思是将os.elf这个文件里的二进制代码放到kernel这个空间里。        

Machine模式下的CSR列表

        csr   列表:        

CSRRW(atomic read/write csr)

        -CSRRW先读出CSR中的值,将其按XLEN位的宽度进行“零扩展”后写入RD;然后将RS1中的值写入CSR。

        -以上两步操作以“原子性”方式完成。

        -如果RD是X0,则不对CSR执行读的操作。

CSRRD(automic read and set bits in csr)

        -X6相当于起到了一个mask的作用。SCRRS先读出CSR中的值,将其按XLEN位的宽度进行“零扩展”后写入RD;然后逐个检查RS1中的值,如果某一位为1则对csr的对应位置1,否则保持不变。

        -以上两步操作以“原子性”方式完成。

        伪指令

UART(统一异步接收传输协议)

         接收方通过检测起始位来确定数据的开始,并根据事先约定的帧格式和波特率,正确地识别出数据位和停止位,而不会将停止位误认为是数据。这样就保证了数据传输的准确性和完整性。        

         qemu 模拟了 ns16550a 芯片,通过内存映射将对应的基地址映射到了 0x1000_0000 处       

        platform.h编写

/* This machine puts UART register here in physical memory. */
#define UARTO 0x10000000

        uart.c编写

#define UART_REG(reg) ((volatile uint8_t*)(UART0 + reg))
#define uart_read_reg(reg) (*(UART0 + reg))
#define uart_write_reg(reg, v) (*(UART0 + reg)) = (v)

        NS16550a编程接口介绍

          uart寄存器一个是8位。

         对数据的TX/RX有两种处理方式

        -轮询处理:不断地去询问发送数据的那个寄存器,如果为空就写入数据。

        -中断处理:uart发送数据的寄存器为空闲的时候,通过串口去告诉主设。 

  

  • 3
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

玟林禹

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值