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

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

3天内不再提示

线程栈分配惹的祸?系统异常这样解决!

RT-Thread官方账号 2024-10-31 08:08 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

嵌入式操作系统通常被认为有一定的学习门槛,为帮助嵌入式工程师降低RTOS的使用难度,RT-Thread提供了文档教学中心、视频中心、论坛交流等多种支持。然而在实际项目中,开发者们仍可能会遇到各种挑战,尤其当项目规模扩大、代码复杂度增加时,各种“难以捉摸”的bug便会频繁出现,令工程师们一头雾水,不知从何入手。这些问题可能涉及内存管理、任务调度、栈溢出等复杂内容。

这些问题是否也在你的项目中时常困扰着你?

51ac409a-971c-11ef-8084-92fbcf53809c.png

系统莫名其妙进入Hardfault

系统运行过程线程异常挂起

不正确使用内核API导致系统异常

系统运行过程发生断言

不清楚某些系统组件或软件包的使用方法

线程栈分配不合理导致系统异常

应用代码不规范导致系统异常

如何修改Scons脚本,Kconfig...

...

作为初学者非常容易遇到的一个问题是:线程栈分配不合理导致系统异常

1

提出问题

刚开始接触RT-Thread的小伙伴在创建线程时,常常会遇到下述问题:

51d1a9ac-971c-11ef-8084-92fbcf53809c.png

2

分析问题

从终端输出的信息我们可以获取到的关键信息有

1) 在发生异常的线程为entry

51dd8970-971c-11ef-8084-92fbcf53809c.png

2) 该线程的栈空间为0x100

51eac478-971c-11ef-8084-92fbcf53809c.png

3) SCB_CFSR_UFSR:0x01 UNDEFINSTR

UNDEFINSTR通常是PC指针指向非法地址执行指令导致,通过1)点可以定位到问题发生在entry线程,第2)点可以看出entry线程的栈空间有点小,因此初步定位线程栈溢出。

3

解决问题

最终找到问题线程栈太小导致线程栈溢出,同时回到线程入口函数可以发现在线程中定义了一个很大的数组导致了线程栈的溢出,进一步证明了上述的问题。

解决问题就是依据经验和工具进行分析尝试的一个过程。

1)将线程栈改大一些,entry线程正常运行。

2)使能内核的堆栈溢出检查,运行输出msh >thread:entry stack overflow

最终找到问题线程栈太小导致线程栈溢出,同时回到线程入口函数可以发现在线程中定义了一个很大的数组导致了线程栈的溢出,进一步证明了上述的问题。

RT-Thread开班啦,技术专家团队手把手带您上手RT-Thread嵌入式操作系统,我们开放了为期三天的嵌入式操作系统专业培训班!本次培训将会深入讲解RT-Thread嵌入式实时操作系统的核心概念、实战技巧、应用场景、嵌入式开发疑难杂症分析与答疑!

培训时间

2024/11/9-2024/11/11(3天时间)

本次培训是付费培训,培训费用:2918元 - 含税 (3日),提供培训手册+硬件平台。培训费用同时也包含午餐。

培训内容

时间

培训内容

2024/11/9

RTOS内核

1. 内核原理

1.1 RT-Thread系统启动流程

1.2 RT-Thread线程与线程切换学习

1.3 RT-Thread线程与中断切换学习

2. 应用编程

2.1 RT-Thread多线程编程

(1)RT-Thread多线程抢占学习

(2)RT-Thread多线程轮询学习

(3)RT-Thread多线程调试实践

2.2 RT-Thread线程同步

(1)RT-Thread信号量原理,调试与应用实践

(2)RT-Thread互斥量原理,调试与应用实践

(3)RT-Thread事件集原理,调试与应用实践

2.3 RT-Thread线程通信

(1)RT-Thread消息邮箱原理,调试与应用实践

(2)RT-Thread消息队列原理,调试与应用实践

3. RT-Thread动态内存管理

3.1 RT-Thread动态内存管理原理介绍

