问题描述
我正在尝试围绕RTOS提供的功能创建包装器功能。在包装函数中,我使用内联汇编来调用软件中断指令(SVC),以便处理器跳转到SWI处理程序,该处理程序首先提取SWI编号,然后使用该编号索引到SWI表中,从而进一步调用实际的OS功能。
包装器函数的原型与OS函数完全相同,因此传递给包装器函数的所有参数都以完全相同的顺序转发到OS函数。当函数的参数小于或等于四个且因此通过寄存器R0-R3传递时,这一切都很简单。像这样的东西:
std::uint32_t wrapper_function(std::uint32_t a1,std::uint32_t a2,std::uint32_t a3,std::uint32_t a4)
{
std::uint32_t ret {};
__asm volatile(
"SVC 0x05"
: "=r" (ret)
: "r" (a1),"r" (a2),"r" (a3),"r" (a4)
: "r14");
return ret;
}
但是,如果函数有四个以上的参数,并且由于第四个参数之后的所有参数都通过堆栈传递,那么如何转发这些参数?
我正在使用ARM Compiler 6.6(ARM Clang 6.6),并且正在使用的系统具有ARM Cortex R5处理器。
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)