什么是任务栈?

2023-05-16

在一个裸机系统中,如果有全局变量,有子函数调用,有中断发生。那么系统在运行的时候,全局变量放在哪里,子函数调用时,局部变量放在哪里,中断发生时,函数返回地址发哪里。如果只是单纯的裸机编程,它们放哪里我们不用管,但是如果要写一个 RTOS,这些种种环境参数,我们必须弄清楚他们是如何存储的。在裸机系统中,他们统统放在一个叫栈的地方,栈是单片机 RAM 里面一段连续的内存空间,栈的大小由启动文件里面的代码配置,具体见如下代码 ,最后由 C 库函数_main 进行初始化。它们在 RAM 空间里面的大概分布具见。

Stack_Size      EQU      0x00000400

                AREA     STACK, NOINIT, READWRITE, ALIGN=3
__stack_limit
Stack_Mem       SPACE    Stack_Size
__initial_sp

但是,在多任务系统中,每个任务都是独立的,互不干扰的,所以要为每个任务都分配独立的栈空间,这个栈空间通常是一个预先定义好的全局数组。这些一个个的任务栈也是存在于 RAM 中,能够使用的最大的栈也是由上述代码中的Stack_Size 决定。只是多任务系统中任务的栈就是在统一的一个栈空间里面分配好一个个独立的空间,每个任务只能使各自的空间,而裸机系统中需要使用栈的时候则可以天马行空,随便在栈里面找个空闲的空间使用,大概的区别具体见。

在多任务系统中,有多少个任务就需要定义多少个任务栈。

#define  TASK1_STK_SIZE
#define  TASK2_STK_SIZE

static  CPU_STK  Task1Stk[TASK1_STK_SIZE];
static  CPU_STK  Task2Stk[TASK2_STK_SIZE];

(1)任务栈的大小由宏定义控制,在 μC/OS-III 中,空闲任务的栈最小应该大于 128,那么我们这里的任务的栈也暂且配置为 128。
(2)任务栈其实就是一个预先定义好的全局数据,数据类型为 CPU_STK。 在 μC/OS-III 中,凡是涉及数据类型的地方μC/OS-III 都会将标准的 C 数据类型用 typedef重新取一个类型名,命名方式则采用见名之义的方式命名且统统大写。凡是与 CPU 类型相关的数据类型则统一在 cpu.h 中定义,与 OS 相关的数据类型则在 os_type.h 定义。CPU_STK就是与 CPU 相关的数据类型,则在 cpu.h 中定义,具体见如下代码。

#ifndef CPU_H
#define CPU_H

typedefunsigned short        CPU_INT16U;
typedefunsigned int          CPU_INT32U;
typedefunsigned char         CPU_INT08U;

typedef CPU_INT32U  CPU_ADDR;

/* 栈数据类型重定义 */
typedef CPU_INT32U           CPU_STK;
typedef CPU_ADDR             CPU_STK_SIZE;

typedef volatile CPU_INT32U  CPU_REG32;

#endif /* CPU_H */
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

