__svc_indirect关键字

本文详细解释了ARM Cortex-M3中断处理函数svc_indirect的使用方式,包括svc_num、real_num、return-type参数的作用及示例应用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

2013-11-04
--luoqindong 
__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参数需要从栈中取出.
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值