代码拉取完成,页面将自动刷新
同步操作将从 jiangxiaogang/KLite 强制同步,此操作会覆盖自 Fork 仓库以来所做的任何修改,且无法恢复!!!
确定后同步将在后台操作,完成时将刷新页面,请耐心等待。
KLite 移植说明文件 V1.0
KLite是一个“简洁易用”的嵌入式操作系统微内核
目前支持Cortex-M0/M3/M4构架
目前支持Keil/IAR/gcc编译器
一.普通移植
普通移植是指在KLite已经支持的CPU架构(如Cortex-M0,M3,M4)上进行移植,
这种情况的移植工作非常简单,只需要修改源码cpu.c即可,对于其它文件请
不要修改。
对于cpu.c主要实现以下几个函数:
1.void cpu_init(void)
作用:初始化目标CPU的系统时钟
说明:此函数必须在kernel_init()之前手动调用,建议放在startup.s执行
2.void cpu_core_init(void)
作用:初始化内核用到的中断
说明:此函数在kernel_init()函数内部调用
3.void cpu_tick_init(void)
作用:初始化系统滴答定时器,通常为1ms
说明:此函数在kernel_start()函数内部调用
4.void cpu_idle(void)
作用:完成一些省电操作
说明:此函数在kernel空闲时由系统调用
二.完全移植
完全移植是指在KLite目前不支持的CPU架构(如ARM7,ARM9)上进行移植,
这种情况的移植难度比较大,需要修改cpu_core_xxx.s和cpu.c。
对于cpu_core_xxx.s文件需要实现以下功能:
1.中断管理
void cpu_irq_disable(void) //作用:关闭CPU中断
void cpu_irq_enable(void) //作用:开启CPU中断
2.线程堆栈管理
void cpu_tcb_init(struct tcb* tcb, uint32_t sp_min, uint32_t sp_max)
作用:初始化线程堆栈
说明:tcp为目标线程上下文指针,sp_min和sp_max为堆栈指针的最大值和最小值,
请根据目标CPU平台的堆栈增长方向决定目标TCB中的sp成员值,
并初始化堆栈中的:
PC=tcb->main (线程入口函数)
R0=tcb->arg (线程入口函数参数)
LR=kthread_exit(线程退出)
void cpu_tcb_switch(void)
作用:任务上下文切换
说明:全局变量kern_tcb_now为当前运行中的任务上下文指针
全局变量kern_tcb_new为即将切换到的任务上下文指针
a.将当前CPU运行相关的寄存器压入kern_tcb_now->sp指向的堆栈中
b.从kern_tcb_new->sp指向的堆栈中弹出CPU运行相关的寄存器
c.标记kern_tcb_new->state为运行状态,并将kern_tcb_now的值修改为kern_tcb_new
3.提供内核时钟
在目标CPU平台实现1个1ms中断的定时器,并在中断函数中调用kernel_tick()函数
对于cpu.c的修改,请参照前面的“普通移植”即可。
三.开源
如果你完成了一项完全移植,非常希望你能提交到我的码云git
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。