Cortex-M3利用SVC中断调用系统服务的例子

SVC(系统服务调用,亦简称系统调用)和PendSV(可悬起系统调用),它们多用在上了操作系统的软件开发中。SVC用于产生系统函数的调用请求。例如,操作系统通常不让用户程序直接访问硬件,而是通过提供一些系统服务函数,让用户程序使用SVC发出对系统服务函数的呼叫请求,以这种方法调用它们来间接访问硬件。因此,当用户程序想要控制特定的硬件时,它就要产生一个SVC异常,然后操作系统提供的SVC异常服务例程得到执行,它再调用相关的操作系统函数,后者完成用户程序请求的服务。

下面的代码是利用SVC异常来请求系统服务的例子,这个例子仅适用于MDK ARM Compiler 5,在ARM Compiler 6里取消了__svc()这个关键字,需要用户自己实现

__svc(4) uint32_t svc_service_add(uint32_t x, uint32_t y);    //__svc是编译器关键字,编译器会插入svc指令,触发svc异常
__svc(5) uint32_t svc_service_sub(uint32_t x, uint32_t y);

void SVC_Handler_C(uint32_t* svc_args)           //这里的svc_args是栈指针SP的值
{
    uint32_t svc_number;
    
    svc_number = ((uint8_t*)svc_args[6])[-2];    //svc_args[6]是栈里保存的PC值,倒数2字节,得到svc编号
    
    switch(svc_number)                           //根据svc编号执行需要的功能
    {
        case 4:
            svc_args[0] = svc_args[0] + svc_args[1];
            break;
        case 5:
            svc_args[0] = svc_args[0] - svc_args[1];
            break;
        default:
          
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值