微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 嵌入式设计讨论 > 嵌入式系统设计讨论 > UC/OS-II操作系统——任务(二)

UC/OS-II操作系统——任务(二)

时间:10-02 整理:3721RD 点击:
二、任务堆栈
  1 数据类型:任务堆栈的数据类型:OS_STKOS_CFG.H中定义的)
  2 定义堆栈:
    定义一个OS_STK类型的数组就可以。
    #define TASK_STK_SIZE 512;    //定义堆栈的长
    OS_STK   TaskStk[TASK_STK_SIZE]; //定义一数组作为任务堆栈
  3 关联:
  当调用OSTaskCreate()创建一个任务时,把数组的指针传递给函数中的堆栈栈顶参数ptos,就可以把数组与任务关联起来而称为该任务的堆栈了。
  4 堆栈增长方向:
    向上增长:ptos为TaskStk[0]
    向下增长:ptos为TaskStk [SIZE-1]
    栈是一种只能在一端进行操作的结构,能操作那一端为栈顶
  可以根据OS_CFG.H中的常数OS_STK_GROWTH作为选择开关,使用户可通过定义该常数的值来选择相应的代码段,以适应不同的堆栈增长方式的需要。

  1.   Eg: #define TASK_STACK_SIZE 64  OS_STK  TaskStack[TASK_STACK_SIZE];  #if OS_STK_GROWTH == 0    OSTaskCreate(task, pdata, &TaskStack[0], prio);  #else      OSTaskCreate(task, pdata, &TaskStack[TASK_STACK_SIZE-1], prio);  #endif

复制代码


  5 任务堆栈的初始化
  应用程序在建立一个新任务时,就必须把在系统启动这个任务时CPU各个寄存器所需要的初始数据(任务指针、任务堆栈指针、程序状态字等)事先存放在任务的堆栈中。这样,当任务获得CPU使用权时,就能把堆栈中的初始数据复制到CPU的各寄存器里,从而可使任务顺利地启动并运行。
  任务堆栈的初始化工作应该是由操作系统负责的。UC/OS-II在创建任务函数中通过调用任务堆栈初始化函数OSTaskStkInit() 来完成任务堆栈初始化工作。
  函数原型:

  1.   OS_STK *OSTaskStkInit(       void (*task)(void *pd),       void *pdata,       0S_STK *ptos,       INT16U opt  );

复制代码


学习

不错不错  挺好的

很有用的东西,谢小编

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top