你将收获

1、系统地掌握RTOS的工作原理及其应用; 2、用更短的时间、更少的精力,学习RTOS相关知识; 3、设计出一个具备自己特色的RTOS。将其用作毕业设计、找工作的敲门砖; 4、提升技术水平,为升职加薪跳槽提供资本。

适用人群

所有人

课程介绍

这不是rtos源码分析的课程,而是为初级的同学设计,从基础原理讲师,一步步不断迭代设计rtos的课程! 用不到【2000行代码,汇编代码仅18行】(不含注释)实现一个精巧的可以运行在ARM Cortex-M内核芯片上的RTOS! 该RTOS功能与ucos类似,具体实现不同。学习之后,再去学习ucos之类的系统将没有什么问题。

课程目录

讨论留言

正在加载中...

同学笔记

  • qq_35217385 2021-01-16 16:56:25

    来源:C2.02 任务切换的实现 查看详情

     

    解决了栈冲突的问题:为每个任务独立分配栈

    在发生异常的时候:

    CPU会自动保存 xPSR,PC(R15),LR(R14),R12,R0~R3到栈中,该栈是独立的话就不会冲突

    在退出异常的时候:

    CPU会自动弹栈 xPSR,PC(R15),LR(R14),R12,R0~R3到栈中,该栈是独立的话就不会冲突

    解决>>建立一个独立的栈就好了

    我们如何切换栈呢?

    修改R13就好了

    解决内核寄存器的冲突:出现两个冲突,第一个是当前的任务寄存器的值,第二个是需要切换的任务寄存器的值

    CPU只为我们保存了xPSR [R0,R1,R2,R3,R12,R14(LR),R15(PC)]

    还有 [R4~R11,R13]没有被保存

    R13为栈指针寄存:我们通过修改R13便可以更改当前的任务栈,所以不需要保存R13的值

    那么只需要手动保存 [R4~R11]就好了

    解决冲突1

    保存当前的[R4-R11]

    解决冲突2

    恢复正要切换的任务的[R4-R11]

    注意切换的时候要先把栈指针恢复再切换

    1.  

没有更多了