在ARM Cortex-A9上移植AUTOSAR。
任务切换是移植工作的核心内容,在理解OSEK任务调度机制的基础上,分析目标平台中需要保存的上下文内容和任务返回方法。任务调度包含三个部分:1.保存上文;2.选择下一个执行的任务(任务初始化);3.恢复下文。根据是否保存上文和恢复下文,任务切换分为四种不同的调度方法;
调度方式 | 保存旧任务的上下文 | 恢复新任务的上下文 |
---|---|---|
OSTaskRun | 否 | 否 |
OSTaskSaveRun | 是 | 否 |
OSTaskLoadRun | 否 | 是 |
OSTaskSaveLoadRun | 是 | 是 |
- OSTaskRun:启动一个新任务,并不保存旧任务的上下文。以下情况会调用:
系统启动后执行的第一个任务,新启动的任务也不需要装载任务的上下文,因为是新任务,上下文从未被保存过(OSStartFirstTask);
当前任务自结束,调度下一个新任务(TerminateTask)。
如下图,从OsTask_3切换到OsTask_1,OsTask_3执行结束,且OsTask_1是新任务不需要恢复上下文,任务切换分两步:
新任务初始化:切换CPU运行模式,把新任务的堆栈指针指向OsTask_1函数的起始位置,R0~R12/R14寄存器初始化;