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

企业   2024-10-30 12:09   中国  

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


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

  • 系统莫名其妙进入Hardfault

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

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

  • 系统运行过程发生断言

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

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

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

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

  • ...

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

1

提出问题


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

2

分析问题


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

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

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

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天时间)



报名方式

可以在线点击链接进行报名:

https://jsj.top/f/uOxrAI

也可以扫描二维码进行报名

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

缴费请汇款至以下账户,并在汇款时注明:RTT+参会人姓名 开票请联络会务人员。

RT-Thread联系人:童方怡

联系方式:18930166702

电子邮箱:tongfangyi@rt-thread.com



培训内容

时间

培训内容

 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操作系统应用开发

——————End——————

想要在RT-Thread平台或社区投放内容?或想参与相关直播活动及赛事?RT-Thread已开放对接窗口,请通过邮件与我们取得联系,期待合作!

合作邮箱: tongfangyi@rt-thread.com 

RTThread物联网操作系统
帮助您了解RT-Thread相关的资讯。
 最新文章