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指向当前堆栈的使用位置处。
  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
gui_x_ucosii.c是一个使用uC/OS-II实现的GUI驱动文件。在嵌入式系统中,GUI(图形用户界面)用于实现用户交互和图形显示,并且需要与操作系统进行良好的集成。 这个驱动文件的作用是将GUI与uC/OS-II操作系统进行整合和协调。它提供了一系列的函数和接口,用于在uC/OS-II环境下实现GUI的初始化、操作和事件处理等功能。 该文件主要包含以下几个重要的函数: 1. GUI_X_Init():该函数用于初始化GUI驱动。在uC/OS-II中,它会创建一个用于GUI任务的操作系统任务,并为任务分配堆栈和优先级等资源。 2. GUI_X_ExecIdle():该函数用于执行GUI的空闲处理。在uC/OS-II中,当没有其他任务可以执行时,系统会调用此函数。在该函数中,可以执行一些无关紧要的图形操作,如屏幕保护等。 3. GUI_X_GetTaskId():该函数用于获取当前任务的ID。在uC/OS-II中,每个任务都有一个唯一的ID,通过该函数可以获取当前GUI任务的ID。 4. GUI_X_WaitEvent():该函数用于等待GUI事件的发生。在uC/OS-II中,任务可以通过事件标志或消息队列等方式等待事件的发生,而GUI任务通常会使用此函数来等待鼠标点击、键盘输入等事件的发生。 通过这些函数和接口,gui_x_ucosii.c文件实现了GUI驱动与uC/OS-II操作系统的良好集成,使得我们可以在uC/OS-II环境下方便地开发和使用GUI功能。它为我们提供了一种简单、高效的方式来实现嵌入式系统中的图形界面。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值