打印
[其它产品/技术]

英飞凌AURIX 2G芯片的系统调用

[复制链接]
305|1
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
yujielun|  楼主 | 2023-11-13 22:00 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
系统调用介绍
英飞凌的AURIX 2G芯片有8类trap(Class0-7),一般而言是出现错误了会触发相应的trap。但是Class6-System Call(系统调用)这个类型的trap比较特殊,它并不是在系统出现错误时触发的,而是软件中使用SYSCALL指令触发的。

Trap类型(上)
trap类型(下)
使用系统调用的目的是进入supervisor mode以获得更高等级的权限,如下图所示。

进入trap时芯片的状态
系统调用的服务函数可以拥有输入参数和返回值,而其他类型trap的服务函数不能有输入参数和返回值。

Tasking编译器中对于系统调用的描述
使用Tasking编译器时,需要使用修饰符__syscallfunc(TIN)来声明系统调用的服务函数,TIN可以使用的范围是0~255。Tasking手册中给出的示例如下图。

系统调用服务函数示例系统调用在MICROSAR软件中的应用Application的特权等级
在DaVinci工具中可以配置每个Application运行在supervisor mode还是user mode,如下图所示。

配置项:ApplicationIsPrivileged
如下图所示,ApplicationIsPrivileged配置为true的Applicaiton拥有的所有task的上下文配置中ProgramStatus内的模式配置都为supervisor;ApplicationIsPrivileged配置为false的Applicaiton拥有的所有task的上下文配置中ProgramStatus内的模式配置都为user。

配置项ApplicationIsPrivileged对应的C代码
如下图所示,运行在user mode的task权限比较低,当需要访问一些受保护的内存或外设时需要使用系统调用来临时获得特权。

不同的特权等级系统调用接口
MICROSAR中定义的系统调用接口为Os_Hal_Trap,其定义如下图所示。代码中调用Os_Hal_Trap后会立即跳转到当前核trap向量表中系统调用对应的向量。使用的TIN固定为31,其它TIN都是无效的,会导致软件进入死循环。

Os_Hal_Trap的定义
如下图所示,核0的中断向量表中SysCall对应的向量为Os_Hal_SysCallTrapEntry,

核0的中断向量表
系统调用的入口
进入系统调用的中断向量后会调用Os_Hal_SysCall,而后调用Os_TrapHandler。

Os_TrapHandler
函数Os_TrapHandler中会根据TrapId调用对应的接口。MICROSAR软件中支持的TrapId有117个,包括获取COREID、开关中断、激活task等操作。

Os_TrapHandler代码节选
Os_TrapIdType定义节选

使用特权

评论回复
沙发
laocuo1142| | 2023-11-14 09:39 | 只看该作者
英飞凌的AURIX 2G芯片有8类trap(Class0-7),一般而言是出现错误时触发相应的trap。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

6

主题

3002

帖子

3

粉丝