0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

多任务系统中的堆栈使用

麦克泰技术 来源:麦克泰技术 作者:麦克泰技术 2022-12-02 11:15 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

在使用μC/OS的多任务应用程序中,main()启动后首先使用系统C栈,在OS启动后使用任务栈。

基于μC/OS-II或μC/OS-III编写应用代码时,用户必须为每个任务声明一个堆栈,用于任务运行现场及保存任务上下文(CPU寄存器)。在多任务处理开始之前执行的C代码将使用C栈。只有当应用程序的第一个任务开始运行时,栈才会从C栈中转移到任务栈。

不同的微控制器栈的实现也不同,许多32位处理器支持多个栈。例如,ARM Cortex-M内核有两个栈指针,分别指向主栈和进程栈。在基于μC/OS-III的应用中,多任务开始前使用主堆栈,其空间为链接命令文件中定义的堆栈区域。当应用程序调用OSStart()函数启动多任务时,进程堆栈指针被设置为第一个任务堆栈的栈顶地址,并修改控制寄存器,使任务开始运行时使用该堆栈。同时,主堆栈指针被用来指向μC/OS-III的中断堆栈OSCfg_ISRStk[]。后续多任务系统运行过程中,此堆栈将专门用于中断和异常处理程序。多任务启动后,C堆栈会丢失,导致嵌入式应用中可用的RAM量减少,在资源有限的应用中,可以重用C堆栈空间,用于任务堆栈,具体实现可以参考文章:技术小课堂| µC/OS-III的应用中CSTACK重用

由于main()对C堆栈的依赖,必须确保为这个堆栈留出足够的空间。如上所述,µC/OS-III用户还必须知道OSCfg_ISRStk[]栈的大小。OSCfg_ISRStk[]是一个数组,类似于任务堆栈,其大小由内核配置常量OS_CFG_ISR_STK_SIZE决定。另一方面,C堆栈的大小通常直接提供给链接器,因此在不同开发环境中对该堆栈进行更改的方法是不一样的。

在Segger Embedded Studio中,Cortex-M的应用中main()使用的堆栈通常被命名为stack,可以通过工程options菜单进行堆栈配置,无需直接更改链接器文件。

30bfb07e-71ee-11ed-8abf-dac502259ad0.png

如果基于μC/OS-III官方示例工程开发,通常不需要修改C栈的大小。这些工程已为main()的执行分配了足够的空间。不过,中断堆栈大小的定义OS_CFG_ISR_STK_SIZE可能需要进行一些调整。对于使用独立中断堆栈的应用,如果不在中断处理程序增加复杂的函数调用,示例的默认大小即可满足需求。

基于μC/OS构建的系统在main()运行过程中依赖C堆栈,一旦调用OSStart()后,系统就切换到任务堆栈,以便开始多任务处理。

审核编辑 :李倩

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 微控制器
    +关注

    关注

    49

    文章

    8909

    浏览量

    166038
  • 寄存器
    +关注

    关注

    31

    文章

    5623

    浏览量

    130632
  • 堆栈
    +关注

    关注

    0

    文章

    184

    浏览量

    20608
  • 应用程序
    +关注

    关注

    38

    文章

    3347

    浏览量

    60504

原文标题:多任务系统中的堆栈使用

文章出处:【微信号:麦克泰技术,微信公众号:麦克泰技术】欢迎添加关注!文章转载请注明出处。