3.2 RT-Thread动态内存应用实践

2024/11/10

RT-Thread I/O设备驱动

1. RT-Thread构建与配置系统

1.1 Kconfig配置系统

(1) Kconfig工作机制

(2) Kconfig语法介绍

1.2 Scons构建系统

(1) Scons语法介绍

(2) Scons使用示例

1.3 Env工具

(1) Env常用命令使用示例

2. RT-Thread I/O设备框架

2.1 I/O设备框架原理

(1) 原厂驱动库、RTT HAL库驱动、RTT驱动框架关系介绍

2.2 I/O设备框架应用实践

(1) 虚拟驱动移植实战

3. RT-Thread 设备驱动框架

3.1 PIN设备

(1) PIN设备驱动框架原理

(2) PIN设备驱动应用实践

3.2 UART设备

(1) UART设备驱动框架原理

(2) UART设备驱动应用实践

3.3 I2C设备

(1) I2C设备驱动框架原理

(2) I2C设备驱动应用实践

4. RT-Thread设备驱动实战

4.1 串口设备组件

(1) 串口类设备组件介绍

(2) 串口设备驱动应用实践

4.2 I2C设备驱动

(1) I2C Tools软件包介绍

(2) I2C设备驱动应用实践

2024/11/11

RT-Thread组件与系统问题排查实践

1. 系统常见问题排查

(1)基础问题排查方法与实践示例

(2)内存泄漏问题排查方法与实践示例

(3)栈溢出问题排查方法与实践示例

(4)线程死锁问题排查方法与实践示例

(5)HardFault问题排查方法与实践示例

2. 组件分析与实践

(1)MQTT软件包原理与应用实践

(2)SAL抽象层原理与应用实践

(3)传感器软件包应用实践

(4)其他相关软件包应用实践

3. 综合实践

综合所学内容,手把手从零实现一个IoT设备。

培训地点

深圳福田区天安数码城天吉大厦AB座7楼7B2知了会议中心M6会议室

地铁:1、7、9、11号线到达车公庙地铁站,可从G口出,右转步行100米左右到达知了会议中心。

培训证书

培训结束后通过考核的将可以获得RT-Thread出具的结业证书和中国电子学会出具的职业技能证书-RT-Thread操作系统应用开发

