任务堆栈的作用

应用程序在创建一个新任务的时候,必须把在系统启动这个任务时 CPU 各寄存器所需要的初始数据(任务指针、任务堆栈指针、程序状态字等等),事先存放在任务的堆栈中,以备任务切换等操作时调用。

初始化函数的调用

μC/OS-II 是在创建任务函数 OSTaskCreate( ) 中通过调用任务堆栈初始化函数 OSTaskStkInit( ) 来完成任务堆栈初始化工作的。

它的原型如下:

  1. OS_STK *OSTaskStkInit(
  2. void (*task)(void *pd),
  3. void *pdato,
  4. OS_STK *ptos,
  5. INT16U opt
  6. );

由于各种处理器的寄存器及对堆栈的操作方式不尽相同,因此该函数需要用户在进行 μC/OS-II 的移植时,需按所使用的处理器由用户来编写。

以 S3c2440 处理器的堆栈初始化函数为例:

  1. OS_STK *OSTaskStkInit (void (*task)(void *pd), void *p_arg, OS_STK *ptos, INT16U opt)
  2. {
  3. OS_STK *stk;
  4. opt = opt; /* 'opt' is not used, prevent warning */
  5. stk = ptos; /* Load stack pointer */
  6. *(stk) = (OS_STK)task; /* Entry Point */
  7. *(--stk) = (INT32U)0; /* LR */
  8. *(--stk) = (INT32U)0; /* R12 */
  9. *(--stk) = (INT32U)0; /* R11 */
  10. *(--stk) = (INT32U)0; /* R10 */
  11. *(--stk) = (INT32U)0; /* R9 */
  12. *(--stk) = (INT32U)0; /* R8 */
  13. *(--stk) = (INT32U)0; /* R7 */
  14. *(--stk) = (INT32U)0; /* R6 */
  15. *(--stk) = (INT32U)0; /* R5 */
  16. *(--stk) = (INT32U)0; /* R4 */
  17. *(--stk) = (INT32U)0; /* R3 */
  18. *(--stk) = (INT32U)0; /* R2 */
  19. *(--stk) = (INT32U)0; /* R1 */
  20. *(--stk) = (INT32U)p_arg; /* R0 : argument */
  21. *(--stk) = (INT32U)0x00000053L; /* CPSR (SVC mode, Enable only IRQ disable FIQ ) */
  22. return (stk);
  23. }

μC/OS-II 任务堆栈的初始化的更多相关文章

  1. uC/OS II原理分析及源码阅读(一)

    uC/OS II(Micro Control Operation System Two)是一个可以基于ROM运行的.可裁减的.抢占式.实时多任务内核,具有高度可移植性,特别适合于微处理器和控制器,是和 ...

  2. 【原创】uC/OS II 任务切换原理

    今天学习了uC/OS II的任务切换,知道要实现任务的切换,要将原先任务的寄存器压入任务堆栈,再将新任务中任务堆栈的寄存器内容弹出到CPU的寄存器,其中的CS.IP寄存器没有出栈和入栈指令,所以只能引 ...

  3. 【小梅哥SOPC学习笔记】NIOS II处理器运行UC/OS II

    SOPC开发流程之NIOS II 处理器运行 UC/OS II 这里以在芯航线FPGA学习套件的核心板上搭建 NIOS II 软核并运行 UCOS II操作系统为例介绍SOPC的开发流程. 第一步:建 ...

  4. uC/OS II 函数说明 之–OSTaskCreate()与OSTaskCreateExt()

    1. OSTaskCreate()    OSTaskCreate()建立一个新任务,能够在多任务环境启动之前,或者执行任务中建立任务.注意,ISR中禁止建立任务,一个任务必须为无限循环结构.    ...

  5. Mac OS mysql数据库安装与初始化

    一.官网下载mysql 二.安装并启用 三.数据库初始化 192:bin zhuyajing$ ./mysql -u root -p Enter password: Welcome to the My ...

  6. cent os 安装mariaDB / mySQL 之后初始化的命令

      #安装mysql mysql-server,默认安装的是开源的mariaDB和它的server,mariadb-server,安装源中可能有找不到的,就换个名字再找找 yum install -y ...

  7. uc/os iii移植到STM32F4---IAR开发环境

    也许是先入为主的原因,时钟用不惯Keil环境,大多数的教程都是拿keil写的,尝试将官方的uc/os iii 移植到IAR环境. 1.首先尝试从官网上下载的官方移植的代码,编译通过,但是执行会报堆栈溢 ...

  8. (转)UCOSII在任务切换与出入中断时堆栈指针的使用

    1 uc/os ii在M3中的堆栈结构 1.1 M3入账序列  1.2 加上手工入栈序列  2 PendSV在Cortex-M3中的应用 Systick为嵌入到内核中,优先级比一般中断优先级高.若在一 ...

  9. ucos ii 百度官方介绍

          μC/OS II(Micro-Controller Operating System Two)是一个可以基于ROM运行的.可裁剪的.抢占式.实时多任务内核,具有高度可移植性,特别适合于微处 ...

随机推荐

  1. data science学习笔记1

    Mutiple Plots on One Graph plt.plot(x, norm.pdf(x)) plt.plot(x, norm.pdf(x, 1.0, 0.2)) #1.0 = mean, ...

  2. 关于QList<T>的内存释放

    当T为指针类型时,List.clear()不能释放其内存,需加上qDeleteAll()函数, //class Person ---> Person(int id_,QString name_) ...

  3. Ajax获取Json多个集合并同时遍历

    Ajax获取Json多个集合并同时遍历: 方法一.:将多个集合放入MAP集合. 后台:Servlet @Override protected void doPost(HttpServletReques ...

  4. Python 递归 Resursion()

    条件: ①递归有最小值或有确定值 ②fun(x) = ax * bfun(x-1) 类似规则 eg.   n! : ①1! = 1 ②n! = n* (n-1)! def factorial (n): ...

  5. ansible 关闭ssh首次连接时提示

    关闭ssh首次连接时提示. 修改/etc/ansible/ansible.cfg配置文件 方法一:(推荐,配置文件中存在) host_key_checking = False 方法二: ssh_arg ...

  6. day19_雷神_django第二天

    django_day02 Django的路由系统 URL配置(URLconf)就像Django所支撑网站的目录.它的本质是URL与要为该URL调用的视图函数之间的映射表. 1.URLconf配置 基本 ...

  7. Java编程实现多线程TCP服务器完整实例

    Socket ·功能:TCP客户端套接字 ·构造方法:   Socket(InetAddress address, int port)   创建一个流套接字并将其连接到指定 IP 地址的指定端口号 · ...

  8. JAVAEE企业级应用开发浅谈之MVC 中的V-VIEW视图

    Step1.情景概要 Hello,小伙伴们,好久不见,之前跟大家分享了三层架构与MVC思想,相信大家对于这两块内容有了相对清晰的个人认识了,既然我们讲到了MVC,这里我们接着这块内容继续往下深入,今天 ...

  9. 抓包工具 Fiddler 使用介绍

    简介 Fiddler是一个抓包工具,可以将网络传输发送与接收的数据包进行截获.重发.编辑等操作.也可以用来检测流量.原理是以web代理服务器的形式进行工作的,使用的代理地址是:127.0.0.1,端口 ...

  10. 简单读!tomcat源码(一)启动与监听

    tomcat 作为知名的web容器,很棒! 本文简单了从其应用命令开始拆解,让我们对他有清晰的了解,揭开神秘的面纱!(冗长的代码流水线,给你一目了然) 话分两头: 1. tomcat是如何启动的? 2 ...