文章目录
- 前言
- OS Port的安装
- Port Characteristics
- Parameters of Implementation
- Configuration Parameters
- Stack used for C-startup(SpPreStartOS)
- Stack used when idle (SpStartOS)
- Stack overheads for ISR activation (SpIDisp)
- Stack overheads for ECC tasks (SpECC)
- Stack overheads for ISR (SpPreemption)
- Orti22/Lauterbach (Orti22Lauterbach)
- Orti23/Lauterbach (Orti23Lauterbach)
- Physical Core Assignment
- SEMA42 Gate
- Block default interrupt (AlignUntrustedStacks)
- Enable stack repositioning
- Enable untrusted stack check (DistrustStacks)
- No fast compile (no_fast_compile)
- Reset Stack Pointer (boot_sp)
- Reset Address (boot_pc)
- Handle FPU context (handle_FPU_context)
- Generated Files
- 总结
前言
之前使用S32K324双核的OS,生成的lib集成后一直进os shutdown,生成源码后看是在startos时XRDC验证失败导致。目前的处理方法是暂时屏蔽了。本文学习Port Guide文件,里面也描述了这部分的内容。
OS Port的安装
RTA-OS对于不同大类的MCU,提供了对应的OS插件,如果要配置对应的OS,需要安装对应的插件,且安装目录是有要求的,否则会导致isolar工程识别不到。
需要将Port安装到RTA-CAR对应RTA OS的目录下,示例如下:
正常安装好之后,可以选择对应的芯片的OS,如下图所示:
也可以使用cmd指令:查看os支持的target:
在os目录下执行:rtaosgen --target:?
查询结果如下:
Port Characteristics
本节介绍该OS port的特性
Parameters of Implementation
下表列出了OSEK标准需求的最小值,以及RTA-OS支持的最大值
Configuration Parameters
在Target中,对于该OS有一些特殊的配置,如下所示
Stack used for C-startup(SpPreStartOS)
调用StartOS()时已经使用的堆栈量。这个值只是添加到操作系统在运行时支持所有任务和中断所需的总堆栈大小上。通常,您使用它来获取链接器必须分配的堆栈量。如果操作系统配置发生变化,该值通常不会改变。
该值可以在start os之前打断点看堆栈的使用量。目前没有配置,也没啥影响
Stack used when idle (SpStartOS)
当操作系统处于空闲状态时(通常在Os_Cbk_Idle()内)使用的堆栈量。这只是调用Os_StartOS()时使用的堆栈与没有任务或中断运行时使用的堆栈之间的差异。如果没有使用Os_Cbk_Idle(),这个值可以为零。它必须包括在空闲状态下调用的任何函数所使用的堆栈。如果操作系统配置发生变化,该值通常不会改变。
该值不一定是定值,如果要填,可以测一下之后填大点,实际不填也没啥影响
Stack overheads for ISR activation (SpIDisp)
从ISR内激活任务所需的额外堆栈量。如果在2类中断中激活了一个任务,并且该任务的优先级高于当前正在运行的任何任务,那么对于某些目标,操作系统可能需要使用比激活优先级较低的任务更多的堆栈。这个值说明了这一点。在大多数目标上,这个值为零。此值用于最坏情况下的堆栈大小计算。当操作系统配置发生重大变化时,该值可能会发生变化。例如标准/扩展,SC1/2/3/4。
目前2类中断需要的堆栈没有配置
Stack overheads for ECC tasks (SpECC)
启动ECC任务所需的额外堆栈量。目前没有配置
Stack overheads for ISR (SpPreemption)
用于服务二类ISR的堆栈数量。目前没有配置
Orti22/Lauterbach (Orti22Lauterbach)
用于生成ORTI 2.2的文件,应该是trace功能用的
Orti23/Lauterbach (Orti23Lauterbach)
用于生成ORTI 2.3的文件,应该是trace功能用的
Physical Core Assignment
配置核的数字,多个核以逗号隔开此处配置为0,1
SEMA42 Gate
选择操作系统应该使用SEMA42外设中的哪个 gate进行跨核锁定。仅用于多核配置。默认是使用gate 0。
Block default interrupt (AlignUntrustedStacks)
如果指定了默认中断,它通常会在意外中断触发时执行。您可以使用此选项阻止此行为。该选项影响未使用的中断源的启用。默认为false
Enable stack repositioning
当存在MPU保护区域粒度问题时,用于支持对不受信任代码的堆栈进行重新排列。参考文档Os_Cbk_SetMemoryAccess。默认为false
Enable untrusted stack check (DistrustStacks)
可以在中断处理程序中放置额外的代码来检测不受信任的代码何时具有非法的堆栈指针值。此外,异常处理程序可以在私有堆栈上运行(参见Os_Cbk_GetAbortStack的文档)。这有一个小的性能开销,所以是可选的。默认为false
No fast compile (no_fast_compile)
默认情况下,RTA-OS将使用多个CPU线程编译RTA-OS库,以减少总体构建时间。默认为false,相当于make中的-j
Reset Stack Pointer (boot_sp)
配置栈顶指针,此处只能配置一个核的,配置为__Stack_start_c0,按道理两个核的栈顶指针是不一样的。此处无法配置两个。后面还会介绍栈的使用
Reset Address (boot_pc)
配置复位向量,此处配置为Reset_Handler
Handle FPU context (handle_FPU_context)
可以在上下文切换期间添加额外的代码,以保留任务和isr使用的浮点寄存器。只有当应用程序中的大多数任务和isr包含FPU指令时才应该使用此选项,否则寄存器设置机制可能更有效。这种机制不使用延迟保存FPU状态。默认为false,不保存FPU上下文
Generated Files
正常情况,OS不会生成源码,而是生成lib文件。
主要的lib为RTAOS.a
总结
上述配置只使用了一部分,很多都是按默认配置的,比较关键的就是boot_pc,boot_sp,PhysicalCoreAssignment,下一篇介绍API函数