收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    【RA-Eco-RA4M2开发板评测】+ FreeRTOS多任务初探

    论坛 - 广受欢迎的专业电子论坛! 2 FreeRTOS相关配置 2.1 添加任务 2.2 添加堆栈策略 2.3 任务0详细配置 2.4 任务1详细配置 3 生成代码 3.1
    发表于 04-19 12:30

    在学单片机时在堆栈遇到的问题分享

    大多数的例子能良好工作。在绝大多数程序除了很繁重的递归调用程序再入式函数,最多40 个字节的硬件堆栈应该是足够的。 如果函数的调用层次太深,有可能会发生硬件堆栈溢出到软件
    发表于 01-23 07:47

    堆栈的原理揭秘

    1. 什么是堆栈?单片机应用堆栈是个特殊存储区,堆栈属于RAM空间的一部分,堆栈用于函数调用、中断切换时保存和恢复现场数据。
    发表于 01-23 07:08

    STM32开发的五大嵌入式系统

    : 适用场景:FreeRTOS是一个实时操作系统, 支持多任务并发执行,可以创建多个任务并通过任务调度器进行管理和调度, 能够满足对任务响应
    发表于 01-21 10:48

    一文说透了如何实现单片机的多任务并发!

    在嵌入式系统开发多任务并发是非常常见的,对于处理复杂的应用场景、提升系统的并发能力、提高系统的实时性等方面都有很大好处。在单片机
    发表于 01-06 06:46

    什么是嵌入式操作系统

    、嵌入式操作系统的定义 嵌入式操作系统是专门为资源受限的嵌入式设备(比如 STM32 单片机、物联网模块、工业控制器)设计的微型操作系统,核心作用是:管理硬件资源、调度多任务、提供标
    发表于 12-09 10:33

    单片机堆栈解析

    什么是单片机堆栈? 在片内RAM,常常要指定一个专门的区域来存放某些特别的数据,它遵循顺序存取和后进先出(LIFO/FILO)的原则,这个RAM区叫堆栈。 它的作用 子程序调用和中断服务时CPU
    发表于 12-09 06:52

    FreeRTOS任务和协程的区别是什么

    1.堆栈 协程是没有堆栈分配的,是所有创建的协程共同使用一个堆栈空间,这相比于任务来说,减少了RAM的使用空间。 2. 调度和优先级 协程使用协同调度,但是可以包含在使用的抢占优先级之
    发表于 12-08 08:18

    多任务系统,如何平衡任务调度以防止因高负载导致的再次进入低功耗模式的延迟?

    多任务系统,如何平衡任务调度以防止因高负载导致的再次进入低功耗模式的延迟?
    发表于 12-04 06:37

    堆栈的定义,堆栈的使用方法

    定义和一般段的定义的唯一区别在于使用了STACK; 对于堆栈段,系统会在装入程序时自动把SSEG的段基址放入SS寄存器堆栈的字节数自动
    发表于 11-21 06:49

    一句话,多个命令同时执行,AI语音模组也能多任务处理?

    、 Ai-WV02-32S   将语音识别、唤醒、语义理解等核心功能, 浓缩在一颗小小的模组。 安信可AI语音模组支持 MCP 协议(Multi Command Processing,多命令并行处理) ,让语音交互从“单线程”进化为真正的“多任务协同”! 一句话唤醒“
    的头像 发表于 10-31 14:45 771次阅读
    一句话,多个命令同时执行,AI语音模组也能<b class='flag-5'>多任务</b>处理?

    爱普科技PSRAM加速wisun无线模块多任务处理

    爱普科技256Mb PSRAM(如APS256XXN-OBR-BG)为WiSUN无线模块提供高速数据缓存与临时存储解决方案,其166MHz速率、1.8V低功耗及小尺寸封装显著提升模块在智能电网、工业自动化多任务处理能力和稳定性。
    的头像 发表于 10-14 09:25 599次阅读
    爱普科技PSRAM加速wisun无线模块<b class='flag-5'>多任务</b>处理

    揭秘LuatOS Task:多任务管理的“智能中枢”

    Task任务作为LuatOS的核心组成部分,通过智能化的任务管理机制,实现任务的创建、调度与协同运行,让复杂应用得以高效并行处理,满足实时场景下的严苛需求。 sys核心库是LuatOS运行框架库
    的头像 发表于 08-28 13:48 871次阅读
    揭秘LuatOS Task:<b class='flag-5'>多任务</b>管理的“智能中枢”

    多任务处理卡顿频发,无风扇工控机如何优化性能?聚徽厂家一文读懂

    在工业自动化、物联网等领域的深度应用,无风扇工控机常常需要同时运行数据采集、实时监控、程序控制等多个任务。然而,频繁出现的多任务处理卡顿问题,不仅影响生产效率,还可能导致数据丢失、系统
    的头像 发表于 06-03 15:25 989次阅读

    快速入门——LuatOS:sys库多任务管理实战攻略!

    在嵌入式开发多任务管理是提升系统效率的关键。本教程专为快速入门设计,聚焦LuatOS的sys库,通过实战案例带你快速掌握多任务创建、调度与同步技巧。无论你是零基础新手还是希望快速提
    的头像 发表于 05-29 14:36 1072次阅读
    快速入门——LuatOS:sys库<b class='flag-5'>多任务</b>管理实战攻略!