UcosII移植之os_cpu_c.c详解

该文件主要包括一些钩子函数,以及任务堆栈初始化函数,通常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指向当前堆栈的使用位置处。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值