-
Notifications
You must be signed in to change notification settings - Fork 5.3k
修复任务丢失,性能优化 #10355
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
修复任务丢失,性能优化 #10355
Conversation
|
test.zip |
|
这个代码因为修改幅度比较大,所以整个文件做了格式化操作。还有已经过了测试,稳定性没问题。 |
|
因为调度代码被执行的比较频繁,所以做了性能优化,cortex-m4在100mhz 下性能最低提升15% |
|
你们可以先跑这个文件的稳定性,完全没问题在拉入。我已经测试了10多天了。 |
|
不同的PR,可以用不同的分支名称,不需要放到一起。 |
|
CI有编译报错,请先解决下: 代码可以用:formatting 脚本格式化下 |
| rt_ubase_t highest_ready_priority; | ||
|
|
||
| to_thread = _scheduler_get_highest_priority_thread(&highest_ready_priority); | ||
| _scheduler_update_highest_priority(); |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
这里为什么需要先更新最高优先级的任务?什么情况下,需要手动更新这个?
ok |
我测试了famatting 和clang-format效果一样 |
This reverts commit 2774d65.
📌 Code Review Assignment🏷️ Tag: kernelPath: Changed Files (Click to expand)
📊 Current Review Status (Last Updated: 2025-06-11 05:07 UTC)
📝 Review Instructions
|
|
建议先描述一下本次PR要解决什么问题,以及解决方案是什么?以便reviewer能更容易理解修改代码的意图。@htl5241 |
不停的新建任务,退出任务,就会丢失任务。还有就是优化性能,这次pr性能提升很多。 |
还有就是你看这个pr都描述了,还有其他维护人员留了两行字就不见了。 |
src/scheduler_up.c
Outdated
| #include <rtdbg.h> | ||
|
|
||
| rt_list_t rt_thread_priority_table[RT_THREAD_PRIORITY_MAX]; | ||
| rt_list_t rt_thread_priority_table[RT_THREAD_PRIORITY_MAX]; |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
多余空格请去掉。
src/scheduler_up.c
Outdated
| extern volatile rt_atomic_t rt_interrupt_nest; | ||
| static rt_int16_t rt_scheduler_lock_nest; | ||
| rt_uint8_t rt_current_priority; | ||
| static rt_int16_t rt_scheduler_lock_nest; |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
同上,去掉多余空格。
src/scheduler_up.c
Outdated
| { | ||
| #if RT_THREAD_PRIORITY_MAX > 32 | ||
| RT_SCHED_PRIV(thread).number = RT_SCHED_PRIV(thread).current_priority >> 3; /* 5bit */ | ||
| RT_SCHED_PRIV(thread).number = RT_SCHED_PRIV(thread).current_priority >> 3; /* 5bit */ |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
同上,去掉多余空格。
src/scheduler_up.c
Outdated
| RT_SCHED_PRIV(thread).high_mask = 1L << (RT_SCHED_PRIV(thread).current_priority & 0x07); /* 3bit */ | ||
| RT_SCHED_PRIV(thread).high_mask = | ||
| 1L | ||
| << (RT_SCHED_PRIV(thread).current_priority & 0x07); /* 3bit */ |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
这行代码不必要分成三行。
src/scheduler_up.c
Outdated
| RT_SCHED_PRIV(thread).number_mask = 0; | ||
| #if RT_THREAD_PRIORITY_MAX > 32 | ||
| RT_SCHED_PRIV(thread).number = 0; | ||
| RT_SCHED_PRIV(thread).number = 0; |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
同上,空格问题。
src/scheduler_up.c
Outdated
|
|
||
| /* tick init */ | ||
| RT_SCHED_PRIV(thread).init_tick = tick; | ||
| RT_SCHED_PRIV(thread).init_tick = tick; |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
同上,空格问题。
src/scheduler_up.c
Outdated
| if (critical_level != rt_scheduler_lock_nest) | ||
| { | ||
| int dummy = 1; | ||
| int dummy = 1; |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
同上,不必要的空格。
|
clang-format.zip |
|
src/scheduler_up.c
Outdated
| { | ||
| if (rt_thread_self()) | ||
| { | ||
| if (rt_thread_self()) { |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
根据rt_thread的编码规范,花括号应独占一行。这里需要回退。
src/scheduler_up.c
Outdated
|
|
||
| for (offset = 0; offset < RT_THREAD_PRIORITY_MAX; offset ++) | ||
| { | ||
| for (offset = 0; offset < RT_THREAD_PRIORITY_MAX; ++offset) { |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
同上,花括号独占一行。
src/scheduler_up.c
Outdated
| { | ||
| need_insert_from_thread = 1; | ||
| } | ||
| if (rt_scheduler_lock_nest == 0 && rt_thread_ready_priority_group) { |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
花括号独占一行。
src/scheduler_up.c
Outdated
| need_insert_from_thread = RT_FALSE; | ||
| curr_thread = rt_thread_self(); | ||
|
|
||
| if ((RT_SCHED_CTX(curr_thread).stat & RT_THREAD_STAT_MASK) == RT_THREAD_RUNNING) { |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
花括号独占一行,代码中其它同样的情况请一并修改。
你们如果不接收我也没必要和你们来回扯皮,给你们复现的程序自己去测试。 |
|
给复现程序了,自己不去复现,性能也不去做测试,只卡你能不能融入主线。还有就是项目这样那样限制你格式,那就提供能用的clang-format。所以说国内的开源项目特抽象。 |
|
scheduler_up.zip |




拉取/合并请求描述:(PR description)
[
为什么提交这份PR (why to submit this PR)
你的解决方案是什么 (what is your solution)
请提供验证的bsp和config (provide the config and bsp)
]
当前拉取/合并请求的状态 Intent for your PR
必须选择一项 Choose one (Mandatory):
代码质量 Code Quality:
我在这个拉取/合并请求中已经考虑了 As part of this pull request, I've considered the following:
#if 0代码,不包含已经被注释了的代码 All redundant code is removed and cleaned up