5254a974-971c-11ef-8084-92fbcf53809c.png

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

    关注

    5212

    文章

    20765

    浏览量

    338801
  • 线程
    +关注

    关注

    0

    文章

    511

    浏览量

    20887
  • RT-Thread
    +关注

    关注

    32

    文章

    1657

    浏览量

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

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    摩尔线程携全自主算力解决方案亮相2026移动云大会

    此前,5月7日至9日,2026移动云大会在苏州举行,聚焦算网融合、人工智能、Token应用与产业落地,汇聚政、产、学、研、用各界嘉宾。作为中国移动投资的国产GPU头部企业及核心生态伙伴,摩尔线程携全自主算力解决方案参展,并深度参与新品路演、生态发布、圆桌对话等环节,为智
    的头像 发表于 05-14 15:49 196次阅读

    关于FreeRTOS中断返回模式和堆栈指针的理解

    任务后使用PSP指针。 MSP指向的是系统,即启动文件中分配空间。其中__initial_sp指向底,
    发表于 05-06 15:04

    【瑞萨FPB-RA6E2试用】【瑞萨RA × Zephyr开发板评测】+线程创建及测试

    线程可立即打断低优先级线程。 时间片轮转法 ,即同等优先级的线程分配以固定的时间片轮流执行。 较少见的协作式调度法, 其线程会主动让出CP
    发表于 02-03 21:33

    Cortex-M3工作模式及异常

    一、工作模式 线程模式和手柄模式。 当处理器处在线程状态下时,既可以使用特权级,也可以使用用户级;另一方面, handler模式总是特权级的。在复位后,处理器进入线程模式+特权级。 二、异常
    发表于 01-20 08:24

    【瑞萨FPB-RA6E2试用】【瑞萨FPB-RA6E2】RTOS(Real-Time Operating System,实时操作系统)《线程》个人理解及项目实现

    【瑞萨FPB-RA6E2】RTOS(Real-Time Operating System,实时操作系统)《线程》个人理解及项目实现 1. RTOS(Real-Time Operating
    发表于 01-14 11:50

    摩尔线程在MDC 2025重磅发布全创新成果

    12月20日,在首届MUSA开发者大会上,摩尔线程创始人、董事长兼CEO张建中发表主题演讲,系统展示了以自主MUSA统一架构为核心的全创新成果,全面展现公司在技术和生态上的关键突破与前瞻布局。
    的头像 发表于 12-22 18:04 1653次阅读

    使用setjmp及longjmp函数处理异常

    使用setjmp和longjmp函数:这是一种用于实现非局部跳转的方法,就是在程序中设置一个跳转点,并在某些情况下跳转到该跳转点,从而绕过中间的一些代码或函数。这样可以在某些情况下模拟异常处理的效果
    发表于 12-11 08:00

    线程系统

    线程系统的事件响应也是在中断中完成的,但事件的处理是在线程中完成的。在多线程系统中,线程跟中断
    发表于 12-08 07:55

    堆和的区别

    一个由C/C 编译的程序占用的内存分为以下几个部分: 区(stack):由编译器自动分配释放 ,存放函数的参数值,局部变量的值等。其操作方式类似于数据结构中的。 堆区(heap):一般由
    的头像 发表于 11-27 18:13 1311次阅读

    rtthread线程出现异常了,有没有什么钩子函数能够定义用户操作?

    线程出现异常了,有没有什么钩子函数能够定义用户操作????
    发表于 09-18 06:36

    线程删除时遇到断言,是什么原因导致的?

    在一个线程中调用线程删除函数删除另外一个线程,这2个线程的优先级是相等的,被删除的线程也是动态创建的,出现了下面的断言内容,一般是什么情况导
    发表于 09-12 06:08

    摩尔线程吴庆详解 MUSA 软件:以技术创新释放 KUAE 集群潜能,引领 GPU 计算新高度​

    的分享。GPU 计算软件开发总监吴庆登上讲台,发表了题为《摩尔线程 MUSA 软件助力 KUAE 集群释放无限潜能》的演讲。他从专业视角出发,为在场听众深入剖析了 MUSA 软件在驱动 KUAE 集群高效运转方面的核心技术与
    的头像 发表于 07-28 13:47 6559次阅读
    摩尔<b class='flag-5'>线程</b>吴庆详解 MUSA 软件<b class='flag-5'>栈</b>:以技术创新释放 KUAE 集群潜能,引领 GPU 计算新高度​

    摩尔线程亮相WAIC 2025:以“AI工厂”理念驱动算力进化,全AI应用赋能千行百业

    7月26日-29日,2025世界人工智能大会(WAIC)在上海举办。摩尔线程携以全功能GPU为核心的“云边端”全AI产品和解决方案精彩亮相,并首次提出“AI工厂”理念,旨在为AGI时代打造生产先进
    的头像 发表于 07-28 11:34 2628次阅读
    摩尔<b class='flag-5'>线程</b>亮相WAIC 2025:以“AI工厂”理念驱动算力进化,全<b class='flag-5'>栈</b>AI应用赋能千行百业

    深度剖析 RT-Thread 线程调度流程

    rt_system_scheduler_start:调度系统第一个线程rt_hw_context_switch_to:初始化上下文切换环境,触发PendSV异常first_thread:系统
    的头像 发表于 06-25 18:24 2025次阅读
    深度剖析 RT-Thread <b class='flag-5'>线程</b>调度流程

    main线程大小设置成2048的时候rt_memset导致hardfault,为什么?

    main线程大小设置成2048的时候rt_memset导致hardfault,改成512就不会,这是为什么
    发表于 06-10 06:04