-
Notifications
You must be signed in to change notification settings - Fork 5k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
[bug][v4.1.0-beta] IIC 初始化出现断言 Function[rt_sem_take] shall not be used before scheduler start #5584
Comments
分析代码,以下代码也会出错
|
建议开启GCC 的编译参数"-W",开启后有不少的警告,有潜在的风险.而lwIP,即使开启"-Wall",一个警告也没有 |
@Guozhanxin 问题的关键不是iic,是mem,出出在这里已经定位到问题的原因了#4740 (comment) , iic出现断言只不过是个表象,看上面的链接,还有LED初始化的时候出现断言的。 |
我发现是没开ulog的问题,所以没复现,修了一个了。#5589 |
增加的那些检测,明面上告诉大家别这么用,但是,最终 rtt 带头违规使用,然后用 个人理解,ulog 和 malloc 的问题都可以通过调整系统初始化流程得到完美解决。 |
问题确实是启动流程的问题,但是由idle线程初始化串口和堆,感觉不太好弄,也不好兼容之前的版本 |
内核这块如果有大改动的话得动smart合并进来之后才能有大的改动,现在内核已经进入冻结状态了,尽量保持少量修改。否则并入smart会导致冲突。 |
idle 可以只负责启动 main timer 俩线程,线程栈还是可以控制在某个范围内。 兼容性问题,内核被 bsp 拖累了。 |
没关系,如果这个初始化更合理的话,在5.0.0版本中是可以大幅度修改的,但是需要等熊大那边把smart先并进来,现在只能先小幅度修改一下。 |
RT_ASSERT(RT_FALSE);
thread pri status sp stack size max used left tick error
-------- --- ------- ---------- ---------- ------ ---------- ---
hx1_pars 10 suspend 0x000000f0 0x00000800 15% 0x00000001 000
hx1_rev 8 ready 0x000000d8 0x00000800 14% 0x00000001 000
telnet 26 ready 0x00000048 0x00001000 01% 0x00000064 000
acon 19 ready 0x00000044 0x00000800 03% 0x00000064 000
ebThread 30 ready 0x00000048 0x00000100 28% 0x0000000a 000
phy 30 ready 0x00000048 0x00000400 07% 0x00000002 000
sys work 23 ready 0x00000084 0x00000af0 04% 0x0000000a 000
tcpip 10 suspend 0x000000f8 0x00000800 18% 0x00000014 000
etx 12 suspend 0x000000b4 0x00000800 08% 0x00000010 000
erx 12 suspend 0x000000c4 0x00000800 09% 0x00000010 000
tidle0 31 ready 0x00000064 0x00000400 10% 0x0000000a 000
main 10 running 0x00000348 0x00000c00 56% 0x00000012 000
Function[rt_sem_take]: scheduler is not available
thread pri status sp stack size max used left tick error
-------- --- ------- ---------- ---------- ------ ---------- ---
hx1_pars 10 suspend 0x000000f0 0x00000800 15% 0x00000001 000
hx1_rev 8 ready 0x000000d8 0x00000800 14% 0x00000001 000
telnet 26 ready 0x00000048 0x00001000 01% 0x00000064 000
acon 19 ready 0x00000044 0x00000800 03% 0x00000064 000
ebThread 30 ready 0x00000048 0x00000100 28% 0x0000000a 000
phy 30 ready 0x00000048 0x00000400 07% 0x00000002 000
sys work 23 ready 0x00000084 0x00000af0 04% 0x0000000a 000
tcpip 10 suspend 0x000000f8 0x00000800 18% 0x00000014 000
etx 12 suspend 0x000000b4 0x00000800 08% 0x00000010 000
erx 12 suspend 0x000000c4 0x00000800 09% 0x00000010 000
tidle0 31 ready 0x00000064 0x00000400 10% 0x0000000a 000
main 10 running 0x00000348 0x00000c00 62% 0x00000012 000
Function[rt_sem_take]: scheduler is not available
thread pri status sp stack size max used left tick error
-------- --- ------- ---------- ---------- ------ ---------- ---
hx1_pars 10 suspend 0x000000f0 0x00000800 15% 0x00000001 000
hx1_rev 8 ready 0x000000d8 0x00000800 14% 0x00000001 000
telnet 26 ready 0x00000048 0x00001000 01% 0x00000064 000
acon 19 ready 0x00000044 0x00000800 03% 0x00000064 000
ebThread 30 ready 0x00000048 0x00000100 28% 0x0000000a 000
|
你再同步一下最新的代码 试一下 , 这个已经修掉了 |
我用的就是最新版的代码 49ccbdb |
先关掉 RT_DEBUG 吧。 |
调整系统初始化流程势在必行了 |
是 RT_ASSERT 调用了ulog,ulog 调用rt_sem_take 触发的 |
停用 CmBacktrace 可以了.但这个仍是问题 |
这个问题与初始化顺序无关吧? |
拉一下最新的代码,ulog的问题已经修复了 |
我用的就是最新版的代码 49ccbdb |
出问题的地方,任务调度还没运行呢吧。 看来,RT_ASSERT 里面也得添加个 |
在 |
这就不对了啊,这个时候调用 |
是因为这个 问题还是 |
@Guozhanxin 郭老师,俺建议组织社区开一次会吧,感觉这个问题没有彻底解决,包括讨论一下出出说的重新捋一下初始化流程这事。 |
可以啊,你来组织也一样,我还没仔细看cmbacktrace的问题呢,先搞个共享文档收集议题好了 |
信号量是特殊的,它被设计为在系统启动前也可以使用。已经还原了有关信号量的修改 #5682 |
这个在信号量部分的文档里面有说明嘛?为啥这样设计?。🤔
…---原始邮件---
发件人: ***@***.***>
发送时间: 2022年3月17日(周四) 下午2:50
收件人: ***@***.***>;
抄送: ***@***.***>;
主题: Re: [RT-Thread/rt-thread] [bug][v4.1.0-beta] IIC 初始化出现断言 Function[rt_sem_take] shall not be used before scheduler start (Issue #5584)
信号量是特殊的,它被设计为在系统启动前也可以使用。已经还原了有关信号量的修改 #5682
—
Reply to this email directly, view it on GitHub, or unsubscribe.
Triage notifications on the go with GitHub Mobile for iOS or Android.
You are receiving this because you are subscribed to this thread.Message ID: ***@***.***>
|
rt-thread/components/drivers/i2c/i2c_core.c
Line 33 in a0fadd4
The text was updated successfully, but these errors were encountered: