WZH 发表于 2021-9-3 12:47:14

RTX5系统下自定义SVC函数的方法

在RTX系统中,使用SVC函数有以下几点好处:1、由于函数是通过SVC软中断进行调用的,函数相当于自带了互斥锁,无需其他的加锁措施。2、函数通过中断调用,可以优先执行。
当然也有一些缺点:1、由于是通过中断调用,不适合调用等待性质的函数。2、SVC调用的函数中能调用的操作系统函数有限,只能调用可以在中断中使用的系统函数。
下面讲解一下如何自定义SVC函数。
首先讲一下SVC调用的原理,SVC指令调用后,处理器大致产生进行了以下几个操作:
1、保护现场,将寄存器值存入堆栈中
2、将SVC指令后面的立即数加载到R1寄存器中
3、产生软中断,进入到SVC_Handler中断服务函数中
4、将当前R1寄存器和0进行比较,若相等就会跳转到RTX系统的SVC中断处理,若不等则跳入SVC_User的处理函数,因此自定义的SVC函数标号务必要大于0,
5、在SVC_User中,把全局数组osRtxUserSVC的首地址加载到寄存器里,比较这个数组的第一个元素和SVC标号,如果SVC标号大于这个元素值,则判定为调用错误直接退出,因此osRtxUserSVC这个数组至少要有一个成员,且第一个成员
存储的就是我们定义的SVC函数个数。
6、随后就是将堆栈中的r0-r3的值恢复出来,并调用osRtxUserSVC[(SVC标号)]的函数指针,并将r0作为返回值。
RTX5中具体的汇编代码如下:
data:image/png;base64,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
data:image/png;base64,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E0h9dJCr39hJlVMol9o/zZULbvHVAyGgyUepWb30UpnwTm0miWseNbmBshSnpH2enBz699txL0ezScYSKvjm00wZVV8kUOmGjzU2yzglc1750JrCTdl/Pe2JNXbex3DVDSxYTV+l/usNMyafI8PGNtZ+7ke7icjPa0OtBTnzOKv1oWk9tfGjvGEAACAASURBVKd2/de1r4yfhkf30bL+VxtiHD5xbKDN+YYqt/a2BgffPxwCVB4frkvZICJABD4WAWwgyJStpMJeepKZD0Tg5hHAj4+UPN68y3TwgxGg8vjBANM8ESACRIAIEIF7Q0Cro1AvW2tg761t9Pd6BKg8Xo8hLRABIkAEiAARIAJE4GkQoPL4NF39IA01ZzLqdYj5fbou8UFazWYQASJABIgAEbgZBKg83kxX0BEiQASIABEgAkSACNw+AlQeb7+P6CERIAJEgAgQASJABG4GASqPN9MVdIQIEAEiQASIABEgArePAJXH2+8jekgEiAARIAJEgAgQgZtBgMrjzXQFHSECRIAIEAEiQASIwO0jQOXx9vuIHhIBIkAEiAARIAJE4GYQoPJ4M11BR4gAESACRIAIEAEicPsIUHm8/T6ih0SACBABIkAEiAARuBkEqDzeTFfQESJABIgAESACRIAI3D4CVB5vv4/oIREgAkSACBABIkAEbgYBKo830xV0hAgQASJABIgAESACt48Alcfb7yN6SASIABEgAkSACBCBm0GAyuPNdAUdIQJEgAgQASJABIjA7SNA5fH2+4geEgEiQASIABEgAkTgZhCg8ngzXUFHiAARIAJEgAgQASJw+whQebz9PqKHRIAIEAEiQASIABG4GQSoPN5MV9ARIkAEiAARIAJEgAjcPgJUHm+/j+ghESACRIAIEAEiQARuBgEqjzfTFXSECBABIkAEiAARIAK3jwCVx9vvI3pIBIjAjSNw3m9luz9XveylVwsygQgQASJwgwhQebzBTjntRFYrkc3hBp271KXTTobVSobd6dKS8uf3N/n++o/8+98g339fWP7vN/n3P5T95/KyztPDZiWrYSOP0A0Xg88CFyBwlHE9Sp069tJLVZ1lP25lvV6b/7bjKNvtvpTxi961/dtvrd/e//V6K2ODXH9sI4D/WtYz8QPRj36rdrjyoW3e3nEM+cejb8lZjkn/7eW430pM9/kKV2XP+7Ed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
知道了具体的调用原理后,自定义SVC函数就容易多了。
首先定义一个全局类型的指针数组 void * const osRtxUserSVC[];
extern void * const osRtxUserSVC[];
#define USE_SVC_COUNT                0
void * const osRtxUserSVC = {
        (void *)USE_SVC_COUNT,
};在这个数组的第一个成员填入自定义的svc函数个数,后面的成员直接填入函数指针,示例如下:
#include "mem_manage.h"static Mem_Root sys_heap_root;

static void sys_heap_init(void){
        Mem_Manage_Init(&sys_heap_root,xHeapRegions);
}

static void* svc_sys_malloc(size_t want_size){
        return Mem_Manage_Malloc(&sys_heap_root,want_size);
}

static void* svc_sys_realloc(void* src_addr,size_t want_size){
        return Mem_Manage_Realloc(&sys_heap_root,src_addr,want_size);
}

static void* svc_sys_aligend_alloc(size_t align_byte,size_t want_size){
        return Mem_Manage_Aligned_Alloc(&sys_heap_root,align_byte,want_size);
}

static void svc_sys_free(void* addr){
        Mem_Manage_Free(&sys_heap_root,addr);
}

static size_t svc_sys_get_heap_size(void){
        return sys_heap_root.total_size;
}

static size_t svc_sys_get_remain_size(void){
        return sys_heap_root.remain_size;
}

