RT-Thread 中还有一些 CPU 是没有支持 SMP 的,例如 Cortex-M 系列的大部分 CPU,练手的 PICO 是 M0 ,准备开发的 LPC55S69 是 M33,都是还没有支持 SMP 的。对于这样的平台移植 SMP 就会相对麻烦。除了 rt_hw_secondary_cpu_up() ,secondary_cpu_c_start() ,rt_hw_secondary_cpu_idle_exec() 这三个...
#ifdefined(RT_USING_SIGNALS)rt_sigset_t sig_pending;/**< the pending signals */rt_sigset_t sig_mask;/**< the mask bits of signal *//* 对称多处理器,多核才用,我们不用 */#ifndefRT_USING_SMPvoid*sig_ret;/**< the return stack pointer from signal */#endif rt_sighandler_t*sig_vec...
#ifdefined(RT_USING_SIGNALS)rt_sigset_t sig_pending;/**< the pending signals */rt_sigset_t sig_mask;/**< the mask bits of signal *//* 对称多处理器,多核才用,我们不用 */#ifndefRT_USING_SMPvoid*sig_ret;/**< the return stack pointer from signal */#endif rt_sighandler_t*sig_vec...
Kendryte K210是一款集成有2个64-bit RISC-V核心的通用AI芯片,要使用双核,需要开启RT_USING_SMP宏以启用RT-Thread的SMP(对称多处理)功能。 RT-Thread对于SMP的支持流程大概是:主核先启动,并完成对全局硬件、系统及自身的初始化,然后唤醒其他核,开始线程调度;其他核被唤醒后仅进行自身相关初始化后就可以就行线程...
SMP: 对称多处理(Symmetrical Multi-Processing)简称 SMP,是指在一个计算机上汇集了一组处理器 (多 CPU), 各 CPU 之间共享内存子系统以及总线结构。 RT-Thread 自 v4.0.0 版本开始支持 SMP,在对称多核上可以通过使能 RT_USING_SMP 来开启。该文档主要对 SMP 进行介绍,以及讲解如何移植 RT-Thread SMP 。
#ifdef RT_USING_SMP rt_hw_spin_lock(&_cpus_lock); #endif /*RT_USING_SMP*/ /* 启动调度器 */ rt_system_scheduler_start(); /* never reach here */ return 0; } 这部分启动代码,大致可以分为四个部分: 初始化与系统相关的硬件; ...
RT-Thread SMP 启动流程 首先是主 CPU(一下简称 CPU0 )进入到 RT-Thread 的初始化,其他的 CPU 需要通过 CPU0 唤醒,随后才进行各自的初始化( CPU0 只负责唤醒,次级 CPU 自身硬件部分的初始化不能由 CPU0 完成),流程图如下 CPU0 和其余 CPU 的启动流程都如下图所示,( CPU0 完成初始后,执行 main 线程...
多核与单核的切换,在rtconfig.h文件中,使能或者关闭宏RT_USING_SMP即可打开/禁用SMP。 本文的RTThread中,启用了2个Core(主核Core0,一个从核Core1),如果需要启用更多的从核,可以在本文的基础上打开其余从核,其余从核的处理与Core1类似。 受限于时间和我的水平,本文在零零碎碎的时间里整理完,实现未必最优。而...
= rt_hw_cpu_id();#else rt_current_thread = to_thread;#endif /*RT_USING_SMP*/ ...
#ifdef RT_USING_SMP rt_hw_spin_lock(&_cpus_lock); #endif /*RT_USING_SMP*/ /* 启动调度器 */ rt_system_scheduler_start(); /* never reach here */ return 0; } 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. ...