SylixOS 动态关核架构流程
SylixOS 动态关核架构流程
1.
SylixOS
动态关核接口
SylixOS
支持动态关核操作,通过如下应用函数;
VOID Lw_PowerM_CpuSet(ULONG ulNCpus, UINT uiPowerLevel);
函数
Lw_PowerM_CpuSet
原型分析:
参数
ulNCpus
是运行态的
CPU
核个数;
参数
uiPowerLevel
是
CPU
能耗级别。
2.
基本流程
系统函数调用流程如
图
2.1
:
(1)
Lw_PowerM_CpuSet( )
,设置关核个数,判断设置运行态的核数与启动的核数是否相等,如果小于,则关闭一些核,判断将要关闭的核是否在运行
API_CpuIsUp
(),如果是则调用API_CpuDown()。
(2)
API_CpuDown(),通过
LW_CPU_ADD_IPI_PEND2
()设置将要关闭的核的
CPU_iIPIPend
为
LW_IPI_DOWN_MSK
,
关闭与此 CPU 有关的亲和度
_ThreadOffAffinity
(),
使用核间中断通知 CPU 停止
_SmpSendIpi
()。
(3)
SmpSendIpi
(),调用核间中断函数xxx
MpInt
()响应核间中断,通知关闭核,xxx
IntEntry
中断入口函数,调用
API_InterExit
()中断出口函数;
(4)
API_InterExit
()调用
__kernelSchedInt
();
kernelSchedInt
调用
_ScheduleInt
()尝试调度;
(5)
在
_ScheduleInt
()判断是pend
位是否是
LW_IPI_DOWN_MSK
,如果是进入
_SchedCpuDown
()函数;
(6)
_SchedCpuDown
()先停止
CPU _CpuInactive
()
,
禁能数据和指令
CACHE
API_CacheDisable
,在关闭
MMU API_VmmMmuDisable
(),再清除
CPU pend
关闭标志位
最后调用
bspCpuDown
关闭核。
Related Articles
SylixOS 功能介绍及版本差异
SylixOS功能介绍及版本差异 SylixOS 标准版 SylixOS 标准版是 SylixOS 的基础版本,具备如下功能: 兼容 IEEE 1003(ISO/IEC 9945)操作系统接口规范; 兼容 POSIX 1003.1b(ISO/IEC 9945-1)实时编程标准; 支持国军标 GJB7714-2012 操作系统接口规范; 优秀的实时性能(任务调度与切换算法时间复杂度为 O(1)); 支持无限多任务; 抢占式调度支持 256 个优先级; 支持虚拟进程; ...
SylixOS lite 版—基于 STM32F767 资源使用情况
1、基本概念 代码段(text):顾名思义,代码存放的位置,在 STM32 中代码段一般存放于内置 FLASH 中; 已初始化数据段(data):已初始化数据段会分别体现在 FlASH 中和 RAM 中。因为是全局变量,运行过程中需要进行读写操作,因此占用一段 RAM 空间。又因为有初始值,其初始值需要占用 FlASH 空间。 未初始化的数据段(bss):bss 与 data 相同的地方时它也是全局变量,运行过程中需要进行读写操作,因此占用一段 RAM ...
error: xxx-sylixos-elf-lzocom.exe
Q:IDE 在编译工程时出现:xxxx-sylixos-elf-lzocom.exe 应用程序出错。 应用程序无法正常启动(0xc000007b)。请单击“确定”关闭应用程序。信息如下图所示。 安装 vc2010_redist_x86.exe 即可解决此问题, 此文件在 IDE 软件安装包的 Tools 目录下(如 SylixOS IDE 3.9.11_professional\Tools) 。
手动修改 SylixOS 工程类型的方法
问题描述: 当我们想要通过 IDE 重新选择已有 SylixOS Project 的 base 时,如果 base 的类型需要变化,会遇到如下图所示的问题"SylixOS Base project invalid",导致无法选择想要的base。 问题原因: 当base类型变化了,创建SylixOS Project时,工程设置里设定了base的类型。 解决方法一: ...
SylixOS 动态库更新 version 不一致的问题
Q:SylixOS 动态库更新 version 不一致的问题 首先 SylixOS 是允许多个进程对共享库文件进行代码段共享的(默认是共享打开的,可以使用 dlconfig share dis 命令进行关闭),代码段共享会出现一个问题:当 A 进程 使用一个 share.so 共享库的时候,B 进程也使用 该 share.so 的共享库,share.so 共享库因为 B 的原因需要修改,修改后,更新share.so文件,然后重启 B 进程,一般来说会出现错误,错误如下: ...