extern void * const osRtxUserSVC[];
#define USE_SVC_COUNT                6
void * const osRtxUserSVC = {
        (void *)USE_SVC_COUNT,
        (void *)svc_sys_malloc,
        (void *)svc_sys_realloc,
        (void *)svc_sys_aligend_alloc,
        (void *)svc_sys_free,
        (void *)svc_sys_get_heap_size,
        (void *)svc_sys_get_remain_size
};
这样我们就可以通过SVC指令调用svc函数啦,为了方便使用,我们要把SVC指令包上一层函数的封皮AC5
<blockquote>void* sys_malloc(size_t want_size)__svc(1);后面的__svc(1)后缀相当于告诉编译器,这个函数声明就是个小马甲,实际上是调用的是svc的1号指令,也就是svc_sys_malloc
AC6
在AC6中就没有这么人性化了,需要了解一点嵌入式汇编的知识,这里只讲用到的一点点知识,详细的GNU C 嵌入汇编知识可以看这个网址:http://www.ethernut.de/en/documents/arm-inline-asm.html
在GNU C 的标准中,一个嵌入汇编的语句有着如下的格式
__asm(代码:输出操作数列表:输入操作数列表:破坏寄存器列表);这里除了代码部分以外,其余都是伪代码,用于告诉编译器哪里会改变,如输入输出操作数列表是用于告诉编译器哪个参数会在指令前后发生改变,与c语言里的变量交互也是在输入输出列表中,破坏寄存器列表用于告诉编译器其他可能发生改变的地方,如内存,标志位等,此处主要填写不在输入输出列表中,却会被显式或隐式改变的量,如内存、标志位等。
语法允许省略掉任意元素,限制是至少要保留代码或破坏寄存器列表,要不然这个代码就是无意义的了。也就是说 诸如__asm("mov r0,r0");__asm(:::"memory");这样的代码都是合法的,不过为了编程清晰,也可以写成__asm("mov r0,r0":::);
了解一点arm汇编语法后我们就可以编写svc函数了。
arm中C语言函数参数传递遵循的是ATPCS原则,ATPCS中规定了函数参数使用r0-r3寄存器传递,返回值使用r0进行传递,这也限制了我们在定义svc函数时,函数参数不要超过四个(AC5也一样,汇编代码中只加载了r0-r3的寄存器),超过四个可以用结构体指针传递。普通的函数没有参数限制,多余的参数都会自动加载的堆栈中,编译器会进行合适的处理。
下面给出AC6情况下svc函数定义范例
__attribute__((always_inline)) static inline void* sys_malloc(size_t want_size){
        register size_t __r0 __asm("r0") = (size_t)want_size;
        __asm volatile ("svc 1":"=r"(__r0):"r"(__r0):"cc","memory");
        return (void*)__r0;
}
__attribute__((always_inline)) static inline的作用是声明函数是静态内联的,方便我们在头文件中定义。register声明变量为寄存器变量,__asm("r0") 指定变量的寄存器。volatile用于防止指令被优化掉,"svc 1"定义了我们要执行的指令为1号,输出参数表中的"=r"指定了输出为寄存器后面的(__r0)则指定了具体的C语言变量;输入参数列表中"r"(__r0)指定输入的是寄存器类型的C语言变量__r0,破坏寄存器列表中"cc"告诉编译器,条件寄存器可能会被更改,"memory"告诉编译器内存可能会更改。最后返回__r0完成调用。
多参数的情况
多参数时参数按r0-r3的顺序往下排,不要超过4个,举个栗子:
__attribute__((always_inline)) static inline void* sys_malloc(size_t want_size){
        register size_t __r0 __asm("r0") = (size_t)want_size;
        __asm volatile ("svc 1":"=r"(__r0):"r"(__r0):"cc","memory");
        return (void*)__r0;
}

__attribute__((always_inline)) static inline void*sys_realloc(void* src_addr,size_t want_size){
        register size_t __r0 __asm("r0") = (size_t)src_addr;
        register size_t __r1 __asm("r1") = (size_t)want_size;
        __asm volatile ("svc 2":"=r"(__r0):"r"(__r0),"r"(__r1):"cc","memory");
        return (void*)__r0;
}

__attribute__((always_inline)) static inline void* sys_aligend_alloc(size_t align_byte,size_t want_size){
        register size_t __r0 __asm("r0") = (size_t)align_byte;
        register size_t __r1 __asm("r1") = (size_t)want_size;
        __asm volatile ("svc 3":"=r"(__r0):"r"(__r0),"r"(__r1):"cc","memory");
        return (void*)__r0;
}

__attribute__((always_inline)) static inline void sys_free(void* addr){
        register size_t __r0 __asm("r0") = (size_t)addr;
        __asm volatile ("svc 4"::"r"(__r0):"cc","memory");
}

__attribute__((always_inline)) static inline size_t sys_get_heap_size(void){
        register size_t __r0 __asm("r0");
        __asm volatile ("svc 5":"=r"(__r0)::"cc","memory");
        return (size_t)__r0;
}

__attribute__((always_inline)) static inline size_t sys_get_remain_size(void){
        register size_t __r0 __asm("r0");
        __asm volatile ("svc 6":"=r"(__r0)::"cc","memory");
        return (size_t)__r0;
}至此,我们就可以愉快的使用自定义的svc函数啦


eric2013 发表于 2021-9-4 09:17:46

谢谢楼主分享。

无关风月 发表于 2021-9-8 09:18:52

很赞

WZH 发表于 2021-9-11 13:01:51

无关风月 发表于 2021-9-8 09:18
很赞

:handshake

WZH 发表于 2021-9-11 13:02:08

eric2013 发表于 2021-9-4 09:17
谢谢楼主分享。

:handshake
页: [1]
查看完整版本: RTX5系统下自定义SVC函数的方法