RL-RTX小读之os_sys_init(init)(一)

硬件平台是STM32F407,ARM Cortex-M4内核。

查看os_sys_init的定义,在rtl.h中定义如下:

#define os_sys_init(tsk)              os_set_env();                           \
                                      _os_sys_init((U32)rt_sys_init,tsk,0,NULL)

其中os_set_env是由汇编实现的:

__asm void os_set_env (void) {
   /* Switch to Unprivileged/Privileged Thread mode, use PSP. */
        MOV     R0,SP                   ; PSP = MSP
        MSR     PSP,R0
        LDR     R0,=__cpp(&os_flags)
        LDRB    R0,[R0]
        LSLS    R0,#31
        MOVNE   R0,#0x02                ; Privileged Thread mode, use PSP
        MOVEQ   R0,#0x03                ; Unprivileged Thread mode, use PSP
        MSR     CONTROL,R0              ; 读R0值并写入CONTROL寄存器
        BX      LR

        ALIGN
}

下面我们来分析代码的作用:

MOV     R0,SP                   ;把SP(R13)(主堆栈指针)传送给R0
MSR     PSP,R0                  ;特殊寄存器操作,把R0传送给PSP(进程堆栈指针)
LDR     R0,=__cpp(&os_flags)    ;加载c语言定义的os_flags的指针到R0
LDRB    R0,[R0]                 ;把R0指向的数据保存到R0中
LSLS    R0,#31                  ;把R0中的数据左移31位并将结果保存到R0中
MOVNE   R0,#0x02                ;如果R0非0,则使用特权模式
MOVEQ   R0,#0x03                ;如果R0位0,则不适用特权模式
MSR     CONTROL,R0              ;特殊寄存器操作,把配置好的R0值写入CONTROL寄存器

查看《STM32F3 and STM32F4 Series Cortex-M4 programming manual》,可以找到关于Stack和CONTROL寄存器的相关内容。

关于Stack

STM32F4使用递减的Stack。这意味着栈指针指向栈内存的最后的一个栈项。当处理器往Stack中压入
一个新项时,栈指针先递减然后把项写入新的内存位置。处理器实现了两个栈,住栈和进程栈,各自
拥有自己的栈指针。

在线程模式,CONTROL寄存器控制处理器使用主栈或者进程栈。在处理器模式,处理器始终使用主栈。

关于CONTROL

CONTROL寄存器: CONTROL寄存器控制stack的使用和软件在线程模式下的特权等级,并且标记
FPU是否处于激活状态
The CONTROL register controls the stack used and the privilege level for software
execution when the processor is in Thread mode and indicates whether the FPU state is
active.

CONTROL寄存器的位定义如下:
Bit[0]:nPRIV 线程模式特权等级。0表示特权模式,1表示非特权模式
Bit[1]:SPSEL 活动栈指针选择。选择当前的栈。0表示当前栈指针是MSP,1表示当前栈指针是PSP。
在处理器模式读为0且忽略写操作。内核会自动根据返回结果自动更新它。
Bit[2]:FPCA 指示是否启用浮点运算单元。

有此可见,os_set_env函数的主要作用就是配置CONTROL寄存器,根据配置情况来配置rtx运行在特权模式或者非特权模式,同时启用FPU。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
RTX 5是NVIDIA推出的一款高性能显卡系列,RL_FS是该显卡系列中的一个技术特性。RL代表的是实时光线追踪(Real-Time Ray Tracing),FS代表的是全局光照效果(Global Illumination)。RTX 5及其特性RL_FS的出现,在实时渲染领域带来了重大突破。 实时光线追踪是一种模拟光线在场景中的传播和反射的技术,通过对每个像素进行光线追踪计算,能够实现更加真实和精细的光照效果。可以模拟光线的折射、反射和散射等物理现象,呈现出更真实的阴影、反射和折射效果。与传统的光栅化渲染相比,实时光线追踪能够提供更高质量的图像。 而全局光照效果是光照在整个场景中的传播和影响,能够实现自然的光照效果。通过模拟光在空间中的传播、散射和反射等过程,使得场景中的物体能够更加真实地感受到光的影响。全局光照效果能够提供逼真的阴影、反射和折射效果,让人们感受到光线的自然演化。 RTX 5中的RL_FS技术结合了实时光线追踪与全局光照效果,使得显卡能够实时渲染出高质量的图像。这项技术的出现对于游戏、电影和设计等领域都具有重要的意义。在游戏中,RL_FS能够提供更加逼真的画面表现,增强沉浸感和观赏性;在电影制作上,RL_FS可以加速视觉效果的制作过程,提高制作效率;在设计领域,RL_FS能够帮助设计师更精确地展现设计想法和效果。 总之,RTX 5中的RL_FS技术对于实时渲染领域的发展具有重要意义,为图像表现提供了更高的保真度和视觉品质。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值