uC OSIII port
来源:互联网 发布:网络攻防大赛 常见思路 编辑:程序博客网 时间:2024/06/05 17:51
os_cpu.h :
OS_TASK_SW()、OSIntCtxSw()任务切换宏声明、OSStartHighRdy()、OS_SysTick相关方法声明。
OS_CPU_CFG_SYSTICK_PRIO:设置SysTick的中断优先级 中断优先级只有高四位有效
OS_CPU_ExceptStkBase:MSP中断使用的堆栈地址
os_cpu_a.asm :PendSV_Handler()、OSStartHighRdy()的汇编实现。
;;OSStartHighRdy
;设置PendSV 中断优先级NVIC_PENDSV_PRI 只有高4位有效
;设置PSP堆栈地址为0 标志为第一次上下文切换
;设置MSP堆栈地址为OS_CPU_ExceptStkBase
;触发PendSV中断
;开启中断
;;
;;PendSV_Handler
;在进入PendSV中断处理函数时
;xPSR, PC, LR, R12, R0-R3已经被保存到PSP中
;处理器模式从Tread切换到Handler模式
;堆栈为MSP
;OSTCBCurPtr 指向要挂起的任务TCB
;OSTCBHighRdyPtr 指向要恢复的任务的TCB
;;
;;
;关中断
;查看PSP是否为0 为0表示第一次上下文切换 跳过压栈R4-R11保存PSP到TCB
;压栈R4-R11 (8个寄存器) 0x20=0x04*8
;将PSP保存到当前任务的TCB中 OSTCBCurPtr->OSTCBStkPtr = SP;
;调用OSTaskSwHook();
;设置当前最高优先级 OSPrioCur = OSPrioHighRdy;
;设置要切入的TCB OSTCBCurPtr = OSTCBHighRdyPtr;
;从TCB中得到PSP的值 PSP = OSTCBHighRdyPtr->OSTCBStkPtr;
;出栈R4-R11
;设置LR为0xFFFFFFFD 确保中断返回后使用PSP 0xFFFFFFF9~使用MSP
;开中断
;;
os_cpu_c.c :移植需要的:系统调用的钩子函数、创建任务时对堆栈格式的初始化,SysTick的初始化和中断处理。
OS***Hook()为系统调用的钩子函数,在钩子函数中调用用户的实现
在调用OSInit()时初始化所有的OS_App***Ptr为null 如果实现了OS_App***Ptr对应的钩子函数需要在OSInit()调用之后设置其值
在OSIdleTaskHook()中可以将MCU设置为低功耗
在OSInitHook()设置中断使用的堆栈的地址OS_CPU_ExceptStkBase 在os_cpu_a.asm中OSStartHighRdy()使用
OS_CPU_SysTickHandler():Sys Tick的中断处理函数 调用OSTimeTick()
OS_CPU_SysTickInit(cnts):必须在OSStart() 硬件初始化完成之后调用
根据OS_CPU_CFG_SYSTICK_PRIO 设置SysTick 的中断优先级 中断优先级只有高四位有效,使用的时钟源可以是AHB/8、AHB
0 0
- uC OSIII port
- uc/OSIII 任务使用
- uC/OSIII时钟节拍处理过程
- uC/OSIII的消息队列处理机制
- uC/OSIII时钟节拍处理过程
- uC/OSIII学习笔记(一)消息传递
- uC CPU port
- uC/OSIII时钟节拍处理过程,尤其是调度的过程!
- uC/OSIII在Cortex-M3的任务切换和中断退出分析
- uC/OSIII在Cortex-M3的任务切换和中断退出分析
- uC/OS-II - Port for the LINUX Operating System
- osiii的调度点
- osiii运行状态图
- UC
- UC
- port
- port
- port
- iOS中Container View Controller的使用
- map & keep & map-indexed & keep-indexed
- 303. Range Sum Query - Immutable
- 骨骼蒙皮动画(SkinnedMesh Animation)的实现
- C++对C的增强
- uC OSIII port
- Vim使用技巧——基础
- Const和#define
- 发现一本linux相关书籍,电子书,特地分享出来
- uC CPU port
- C++引用
- 深入浅出-iOS Block原理和内存中位置
- 【转载】优先队列详解
- 15-题目1432:叠筐