UcosII移植之os_cpu_c.c详解
来源:互联网 发布:js监听视频播放状态 编辑:程序博客网 时间:2024/05/16 17:02
该文件主要包括一些钩子函数,以及任务堆栈初始化函数,通常ucosII只会调用任务堆栈初始化函数OSTaskStkInit,其他的钩子函数留由用户扩展程序功能使用。
钩子函数主要用于系统初始化,与任务相关等。如系统初始化OSInitHookBegin(),创建任务时OSTaskCreateHook
一 系统滴答OS_CPU_SysTickHandler
由于我们使用ST库里面的SysTick系统滴答函数接口,因此一般屏蔽掉这里的systick相关的定义
OSInitHookbegin
这个函数被OSInit()开头调用
OSTaskStkInit:
初始化任务堆栈是为任务切换服务的。当中断发生,原来函数执行的地方(程序计数器PC,处理器状态寄存器及通用寄存器)被保存到栈里,然后开始取中断向量,跑到中断函数里执行。执行完,把栈中保存的原来函数执行信息恢复即可。OSTaskStkInit被任务创建函数调用,在开始时,在栈中做出该任务被中断的假象。因此OSTaskStkInit的工作就是在任务自己的栈中保存cpu所有的寄存器
函数有多个输入参数,返回堆栈指针
输入参数task:执行任务代码的指针
输入参数p_arg:用户输入参数数据块指针
输入参数ptos:栈顶指针,指向堆栈顶
输入参数opt:控制选型,本函数不使用
xPSR=0x01000000L,xPSR T位置1(24位),否则第一次执行任务Fault
PC指向任务入口
R14最低四位为E,主要目的是不让使用R14
函数在任务创建时初始化任务堆栈由于需要输入用户参数,因此寄存器R0用来传递输入用户参数p_arg,由于任务初始运行时,其对应的cpu寄存器值不重要,为了调试方便,移植时对堆栈中各个cpu寄存器赋予的初值为寄存器号。
CM3内核使用了一种满级递减的堆栈操作模式,即初始堆栈为高地址处,随着堆栈的使用,堆栈指针移向低地址处。Ptos指向任务堆栈的栈顶,而stk指向当前堆栈的使用位置处。
0 0
- UcosII移植之os_cpu_c.c详解
- vs2008_ucos\uCOSII_port\os_cpu_c.c[part2] 移植ucosii在VS2008--part3
- vs2008_ucos\uCOSII_port\os_cpu_c.c[part3] 移植ucosii在VS2008--part4
- lpc1788_ucos\uCOSII_cpu\os_cpu_c.c --ucosii移植在lpc1788--part5
- vs2008_ucos\uCOSII_port\os_cfg.h os_cpu.h os_cpu_c.c[part1]--移植ucosii在VS2008--part2
- UCOS移植代码之LAMMY分析--OS_CPU_C.C
- UCOS移植代码之LAMMY分析--OS_CPU_C.C
- UCosII移植之OS_CPU.H详解
- UcosII移植之os_cfg.h详解
- UCOS-II移植 配置文件os_cpu_c.c
- UcosII移植之Stm32f107
- OS_CPU_C.C
- OS_CPU_C.C
- os_cpu_c.c
- os_cpu_c.c
- stm32 之 ucosii移植 手记
- UCOS-II在LPC2210上的移植--os_cpu_c.c
- ucosii在stm32上的移植详解
- 不带表头节点的单链表编程(1)
- SimpleDateFormat的线程安全性
- JS干货--对象字面量
- 洛谷【P2194】HXY烧情侣
- libevent 获取多线程结构体变量加锁方法
- UcosII移植之os_cpu_c.c详解
- android下RSA数据加密
- Zepto源码解读
- MySQL时区设置
- 栈增长方向和大端、小端问题
- 如何在windows系统上安装ubuntu双系统
- SSM搭建-Spring mvc对于静态资源的访问(14)
- java数组的12个方法
- Android Studio如何引入so,jar文件