-
Notifications
You must be signed in to change notification settings - Fork 5.3k
Modify the logic of utest-smp_thread_preemptions and add comments #11012
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
base: master
Are you sure you want to change the base?
Changes from all commits
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
| Original file line number | Diff line number | Diff line change | ||||
|---|---|---|---|---|---|---|
|
|
@@ -17,13 +17,37 @@ | |||||
| * @note Create multiple threads, low-priority threads run first, | ||||||
| * high-priority threads preempt low-priority threads, and | ||||||
| * print the current status of each core in the thread's entry function. | ||||||
| * | ||||||
| * Test Case Name: [smp_thread_preemptions] | ||||||
| * | ||||||
| * Test Objectives: | ||||||
| * - Test the thread preemption logic under the SMP architecture | ||||||
| * | ||||||
| * Test Scenarios: | ||||||
| * - A high-priority thread thigh and a low-priority thread tlow are created. Since tlow is created | ||||||
| * - prior to thigh, it prints the thread list information first and then waits for the finish_flag | ||||||
| * - bit. Once thigh becomes ready, it preempts tlow, prints the thread list, and then sets the | ||||||
| * - finish_flag bit. After that, tlow exits the busy-wait loop. | ||||||
| * | ||||||
| * Verification Metrics: | ||||||
| * - First, the message "Low priority thread is running" will be displayed, followed immediately by | ||||||
| * - a thread_list information list. Subsequently, the message "High priority thread is running" will | ||||||
| * - appear, and in the thread_list that follows, the tlow thread can be observed in the ready state. | ||||||
| * | ||||||
| * Dependencies: | ||||||
| * - Enable RT_USING_SMP, set RT_THREAD_PRIORITY_MAX = 256. | ||||||
| * | ||||||
| * Expected Results: | ||||||
| * - You will see the message "[ PASSED ] [ result ] testcase (core.smp_thread_preemptions)", and observe | ||||||
| * - the tlow thread in the ready state in the thread_list printed by the thigh thread. | ||||||
| */ | ||||||
|
Comment on lines
+20
to
43
|
||||||
|
|
||||||
| #define THREAD_PRIORITY_HIGH 21 | ||||||
| #define THREAD_PRIORITY_LOW 30 | ||||||
| #define THREAD_STACK_SIZE UTEST_THR_STACK_SIZE | ||||||
|
|
||||||
| static rt_thread_t threads[2]; | ||||||
| static rt_uint8_t finish_flag = 0; | ||||||
|
||||||
| static rt_uint8_t finish_flag = 0; | |
| static volatile rt_uint8_t finish_flag = 0; |
Copilot
AI
Dec 7, 2025
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.
🟠 Performance Issue: Busy-Wait Loop / 性能问题:忙等待循环
English: The busy-wait loop while(!finish_flag); at line 74 continuously consumes CPU cycles without yielding, which is inefficient and can interfere with test execution on SMP systems. This is particularly problematic in an embedded RTOS context where CPU resources are precious.
Recommended Solution:
Use RT-Thread synchronization primitives instead of busy-waiting. For example:
- Use
rt_sem_torrt_event_tfor proper thread synchronization - This will allow the low-priority thread to block properly and yield CPU time
中文:第74行的忙等待循环 while(!finish_flag); 持续消耗 CPU 周期而不让出控制权,这是低效的,并且可能干扰 SMP 系统上的测试执行。在嵌入式 RTOS 环境中,CPU 资源宝贵,这尤其成问题。
建议的解决方案:
使用 RT-Thread 同步原语而不是忙等待。例如:
- 使用
rt_sem_t或rt_event_t进行正确的线程同步 - 这将允许低优先级线程正确阻塞并让出 CPU 时间
Example / 示例:
// Use semaphore instead
static rt_sem_t finish_sem;
// In init:
rt_sem_init(&finish_sem, "finish", 0, RT_IPC_FLAG_FIFO);
// In thread_high_entry:
rt_sem_release(&finish_sem);
// In thread_low_entry:
rt_sem_take(&finish_sem, RT_WAITING_FOREVER);
Copilot
AI
Dec 7, 2025
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.
🟡 Code Style Issue: Missing Space / 代码风格问题:缺少空格
English: According to RT-Thread coding standards, there should be a space after while keyword and before the opening parenthesis. The code has while(!finish_flag) but should be while (!finish_flag).
中文:根据 RT-Thread 编码规范,while 关键字后面和开括号前应该有一个空格。代码中是 while(!finish_flag),应该是 while (!finish_flag)。
Example / 示例:
while (!finish_flag);
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.
[nitpick] 🟡 Documentation Issue: Comment Formatting / 文档问题:注释格式
English: The multi-line comments starting with "- " on lines 27-30 and 33-35 are inconsistent with the rest of the documentation block. Standard documentation style would not have the leading "- " on continuation lines, or should consistently use bullet points throughout.
中文:第27-30行和第33-35行以 "- " 开头的多行注释与文档块的其余部分不一致。标准文档风格不应在续行上有前导 "- ",或应始终使用项目符号。
Suggested Format / 建议格式: