Toggle navigation
首页
问答
文章
积分商城
专家
专区
更多专区...
文档中心
返回主站
搜索
提问
会员
中心
登录
注册
RT_Object_Class_Thread
线程type
detach线程
10
一个线程的type反复横跳,RT_Object_Class_Thread问题
发布于 2020-08-14 21:11:28 浏览:2275
订阅该版
调试出错结果是这样的: (rt_object_get_type((rt_object_t)thread) == RT_Object_Class_Thread) assertion failed at function:rt_thread_detach 意思就是detach函数里面,的(rt_object_get_type((rt_object_t)thread) == RT_Object_Class_Thread)错误。 也就是这条语句执行失败:RT_ASSERT(rt_object_get_type((rt_object_t)thread) == RT_Object_Class_Thread); 下面是我写的代码: ```c 1:rt_kprintf("%d,%s,%d,%d,%d\n",temp_t,temp_t->name,temp_t->stat,rt_object_get_type((rt_object_t)temp_t),RT_Object_Class_Thread); 2:err = rt_thread_detach(temp_t); ``` 第一行分别输出了线程的地址,线程的名字(我起的名字叫“T3_sub0”),线程状态,通过get函数获得到的type类型值,RT_Object_Class_Thread的值, 然后detach我自己创建的线程 temp_t 我在thread.c里面rt_thread_detach函数一开始就加了如下输出了下信息: ```c if(rt_srtncmp(thread->name,"T3_sub0",7)) { rt_kprintf("%d\n",thread); rt_kprintf("%d\n",rt_object_get_type((rt_object_t)thread)); rt_kprintf("%d\n",RT_Object_Class_Thread); } ``` 然后运行系统,得到如下输出: 1:475044,T3_sub0,3,1,1 2:475044 3:0 4:1 第一行就对应我前面写的代码,线程地址,detach函数执行前后都一样,名称一样,线程状态3,get到的type为1,RT_Object_Class_Thread也为1 从第二行开始就进入detach函数了,看到,线程地址没变,就是我传进去的线程,但是! 但是! get到的线程type变成0了????!!!! 前面你也看到了,我刚get到的值,然后就进入detach函数了,一进detach函数就马上重新get,结果从1变成0了,没有任何其他的进程切换,上下文切换,线程抢占。为真么传进来函数就变了?即使通过我也查了系统硬件定时器的超时功能函数,都没有改变线程type的操作,为什么就变了????? 我写的已经很详细了,把我的试错和思路也加进去了一些,麻烦懂的人来看看,别问一些无关痛痒的问题。谢谢
查看更多
5
个回答
默认排序
按发布时间排序
nongxiaoming
2020-08-15
rt-thread大师兄
一般是栈爆了或者内存写穿了才导致这个出现这种情况,可能是任务栈爆了
chenyingchun
2020-08-18
这家伙很懒,什么也没写!
这位童鞋,即使你很流弊,即使别人回答的不是你希望的,你要知道,别人没有义务去给你做解答,给你做了解答,不管回答是否正确,至少别人是希望能帮到你,你这个与人相处的态度,真的不敢恭维
vitocc
2020-08-18
这家伙很懒,什么也没写!
这不是锁的问题,rtt的多核锁和linux的一模一样.首先不能理解你说的自旋锁的嵌套问题.自旋锁的退出的确会唤醒所有的等待锁的核心,但是他们被唤醒后就会检查自己的票是否对应.否则还会自旋.这就保证了资源的独一访问.再来说说你这个问题.你这应该是A核心线程在退出,并进行了object的脱离,这其中执行了"object->type = 0;",当然这是在临界区里面进行的.但是B核心此时在调用detach函数,你会发现rt_thread_detach函数一进入就对类型进行了断言.此时是没有去拿那个核间锁的,所以会出现这样的问题.而不是说自选锁的问题. 以上所答依据arm的票算法,riscv我刚看了,还是用的swap,如果你的是riscv,自己对照着看一下吧. 可能有纰漏,错误和我理解的不正确.暴躁老哥轻喷.
w501229485
2020-08-15
这家伙很懒,什么也没写!
别沉~呀
红枫
认证专家
2020-08-15
这家伙很懒,什么也没写!
```c rt_kprintf("%d,%s,%d,%d,%dn",temp_t,temp_t->name,temp_t->stat,rt_object_get_type((rt_object_t)temp_t),RT_Object_Class_Thread); ``` #### 这句有问题。 #### 线程名是没有结束符0的,直接当字符串指针使用可能会导致打印长度过长,造成打印缓存溢出,破坏其他数据。 #### 把这句注释掉试试脱离函数中的打印是否正确。
撰写答案
登录
注册新账号
关注者
0
被浏览
2.3k
关于作者
w501229485
这家伙很懒,什么也没写!
提问
18
回答
23
被采纳
0
关注TA
发私信
相关问题
1
tcp连接用posix线程模式,调用pthread_detach后挂起,是什么原因
推荐文章
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-Thread】【ci】【scons】将ci.attachconfig.yml和scons结合使用
2
Rt-thread中OTA下载后,bootloader不搬程序
3
ulog 日志 LOG_HEX 输出时间改为本地日期时间
4
在RT-Thread Studio中构建前执行python命令
5
研究一了一段时间RTT,直接标准版上手太难,想用nano,但又舍不得组件
热门标签
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
I2C_IIC
ESP8266
UART
WIZnet_W5500
ota在线升级
PWM
cubemx
flash
freemodbus
BSP
packages_软件包
潘多拉开发板_Pandora
定时器
ADC
flashDB
GD32
socket
编译报错
中断
Debug
rt_mq_消息队列_msg_queue
SFUD
msh
keil_MDK
ulog
C++_cpp
MicroPython
本月问答贡献
xusiwei1236
8
个答案
2
次被采纳
踩姑娘的小蘑菇
1
个答案
2
次被采纳
用户名由3_15位
7
个答案
1
次被采纳
bernard
4
个答案
1
次被采纳
RTT_逍遥
3
个答案
1
次被采纳
本月文章贡献
聚散无由
2
篇文章
15
次点赞
catcatbing
2
篇文章
5
次点赞
Wade
2
篇文章
3
次点赞
Ghost_Girls
1
篇文章
6
次点赞
YZRD
1
篇文章
2
次点赞
回到
顶部
发布
问题
分享
好友
手机
浏览
扫码手机浏览
投诉
建议
回到
底部