打印

请教一个关于RL-ARM 代码中os_set_env的问题

[复制链接]
4680|14
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
onsunsl|  楼主 | 2012-8-6 09:21 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
最近看了RL-ARM代码,在初始化调用了os_set_env ,有点不解:


/*--------------------------- os_set_env ------------------------------------*/

__asm void os_set_env (void) {
        /* Switch to Unpriviliged/Priviliged Thread mode, use PSP. */
        MOV     R0,SP                            //; R0 = MSP
        MSR     PSP,R0
       //; PSP = R0
        LDR     R0,=__cpp(&os_flags)      //; R0 = &os_flags
        LDRB    R0,[R0]
      //; R0 = *R0
        LSLS    R0,#31
      //; R0 = R0 << 31逻辑左移
        MOVNE   R0,#0x02                   //; Priviliged Thread mode, use PSP   if(R != 0x02)
        MOVEQ   R0,#0x03                  //; Unpriviliged Thread mode, use PSP
if(R == 0x03)
        MSR     CONTROL,R0
    //; CONTROL = R0
        BX      LR
    //; return

        ALIGN
}


这个一段RL-ARM的代码,功能是根据os_flags来设定CM3的CONTROL寄存器,即改变模式和使用PSP

问题是:程序返回时,直接进了SVC_Handler ,难道对CONTROL写操作会引发异常?



/*-------------------------- SVC_Handler -----------------------------------*/
// 11# 异常服务,执行系统服务调用指令SVC引发的异常
__asm void SVC_Handler (void)
{
}
   


求高手签定,谢谢
沙发
shyinyang| | 2012-8-6 12:32 | 只看该作者
虽然我不会!但是这个帖子不能沉了!顶起来让更多的人知道

使用特权

评论回复
板凳
onsunsl|  楼主 | 2012-8-6 20:35 | 只看该作者
真是沉了
看来用RTL的人少啊,RTL是一个不错的os

使用特权

评论回复
地板
onsunsl|  楼主 | 2012-8-6 20:43 | 只看该作者
RL-ARM不错。

    描述                RX Kernel
支持的进程数             最多256
支持的信箱数             无限制
支持的信号量数           无限制
支持的互斥量数           无限制
支持的信号量数           每个进程16个
支持的用户定时器数       无限制
RAM 要求                 最少500字节
代码要求                 小于5 K字节
硬件要求                 一个或多个片上时钟可用
用户进程优先级           1 - 255
进程切换的时间          小于5µs @60MHz, 0 ws.
中断停止时间            小于1.8 µ @60MHz, 0 ws

使用特权

评论回复
5
pattywu| | 2012-8-6 21:40 | 只看该作者
你肯定是没有仔细跟踪代码。
你查一下<rtx.h>头文件中,有关os_set_env ()函数的宏定义,就明白是怎么回事。

使用特权

评论回复
6
onsunsl|  楼主 | 2012-8-7 18:40 | 只看该作者
顶起来

使用特权

评论回复
7
onsunsl|  楼主 | 2012-8-7 18:42 | 只看该作者
你肯定是没有仔细跟踪代码。
你查一下头文件中,有关os_set_env ()函数的宏定义,就明白是怎么回事。
pattywu 发表于 2012-8-6 21:40

5楼也用RT-ARM?

使用特权

评论回复
8
onsunsl|  楼主 | 2012-8-7 18:43 | 只看该作者
搞明白了

#define __SVC_0         __svc_indirect(0)
extern void      _os_sem_init (U32 p, OS_ID semaphore,
                                      U16 token_count)                 __SVC_0;

异常是由__svc_indirect(0)产生的

使用特权

评论回复
9
onsunsl|  楼主 | 2012-8-7 18:46 | 只看该作者
RL-ARM 实时库用户指南.zip (718.6 KB)

使用特权

评论回复
10
火箭球迷| | 2012-8-7 18:47 | 只看该作者
解决问题的速度还是很快的

使用特权

评论回复
11
pkat| | 2012-8-7 19:01 | 只看该作者
118245
onsunsl 发表于 2012-8-7 18:46

很不错的指南,多谢共享

使用特权

评论回复
12
dfsa| | 2012-8-7 19:06 | 只看该作者
你肯定是没有仔细跟踪代码。
你查一下头文件中,有关os_set_env ()函数的宏定义,就明白是怎么回事。
pattywu 发表于 2012-8-6 21:40

应该就是头文件的问题

使用特权

评论回复
13
pattywu| | 2012-8-7 21:48 | 只看该作者
你在***论坛不是也问了啊?
    我在那边回答了你。

使用特权

评论回复
14
onsunsl|  楼主 | 2012-8-11 16:53 | 只看该作者
谢谢,楼上

使用特权

评论回复
15
bd7qwmcu| | 2016-12-14 10:48 | 只看该作者
搜到了,看看。谢谢

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

1

主题

27

帖子

1

粉丝