硬汉嵌入式论坛

 找回密码
 立即注册
查看: 1618|回复: 1
收起左侧

[RL-RTX] os_itv_wait 是怎么变成rt_itv_wait的

[复制链接]

7

主题

10

回帖

31

积分

新手上路

积分
31
发表于 2019-6-28 17:55:14 | 显示全部楼层 |阅读模式
不知道这个问题,有看过的吗?
RTX调用的原理我明白了。
os_itv_wait()
宏定义,改为 _os_itv_wait (U32 p)                                  __SVC_0;

查看反汇编,这就会往R12里面写一个地址
AppTaskLED
        0x08000590:    bf00        ..      NOP      
        0x08000592:    f44f70fa    O..p    MOV      r0,#0x1f4
        0x08000596:    f8dfc014    ....    LDR      r12,[pc,#20] ; [0x80005ac] = 0x8007441
        0x0800059a:    df00        ..      SVC      #0x0 ; formerly SWI


在SVC handler中会执行这个地址的函数,
SVC_Handler_Veneer        
#endif

        IMPORT  SVC_Count
        IMPORT  SVC_Table
        IMPORT  rt_stk_check

        MRS     R0,PSP                  ; Read PSP
        LDR     R1,[R0,#24]             ; Read Saved PC from Stack
        LDRB    R1,[R1,#-2]             ; Load SVC Number
        CBNZ    R1,SVC_User

        PUSH    {R4,LR}                 ; Save EXC_RETURN
        LDM     R0,{R0-R3,R12}          ; Read R0-R3,R12 from stack
        BLX     R12                     ; Call SVC Function
        POP     {R4,LR}                 ;
Restore EXC_RETURN当然了就是rt_itv_wait()。

RTX系统调用都是这个套路,我就奇怪一点:_os_itv_wait (U32 p) 在源码中没有实现,为什么会是rt_itv_wait的地址呢。这两个是怎么关联起来的
@Eric

回复

使用道具 举报

7

主题

10

回帖

31

积分

新手上路

积分
31
 楼主| 发表于 2019-6-28 18:05:47 | 显示全部楼层
看了这个关键字的信息,明白了。这个real num就是真实函数的地址,放在R12
看来RTX真是为了M3&M4量身定制的
======================================================
_svc_indirect是armcc的关键字之一(__irq也是armcc的关键字),用来修饰函数.
格式:
__svc_indirect(int svc_num) return-type function-name(int real_num[, argument-list]);
svc_num是汇编指令SVC的immediate value,在Thumb指令中该值范围为0-255 (an 8-bit value).
real_num该值通过r12寄存器传递到中断处理函数中(异常时r12会入栈, 得从栈里取出),该参数是必须有的。
return-type是函数的返回类型,该返回类型也可以放在最前面.
例子:
int __svc_indirect(0) ioctl(int svcino, int fn, void *argp);
当调用ioctl(4, RESET, NULL)时,相当于:
r12 = 4;
SVC #0 ;


触发了SVC中断,cortex-m3产生中断时,会将xPSR, PC, LR, R12, R3-R0这8个寄存器入栈,
所以ioctl的svcino参数需要从栈中取出.
---------------------
作者:青蛙嘎嘎
来源:CSDN
原文:https://blog.csdn.net/luoqindong/article/details/18374007
版权声明:本文为博主原创文章,转载请附上博文链接!
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|小黑屋|Archiver|手机版|硬汉嵌入式论坛

GMT+8, 2024-5-3 12:16 , Processed in 0.240969 second(s), 24 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

快速回复 返回顶部 返回列表