Toggle navigation
首页
问答
文章
积分商城
专家
专区
更多专区...
文档中心
返回主站
搜索
提问
会员
中心
登录
注册
Kernel
关于线程创建时线程栈大小的问题!
发布于 2019-12-10 09:22:57 浏览:2067
订阅该版
在之前,项目工程较小时,创建线程没有考虑过rt_thread_init()和 rt_thread_create()两个函数中参数线程栈大小的问题,随着项目不断扩大,创建的线程增多,发现某个时刻用这两个函数创建线程失败或者运行时线程溢出情况,哪位大神能否解释下,如何在创建线程时确定当前线程的线程栈大小,谢谢!!
查看更多
5
个回答
默认排序
按发布时间排序
likun416889496
2019-12-10
这家伙很懒,什么也没写!
[i=s] 本帖最后由 aozima 于 2020-4-28 14:04 编辑 [/i] >先取一个较大值,用ps看看线程栈的占用情况,然后进行调整,占用情况差不多70%就可以了 ... --- ``` thread pri status sp stack size max used left tick error -------- --- ------- ---------- ---------- ------ ---------- --- tcpserve 21 ready 0x0000007c 0x00000400 37% 0x00000007 -02 thread2 5 suspend 0x00000089 0x00000200 70% 0x00000008 000 wiz_stat 28 suspend 0x000000ac 0x00000800 68% 0x00000013 000 wiz 5 suspend 0x00000094 0x00000200 35% 0x00000009 000 ``` 这个sp代表的是当前线程实际使用栈大小?
likun416889496
2019-12-10
这家伙很懒,什么也没写!
>是max used 那项表示线程栈的使用情况 --- 谢谢
aprilhome
2020-04-28
这家伙很懒,什么也没写!
>是max used 那项表示线程栈的使用情况 --- 我程序跑的时候,max-used一直在增长,这是什么情况呀?我是创建了一个定时器线程,用信号量与定时器中断同步。 ``` //线程:定时器中断处理 rt_thread_t hwtimer_thread = rt_thread_create("hwtimer_thread", hwtimer_thread_entry, RT_NULL, 1024, 22, 10); if (pm_thread != RT_NULL) { rt_thread_startup(hwtimer_thread); } else { return RT_ERROR; } rt_err_t timeout_callback(rt_device_t dev, rt_size_t size) { rt_kprintf("this is hwtimer timeout callback function\n"); rt_kprintf("tick is :%d\n", rt_tick_get()); rt_sem_release(g_hwtimer_sem); return 0; } /** * @function hwtimer中断执行线程 * @param void *parameter * @return void * @created Aprilhome,2019/4/19 **/ void hwtimer_thread_entry(void *parameter) { while (1) { rt_sem_take(g_hwtimer_sem, RT_WAITING_FOREVER); u4_printf("$takesample\r\n"); pm_printf("hwtimer15\r\n"); // rt_thread_mdelay(2); } } /** * @brief 定时器初始化为定时器模式 * @param const char *name:定时器名 float timeout:超时时间 * @retval * @logs * date author notes * 2020/4/16 Aprilhome **/ int init_timer(const char *name, float timeout) { rt_err_t ret = RT_EOK; /* 查找定时器设备 */ g_hw_dev = rt_device_find(name); if (g_hw_dev == RT_NULL) { rt_kprintf("find %s device failed!\n", name); return RT_ERROR; } /* 以读写方式打开设备 */ ret = rt_device_open(g_hw_dev, RT_DEVICE_OFLAG_RDWR); if (ret != RT_EOK) { rt_kprintf("open %s device failed!\n", name); return ret; } /* 设置超时回调函数 */ rt_device_set_rx_indicate(g_hw_dev, timeout_callback); /* 设置定时器 */ /* 计数频率(默认1MHz或支持的最小计数频率)*/ // rt_uint16_t freq = 10000; // ret = rt_device_control(g_hw_dev, HWTIMER_CTRL_FREQ_SET, &freq); // if (ret != RT_EOK) // { // rt_kprintf("set frequency failed, ret is :%d\n", ret); // return ret; // } /* 模式为周期性定时器 */ rt_hwtimer_mode_t mode = HWTIMER_MODE_PERIOD; ret = rt_device_control(g_hw_dev, HWTIMER_CTRL_MODE_SET, &mode); if (ret != RT_EOK) { rt_kprintf("set mode failed, ret is :%d\n", ret); return ret; } //初始化信号量 g_hwtimer_sem = rt_sem_create("hwtimer_sem", 0, RT_IPC_FLAG_FIFO); /* 设置超时值,并启动定时器 */ rt_hwtimerval_t timeout_s; /* 定时器超时值 */ timeout_s.sec = (rt_int32_t)timeout; timeout_s.usec = (rt_int32_t)((timeout - (rt_int32_t)timeout) * 1000000); if (rt_device_write(g_hw_dev, 0, &timeout_s, sizeof(timeout_s)) != sizeof(timeout_s)) { rt_kprintf("set timeout failed\n"); return RT_ERROR; } return ret; } ```
撰写答案
登录
注册新账号
关注者
0
被浏览
2.1k
关于作者
likun416889496
这家伙很懒,什么也没写!
提问
6
回答
16
被采纳
0
关注TA
发私信
相关问题
1
请教cpu使用率分析
2
选择FreeRTOS, 还是RT-Thread。
3
thread heap stack overflow ?
4
rtt消息队列delay问题
5
释放被删除线程的内存地方在哪里啊
6
请教:各线程结束后,释放其中的内存的连续性问题
7
STM32F103中断关于信号量、邮箱问题
8
RTT中的线程栈大小如何控制
9
关于线程由执行态变为挂起态的代码实现,,,
10
rt_malloc(rt_size_t size)内存分配函数最小分配尺寸问题
推荐文章
1
RT-Thread应用项目汇总
2
玩转RT-Thread系列教程
3
机器人操作系统 (ROS2) 和 RT-Thread 通信
4
国产MCU移植系列教程汇总,欢迎查看!
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
mcxn947 dht11温湿度采集
2
【24嵌入式设计大赛】基于RT-Thread星火1号的AI广告终端设计
3
基于stm32f407 芯片创建 rt-thread工程——使用Arduino兼容层RTduino
4
星火1号:CAN通信初步
5
【24嵌入式设计大赛】基于RT-Thread火星一号智能终端采集系统
热门标签
RT-Thread Studio
串口
Env
LWIP
SPI
AT
Bootloader
Hardfault
CAN总线
ART-Pi
FinSH
USB
文件系统
DMA
RT-Thread
SCons
RT-Thread Nano
线程
MQTT
STM32
RTC
FAL
rt-smart
ESP8266
ota在线升级
I2C_IIC
WIZnet_W5500
UART
flash
packages_软件包
cubemx
PWM
freemodbus
BSP
潘多拉开发板_Pandora
定时器
ADC
中断
flashDB
socket
Debug
GD32
编译报错
msh
keil_MDK
at_device
MicroPython
rt_mq_消息队列_msg_queue
ulog
C++_cpp
本月问答贡献
出出啊
1513
个答案
341
次被采纳
小小李sunny
1438
个答案
289
次被采纳
张世争
775
个答案
167
次被采纳
crystal266
546
个答案
161
次被采纳
whj467467222
1222
个答案
148
次被采纳
本月文章贡献
出出啊
1
篇文章
2
次点赞
小小李sunny
1
篇文章
1
次点赞
张世争
1
篇文章
2
次点赞
crystal266
2
篇文章
1
次点赞
whj467467222
2
篇文章
2
次点赞
回到
顶部
发布
问题
分享
好友
手机
浏览
扫码手机浏览
投诉
建议
回到
底部