Toggle navigation
首页
问答
文章
积分商城
专家
专区
更多专区...
文档中心
返回主站
搜索
提问
会员
中心
登录
注册
删除线程
动态线程
碰见一个超级奇怪的问题,我线程执行完任务后,把它删除,但是调试的时候,把打印关了就会报错,打开调试就不会报错
发布于 2024-10-28 15:11:14 浏览:48
订阅该版
任务里面的函数都是空的,我全注释了,就是打开了两个信号量和三个线程,第一个信号量是触碰按键,然后开始创建测试模块的线程,第二个信号量是用来控制管理创建线程的,只有模块的测试线程接收,并删除了该线程,才释放信号量,然后管理线程得到信号量在创建信号量,问题是我调试的时候,把rt_kprintf("22222\n");注释就会报错,打开就没事,百思不得其解。 ```c ##include "myhead.h" //定义信号量的句柄 rt_sem_t dynamic_sem = RT_NULL; rt_sem_t lvgl_test_sem = RT_NULL; static rt_thread_t manager_thread; void drv_servo_lvgl_set(void) { rt_sem_release(lvgl_test_sem); //lv_label_set_text(guider_ui.screen_servo_label_sw4, "begin"); } void test_current_entry(void *parameter) { rt_uint32_t select_mode; // select_mode = (rt_uint32_t)parameter; while(1) { if(select_mode == 0) { static_ele_pwm(); goto err; } else{ static_ele_serial(); goto err; } err: //rt_kprintf("22222\n"); //rt_thread_mdelay(1000); rt_sem_release(dynamic_sem); //释放信号量 rt_thread_t get_threadid =rt_thread_self(); rt_thread_delete(get_threadid); //rt_thread_mdelay(100); } } void test_voltage_entry(void *parameter) { rt_uint32_t select_mode; select_mode = (rt_uint32_t)parameter; while(1) { // if(select_mode == 0) // { // static_ele_pwm(); // goto err; // } // else{ // // static_ele_serial(); // goto err; // } // // err: // rt_sem_release(dynamic_sem); //释放信号量 // rt_thread_t get_threadid =rt_thread_self(); // rt_thread_delete(get_threadid); rt_kprintf("33333\n"); rt_thread_mdelay(1000); } } test_module_t test_modules[TEST_MODULE_NUMBER] = { {test_current_entry, "current_thread",RT_NULL}, {test_voltage_entry, "voltage_thread",RT_NULL}, //添加更多测试模块... }; static void manager_thread_entry(void *parameter) { while(1){ rt_sem_take(lvgl_test_sem, RT_WAITING_FOREVER); // rt_kprintf("1111\n"); //rt_sem_delete(lvgl_test_sem); for (int i = 0; i < TEST_MODULE_NUMBER; i++) { rt_thread_t thread = rt_thread_create(test_modules[i].thread_name, test_modules[i].entry_func, test_modules[i].parameter, 1024, // 线程栈大小 25, // 线程优先级 10); // 时间片 if (thread != RT_NULL) { rt_thread_startup(thread); } else { rt_kprintf("Failed to create thread for module %s\n", test_modules[i].thread_name); } rt_sem_take(dynamic_sem, RT_WAITING_FOREVER); // 等待线程完成(这里可以添加同步机制,例如使用事件或者信号量) rt_thread_mdelay(1000); // 假设每个线程执行时间不超过1100ms } rt_thread_t get_threadid =rt_thread_self(); rt_thread_delete(get_threadid); rt_kprintf("All test modules have been executed.\n"); } } int Ps_Create_Init(void) { lv_label_set_text(guider_ui.screen_servo_label_sw4, "begin"); dynamic_sem = rt_sem_create("dsem", 0, RT_IPC_FLAG_PRIO); //创建线程信号量 if (dynamic_sem == RT_NULL) { rt_kprintf("create dynamic semaphore failed.\n"); return -1; } lvgl_test_sem = rt_sem_create("lvgl_sem", 0, RT_IPC_FLAG_PRIO); //创建lvgl的ui界面信号里 if (lvgl_test_sem == RT_NULL) { rt_kprintf("create dynamic semaphore failed.\n"); return -1; } // 创建管理线程 manager_thread = rt_thread_create("manager_thread", manager_thread_entry, RT_NULL, 1024, // 栈大小 20, // 优先级 10); // 时间片 if (manager_thread != RT_NULL) { rt_thread_startup(manager_thread); } return 0; } INIT_APP_EXPORT(Ps_Create_Init); ``` ![企业微信截图_17300994341297.png](https://oss-club.rt-thread.org/uploads/20241028/0ce09eddd48216be063a751db95ce713.png)
查看更多
1
个回答
默认排序
按发布时间排序
红枫
认证专家
5小时前
这家伙很懒,什么也没写!
#### 释放空指针信号量?使用前未做初始化的指针就是野指针。对野指针进行赋值操作多半会系统崩溃。
撰写答案
登录
注册新账号
关注者
0
被浏览
48
关于作者
zyy_
这家伙很懒,什么也没写!
提问
7
回答
1
被采纳
0
关注TA
发私信
相关问题
1
对已删除的线程如何重新创建?
2
main()结束后如何自己删除
3
rt-thread 如何结束并释放一个 死循环线程
4
想实现个删除线程(kill)的msh命令,有哪些注意事项
5
删除线程后线程还能运行
6
rt_thread_create(),线程执行完会回收线程栈资源吗
7
rt-4.1.0Bete版线程中使用mdelay后,线程结束时无法被回收?
8
线程状态为close 怎么从list thread 中删掉呢
9
rt_object_init陷入了死循环?
10
A线程删除被邮箱永久挂起的B线程有没有问题?
推荐文章
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
W5500+RTThead+mongoose实现WEB服务器
2
关于ota固件使用压缩算法的情况下,修复qboot release sing 一个比较关键的bug的问题
3
【已更新】【bsp】【nRF5x】使用jlink+Cortex-Debug+studio-mdk-bridge实现vscode开发mdk5项目
4
【1024】【ci】【github】【bsp】RT-THREAD中的attach文件使用(开启对应配置的CI检查)
5
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
I2C_IIC
WIZnet_W5500
ota在线升级
UART
cubemx
PWM
flash
packages_软件包
freemodbus
BSP
潘多拉开发板_Pandora
定时器
ADC
GD32
flashDB
socket
中断
Debug
编译报错
msh
keil_MDK
SFUD
rt_mq_消息队列_msg_queue
C++_cpp
at_device
ulog
本月问答贡献
用户名由3_15位
18
个答案
3
次被采纳
张世争
8
个答案
3
次被采纳
rv666
11
个答案
2
次被采纳
加缪
16
个答案
1
次被采纳
a1012112796
8
个答案
1
次被采纳
本月文章贡献
alight
3
篇文章
10
次点赞
AJS琥珀清年
2
篇文章
5
次点赞
Cfly
1
篇文章
12
次点赞
Ghost_Girls
1
篇文章
8
次点赞
qq1078249029
1
篇文章
5
次点赞
回到
顶部
发布
问题
分享
好友
手机
浏览
扫码手机浏览
投诉
建议
回到
底部