推荐的移植步骤
第一步:先让工程能编译通过
- 建立新的
libcpu/<arch>/port_<compiler>.c/.s - 修改构建系统,使其能编译进工程
- 先把
portable.h中接口全部实现出来,即使一开始只是最小空实现
第二步:实现中断开关接口
优先完成:
yr_irq_disable()yr_irq_enable()
因为后续任务、调度器、定时器很多逻辑都依赖临界区保护。
第三步:实现 yr_find_first_set()
这个接口通常很简单,优先做掉,方便调度器先跑通。
第四步:实现任务栈初始化
完成:
yr_task_stack_init()
并重点确认:
- 参数是否正确进入任务入口
- 栈对齐是否满足 ABI 要求
- 任务返回路径是否能落到
__task_exit
第五步:实现普通任务切换
完成:
yr_task_switch()- 对应的异常/汇编切换处理逻辑
目标是让任务之间可以正常切换。
第六步:实现首任务启动
完成:
yr_task_first_switch_to()
目标是让 yr_kernel_start() 能真正切进第一个任务。
第七步:接入 tick 中断
在定时中断里调用:
c
yr_tick_update();目标是让:
yr_task_sleep_ticks()yr_task_sleep_until()- 软件定时器
- 时间片轮转
全部工作起来。