Toggle navigation
首页
问答
文章
积分商城
专家
专区
更多专区...
文档中心
返回主站
搜索
提问
会员
中心
登录
注册
栈溢出_StackOverflow
简单任务切换,出现stack overflow
发布于 2022-04-22 18:55:36 浏览:2711
订阅该版
main 函数中定义了几个简单任务: ```c uint32_t main(){ #if FIX_TASK_OVERFLOW==1 rt_thread_t low_tid = rt_thread_create("task_low", task_low, RT_NULL, 1024 * 8, 6, 20); if(low_tid){ rt_thread_startup(low_tid); } rt_thread_t middle_tid = rt_thread_create("task_middle", task_middle, RT_NULL, 2048, 5, 20); if(middle_tid){ rt_thread_startup(middle_tid); } rt_thread_t high_tid = rt_thread_create("task_high", task_high, RT_NULL, 1024 * 8, 2, 20); if(high_tid){ rt_thread_startup(high_tid); } #endif return 0; } ``` 任务定义: ```c++ void task_high(void *param) { while(1){ rt_thread_mdelay(100); } } void task_middle(void *param) { static uint32_t cnt = 0; while(1){ log_d("%s: %d\r\n", __func__, cnt++); rt_thread_mdelay(500); } } void task_low(void *param) { static uint32_t cnt=0; while(1){ log_d("%s: %d\r\n", __func__, cnt++); rt_thread_mdelay(500); } } ``` 跑一会出现overflow: ``` UART: open serial device: 0x800215cc with open flag: 0x0143 msh >[TEST]: task_low: 0 thread:task_mid stack overflow thread pri status sp stack size max used left tick error -------- --- ------- ---------- ---------- ------ ---------- --- task_hig 2 suspend 0x00000088 0x00002000 02% 0x00000014 000 task_mid 5 ready 0x00004568 0x00000800 25% 0x00000014 -02 task_low 6 suspend 0x00000088 0x00002000 06% 0x00000014 000 tshell 6 suspend 0x00000094 0x00000400 56% 0x00000008 000 at_svr 1 suspend 0x000000c8 0x00000800 09% 0x00000005 000 tidle 7 ready 0x000000d0 0x00000200 40% 0x0000000e 000 timer 4 suspend 0x00000078 0x00000200 23% 0x00000009 000 ``` 我看出现问题时,出问题的任务是超时状态,堆栈指针跑到了一个不属于自身任务堆栈地址空间, 系统是我在nano的基础上移植的,是不是移植出现问题,导致sp指针不合理? 请教我应该从哪个方向找问题原因呢?
查看更多
3
个回答
默认排序
按发布时间排序
张世争
2022-04-22
学以致用
很明显: 一个栈被破坏了,可能是其他的线程非法操作引起的 `task_mid 5 ready 0x00004568 0x00000800 25% 0x00000014 -02`
出出啊
2022-04-23
恃人不如自恃,人之为己者不如己之自为也
除了这几个线程,再没有其它的了? 把log_d 换成 rt_kprintf 试试。 你这是本周第三个用 rt_thread_mdelay 发现问题的了。
ching
2022-04-24
这家伙很懒,什么也没写!
自身ram资源就不多吧,一个任务分配了那么多的内存
撰写答案
登录
注册新账号
关注者
0
被浏览
2.7k
关于作者
enzo26
这家伙很懒,什么也没写!
提问
3
回答
0
被采纳
0
关注TA
发私信
相关问题
1
一个简单的线程,只有简单几个常量和调用,128字节的栈竟然溢出了
2
栈溢出怎么找原因,只提示了StackOverflow?
3
仿真运行出现“tidle0 stack overflow”?
4
main stack overflow
5
rt-thread堆栈溢出的问题
6
rt-thread-nano防止某个任务的堆栈溢出
7
互斥量的地址怎么突变了?
8
正弦波形不全,是什么机制引起的?
9
使用minizip包的minizip指令报内存溢出故障
10
创建多个线程和消息队列失败
推荐文章
1
RT-Thread应用项目汇总
2
玩转RT-Thread系列教程
3
国产MCU移植系列教程汇总,欢迎查看!
4
机器人操作系统 (ROS2) 和 RT-Thread 通信
5
五分钟玩转RT-Thread新社区
6
【技术三千问】之《玩转ART-Pi》,看这篇就够了!干货汇总
7
关于STM32H7开发板上使用SDIO接口驱动SD卡挂载文件系统的问题总结
8
STM32的“GPU”——DMA2D实例详解
9
RT-Thread隐藏的宝藏之completion
10
【ART-PI】RT-Thread 开启RTC 与 Alarm组件
最新文章
1
RT-thred的stm32h723对应bsp包CubeMX添加其他外设报错
2
RT-Thread中的time溢出问题,时间戳溢出,解决方法
3
ART-PI使用env驱动ETH网卡,pc和板子可以ping通
4
SystemView线程名字不显示
5
只用网页也能跑RT-Smart 无门槛腾讯Cloud studio + smart-build快速构建
热门标签
RT-Thread Studio
串口
Env
LWIP
SPI
AT
Bootloader
Hardfault
CAN总线
FinSH
ART-Pi
DMA
USB
文件系统
RT-Thread
SCons
RT-Thread Nano
线程
MQTT
STM32
RTC
FAL
rt-smart
I2C_IIC
ESP8266
UART
cubemx
WIZnet_W5500
ota在线升级
PWM
BSP
flash
freemodbus
packages_软件包
潘多拉开发板_Pandora
定时器
ADC
GD32
flashDB
socket
编译报错
中断
Debug
rt_mq_消息队列_msg_queue
keil_MDK
ulog
SFUD
msh
C++_cpp
MicroPython
本月问答贡献
RTT_逍遥
8
个答案
2
次被采纳
三世执戟
7
个答案
1
次被采纳
KunYi
6
个答案
1
次被采纳
winfeng
2
个答案
1
次被采纳
chenyaxing
2
个答案
1
次被采纳
本月文章贡献
catcatbing
2
篇文章
5
次点赞
swet123
1
篇文章
3
次点赞
YZRD
1
篇文章
2
次点赞
Days
1
篇文章
2
次点赞
阳光的掌控者
1
篇文章
1
次点赞
回到
顶部
发布
问题
分享
好友
手机
浏览
扫码手机浏览
投诉
建议
回到
底部