什么是任务栈? 的相关文章

  • Datax定时增量读取MongoDB到本地配置文件

    Datax定时增量读取MongoDB到本地配置文件 功能 1 gt DataX实现读取MongDB 2 gt 按照时间增量读取 3 gt 定时执行 xff08 使用调度工具自行实现 xff09 代码 span class token pun
  • 我们为什么需要自动化运维?

    随着企业服务器和交换机数量越来越多 xff0c 当到达几百台 xff0c 上千台服务器和交换机之后 xff0c 服务器和交换机日常管理也逐渐繁杂 xff0c 每天如果通过人工去频繁的更新或者部署及管理这些服务器和交换机 xff0c 势必会浪
  • C语言字符数组与字符串的使用及加结束符'\0'的问题

    1 字符数组的定义与初始化 字符数组的初始化 xff0c 最容易理解的方式就是逐个字符赋给数组中各元素 char str 10 61 I a m h a p p y 即把10个字符分别赋给str 0 到str 9 10个元素 如果花括号中提
  • Ubuntu之桌面安装及启动级别切换

    一 需求说明 某开发测试环境操作系统为Ubuntu20 04 给开发人员安装了xrdp 一次远程桌面连接过程中异常奔溃后无法再次远程连接 重启xrdp服务后所有人连接远程连接均出现闪退 为了进一步排查和测试需要搭建一个xrdp测试环境 当前
  • 如何将windows中的文件上传到虚拟机中?

    今天在linux系统中装了mysql xff0c 本来是用wget命令在官网下载的 xff0c 后来实在是慢 等了几分钟实在看不下去每秒十几k的下载速度 xff0c 于是将这个压缩包 xff08 tar xz结尾 xff09 下载到了win
  • 使用SQLyog连接Linux(CentOS版本)下的MySQL8数据库报2003以及1045错误的解决方法

    今天想尝试一下mysql的图形化管理工具 xff0c 于是下载了SQLyog xff0c 连接时却遇到了以下错误 xff1a 其中192 168 0 10是我linux下设置的inet xff0c 我们是通过它远程连接数据库 xff0c 这
  • servlet 学习笔记3

    1 会话 a 定义 xff1a 一个浏览器与一个服务端的一次完整的交流 b 特点 xff1a 在一次会话过程中 xff0c 经历多次请求与响应 在一次会话过程中 xff0c 同一个浏览器往往访问多个Servlet c 需求 xff1a 在一
  • JDBC 学习笔记2

    1 处理查询结果集 xff08 遍历结果集 xff09 span class token keyword package span test span class token punctuation span span class toke
  • JDBC 学习笔记3

    1 对比Statement与PreparedStatement Statement存在sql注入问题 xff0c PreparedStatement解决了sql注入问题 Statement是编译一次执行一次 xff0c PreparedSt
  • memset函数使用方法

    memset 函数及其作用 memset 函数原型是extern void memset void buffer int c int count buffer xff1a 为指针或是数组 c xff1a 是赋给buffer的值 count
  • 补码和原码的转化过程

    在计算机系统中 xff0c 数值一律用补码来表示 xff08 存储 xff09 主要原因 xff1a 使用补码 xff0c 可以将符号位和其它位统一处理 xff1b 同时 xff0c 减法也可按加法来处理 另外 xff0c 两个用补 码表示
  • 在ubuntu系统下安装缺少的字体(一般缺少中文字体)

    在ubuntu系统下安装缺少的字体 cite Ubuntu LaTeX 环境配置 https www cnblogs com xqmeng p 13931222 html 第一步 xff1a 下载缺少的字体 xff08 这里保证下载字体的名
  • 【数学知识】质数与质因子

    一 质数 1 概念 质数又称素数 一个大于1的自然数 xff0c 除了1和它自身外 xff0c 不能被其他自然数整除的数叫做质数 xff0c 否则称为合数 规定1既不是质数也不是合数质数的个数是无穷的 2 例题 xff1a AcWing 3
  • ElasticSearch7.6.2安装与简单操作

    ElasticSearch7 6 2安装与简单操作 Es系列工具都是开箱即用 xff0c 所以安装比较简单 xff0c 各个系统下都是解压即可 前置环境 xff1a windows10 ES7 6 2 Kibana7 6 2 xff1a E
  • 【填坑】海思wifi平台Hi3861开发(上) -- 搭建环境篇

    文章目录 背景处处坑1 编译环境Ubuntu Python报错去找客户新虚拟机OK 2 开发SDK 背景 近期在海思的一款wifi模组Hi3861V100上开发 xff0c 想来和ESP模组应该很像 xff0c 心情还是很放松的 xff0c
  • 小白带你入坑四旋翼无人机——物料篇

    之前就想写了 xff0c 但是比赛挺忙 xff0c 就搁置下来了 xff0c 现在比完了刚好在记录一下 就在一个月前 xff0c 我真正开始了和四旋翼无人机打交道 当时 xff0c 我还是一个小白 xff0c 对无人机什么都不了解 xff0
  • 无人机pid调节顺口溜

    今天无意中找到 xff0c 具体那位大佬编的我也不清楚 xff0c 先感谢一下吧 参数整定找最佳 xff0c 从小到大顺序查 先是比例后积分 xff0c 最后再把微分加 曲线振荡很频繁 xff0c 比例度盘要放大 曲线漂浮绕大弯 xff0c
  • 锐捷(五)交换机简单网络管理协议(SNMP)的配置

    要求 xff1a 在交换机上部署SNMP功能 1 向主机 172 16 0 254 发送 Trap 消息 xff0c 版本采用V2C 2 读写的Community为 admin 只读的Community为 public 3 开启Trap消息

随机推荐