Toggle navigation
首页
问答
文章
积分商城
专家
专区
更多专区...
文档中心
返回主站
搜索
提问
会员
中心
登录
注册
RT-Thread一般讨论
关于看门狗实验的栈溢出问题
发布于 2020-07-01 17:17:22 浏览:2088
订阅该版
使用RT-Thread studio 验证看门狗的实验,使用网站里面提供的例程,遇到如下问题 ![1593594842(1).png](/uploads/202007/01/171513v2us9fzcztfzbu1h.png) 部分源码如下 static int wdt_sample(int argc, char *argv[]) { rt_err_t ret = RT_EOK; rt_uint32_t timeout = 1; /* 溢 出 时 间, 单 位: 秒 */ char device_name[RT_NAME_MAX]; /* 判 断 命 令 行 参 数 是 否 给 定 了 设 备 名 称 */ if (argc == 2) { rt_strncpy(device_name, argv[1], RT_NAME_MAX); } else { rt_strncpy(device_name, WDT_DEVICE_NAME, RT_NAME_MAX); } /* 根 据 设 备 名 称 查 找 看 门 狗 设 备, 获 取 设 备 句 柄 */ wdg_dev = rt_device_find(device_name); if (!wdg_dev) { rt_kprintf("find %s failed!
", device_name); return RT_ERROR; } /* 初 始 化 设 备 */ ret = rt_device_init(wdg_dev); if (ret != RT_EOK) { rt_kprintf("initialize %s failed!
", device_name); return RT_ERROR; } /* 设 置 看 门 狗 溢 出 时 间 */ ret = rt_device_control(wdg_dev, RT_DEVICE_CTRL_WDT_SET_TIMEOUT, &timeout); if (ret != RT_EOK) { rt_kprintf("set %s timeout failed!
", device_name); return RT_ERROR; } /* 启 动 看 门 狗 */ ret = rt_device_control(wdg_dev, RT_DEVICE_CTRL_WDT_START, RT_NULL); if (ret != RT_EOK) { rt_kprintf("start %s failed!
", device_name); return -RT_ERROR; } /* 设 置 空 闲 线 程 回 调 函 数 */ rt_thread_idle_sethook(idle_hook); return ret; } /* 导 出 到 msh 命 令 列 表 中 */ MSH_CMD_EXPORT(wdt_sample, wdt sample); int main(void) { int count = 1; // wdt_sample(); while (count++) { // LOG_D("Hello RT-Thread!"); rt_thread_mdelay(100); if(count==5) { count=1; // rt_device_control(wdg_dev, RT_DEVICE_CTRL_WDT_KEEPALIVE, NULL); } } return RT_EOK; } 使用msh>wdt_sample 调用,这个是什么原因?请高人解答,谢谢!
查看更多
11
个回答
默认排序
按发布时间排序
红枫
认证专家
2020-07-01
这家伙很懒,什么也没写!
调用了打印函数的原因,打印函数用堆栈空间较大
红枫
认证专家
2020-07-01
这家伙很懒,什么也没写!
不是栈溢出立马就出异常的,只有在溢出部分被其它线程修改或被使用才会表现出异常来
红枫
认证专家
2020-07-01
这家伙很懒,什么也没写!
空闲线程堆栈太小了,改大些就没事啦!
guanghui_8
2020-07-01
这家伙很懒,什么也没写!
>空闲线程堆栈太小了,改大些就没事啦! --- 我看了一下有256 #define IDLE_THREAD_STACK_SIZE 256 这个不小啊,应该不是这里的问题
红枫
认证专家
2020-07-01
这家伙很懒,什么也没写!
100%了啊!
guanghui_8
2020-07-01
这家伙很懒,什么也没写!
>100%了啊! --- :handshake,确实是这里的问题,把256 改成320就不会重新启动了,那么问题来了,这个栈怎么会满的呢,是rt_device_control函数里面的变量吗?函数运行完毕后会出栈啊?
guanghui_8
2020-07-01
这家伙很懒,什么也没写!
>这是显示的是目前最大,并不是实时动态显示 --- 我说的是idle函数的栈存储的应该是函数的参数值和局部变量,如果函数执行完毕那么栈空间就会释放,那怎么会把这256字节装满的呢?除非rt_device_control(wdg_dev, RT_DEVICE_CTRL_WDT_KEEPALIVE, NULL);一直归递调用,一会研究一下这个函数
guanghui_8
2020-07-01
这家伙很懒,什么也没写!
>调用了打印函数的原因,打印函数用堆栈空间较大 --- 但是为什么没有在第一次就栈溢出呢,溢出是在30几次之后
guanghui_8
2020-07-01
这家伙很懒,什么也没写!
>但是为什么没有在第一次就栈溢出呢,溢出是在30几次之后 --- 还有就是函数执行完毕后,局部变量出栈,下次在调用函数,函数的参数和局部变量不还是在以前的栈地址开始调用吗?按理说也不应该溢出啊
armink
2020-07-03
这家伙很懒,什么也没写!
@JQRR_7669 的分析很准确
撰写答案
登录
注册新账号
关注者
0
被浏览
2.1k
关于作者
guanghui_8
这家伙很懒,什么也没写!
提问
9
回答
12
被采纳
0
关注TA
发私信
相关问题
1
有关动态模块加载的一篇论文
2
最近的调程序总结
3
晕掉了,这么久都不见layer2的踪影啊
4
继续K9ii的历程
5
[GUI相关] FreeType 2
6
[GUI相关]嵌入式系统中文输入法的设计
7
20081101 RT-Thread开发者聚会总结
8
嵌入式系统基础
9
linux2.4.19在at91rm9200 上的寄存器设置
10
[转]基于嵌入式Linux的通用触摸屏校准程序
推荐文章
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
【24嵌入式设计大赛】基于RT-Thread星火一号的智慧家居系统
2
RT-Thread EtherKit开源以太网硬件正式发布
3
如何在master上的BSP中添加配置yml文件
4
使用百度AI助手辅助编写一个rt-thread下的ONVIF设备发现功能的功能代码
5
RT-Thread 发布 EtherKit开源以太网硬件!
热门标签
RT-Thread Studio
串口
Env
LWIP
SPI
AT
Bootloader
Hardfault
CAN总线
FinSH
ART-Pi
USB
DMA
文件系统
RT-Thread
SCons
RT-Thread Nano
线程
MQTT
STM32
RTC
FAL
rt-smart
ESP8266
I2C_IIC
WIZnet_W5500
UART
ota在线升级
PWM
cubemx
freemodbus
flash
packages_软件包
BSP
潘多拉开发板_Pandora
定时器
ADC
GD32
flashDB
socket
中断
Debug
编译报错
msh
SFUD
keil_MDK
rt_mq_消息队列_msg_queue
MicroPython
ulog
C++_cpp
本月问答贡献
踩姑娘的小蘑菇
7
个答案
3
次被采纳
a1012112796
15
个答案
2
次被采纳
张世争
9
个答案
2
次被采纳
rv666
5
个答案
2
次被采纳
用户名由3_15位
13
个答案
1
次被采纳
本月文章贡献
程序员阿伟
9
篇文章
2
次点赞
hhart
3
篇文章
4
次点赞
大龄码农
1
篇文章
5
次点赞
RTT_逍遥
1
篇文章
2
次点赞
ThinkCode
1
篇文章
1
次点赞
回到
顶部
发布
问题
分享
好友
手机
浏览
扫码手机浏览
投诉
建议
回到
底部