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
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 吃鸡更新成雨林如果内存不够怎么办 绝地求生刺激战场背包满了怎么办 绝地求生刺激战场模拟器满了怎么办 绝地求生刺激战场电脑版满了怎么办 绝地求生手游模拟器注册上限怎么办 绝地求生电脑模拟器已达上限怎么办 三星s5锁屏密码忘了怎么办 字画装框的时候起褶皱怎么办 指甲油抹在手上不在指甲上怎么办 我把油画的布割破了怎么办 胜战本领怎么看、走上战场怎么办 胜战本领怎么看 走上战场怎么办 数码相机拍出的相片亮度太亮怎么办 国考照片错了怎么办招生办能改吗 国考英语准考证名字错了怎么办 玻尿酸打鼻子双眼间距好怪怎么办 喝咖啡后胃不舒服想吐怎么办 分期付款买的车不想还款了怎么办 考试时打小抄被同学发现怎么办 生完二胎计生办强制要求上环怎么办 没办二代身份证户口被注销怎么办 川航特价儿童票名字写错怎么办 川航机票名字错一个字怎么办 买飞机票名字打错了一个字怎么办 坐飞机耳朵聋了下飞机还痛怎么办 小孩咳嗽两个月了还不好怎么办 生完小孩肚子瘦不下来怎么办 胆子小一个人在家里都害怕怎么办 怀了双胞胎两个宝宝很挤怎么办 飞机无人陪护如果接机延误该怎么办 过年要坐火车回家 狗狗怎么办 一岁八个月宝宝小腿弯怎么办 2岁宝不愿意坐马桶拉屎怎么办 宝宝两岁多肺炎出院还老咳嗽怎么办 去外国机场买机票不会说外语怎么办 坐飞机不能带的物品办理托运怎么办 深圳外地户口儿童要办身份证怎么办 网上订票错写了护照号怎么办 国航 在智能火车票订飞机票订反了怎么办 办社保卡的时候填错地址怎么办 两个人住酒店只有一张身份证怎么办