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()后,系统就切换到任务堆栈,以便开始多任务处理。

审核编辑 :李倩

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

    关注

    48

    文章

    8249

    浏览量

    162265
  • 寄存器
    +关注

    关注

    31

    文章

    5588

    浏览量

    129033
  • 堆栈
    +关注

    关注

    0

    文章

    183

    浏览量

    20418
  • 应用程序
    +关注

    关注

    38

    文章

    3342

    浏览量

    59905

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

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

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

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    FreeRTOS 空闲任务

    FreeRTOS 很多人会注意到为什么有一个叫IDLE task的任务占用了CPU百分之九十多的使用权,但是这个任务并没有自己手动创建。原因就是这个空闲任务
    发表于 12-04 07:35

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

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

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

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

    堆栈指针SP介绍

    SP 堆栈指针:8位寄存器,用来指示堆栈的位置,可由软件修改。 堆栈的介绍堆栈是一种按“先进后出”规律操作的存储结构。不同类型的处理器其堆栈
    发表于 11-17 06:07

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

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

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

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

    Task任务:LuatOS实现“任务级并发”的核心引擎

    Task任务通过其强大的并发处理能力,使LuatOS能够在单线程环境模拟多线程执行,通过协程的挂起与恢复机制,实现任务级的并行操作,显著提升系统效能。 sys核心库是LuatOS运行
    的头像 发表于 08-28 13:49 332次阅读
    Task<b class='flag-5'>任务</b>:LuatOS实现“<b class='flag-5'>任务</b>级并发”的核心引擎

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

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

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

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

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

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

    AGV监控与任务管理系统设计

    AGV在智能物流核心,助力工业4.0和中国制造2025。AGV管理监控调度系统实时监控、任务管理、路径规划,确保高效便捷。AGV市场前景广阔,解决人口红利丧失、劳动力成本上升等问题,物流装备业迎来机遇。
    的头像 发表于 03-05 12:10 588次阅读
    AGV监控与<b class='flag-5'>任务</b>管理<b class='flag-5'>系统</b>设计

    BEVFusion —面向自动驾驶的多任务多传感器高效融合框架技术详解

    BEVFusion 技术详解总结——面向自动驾驶的多任务多传感器高效融合框架原始论文:*附件:bevfusion.pdf介绍(Introduction)背景:自动驾驶系统配备了多种传感器,提供互补
    的头像 发表于 02-26 20:33 5963次阅读
    BEVFusion —面向自动驾驶的<b class='flag-5'>多任务</b>多传感器高效融合框架技术详解

    MCU在车载系统的展望

    和实时性表现,以满足车载系统多任务处理的需求,如自动驾驶辅助系统同时处理多个传感器数据,信息娱乐系统
    发表于 01-17 12:11

    使用任务通知提高RTOS应用的效率

    在实时嵌入式系统,性能和资源效率是决定设计成败的关键因素。传统的实时操作系统(RTOS)提供了如队列、信号量和事件组机制,实现任务之间的同步和通信。FreeRTOS/SAFERTOS
    的头像 发表于 12-27 14:54 1062次阅读

    AUTOSAR通信堆栈的配置 AUTOSAR通信模块测试方法

    )的开发和生产。通信堆栈是AUTOSAR架构的关键组成部分,负责处理ECU之间的通信。 AUTOSAR通信堆栈的配置 通信模型 : AUTOSAR定义了一种分层的通信模型,包括应用
    的头像 发表于 12-17 15:01 1512次阅读