LiteOS内核源码分析系列一(续) -数据结构之CPU核信息结构体Percpu
【摘要】 LiteOS提供一个结构体Percpu来记录每一个CPU的相关信息,包含任务排序链表,定时器排序刘安邦,锁任务调度标记、请求调度标记等。本文我们来一起学习下LiteOS``CPU核信息结构体Percpu的源代码。
LiteOS内核源码分析系列一 -数据结构之CPU核信息结构体Percpu
LiteOS
提供一个结构体Percpu
来记录每一个CPU
的相关信息,包含任务排序链表,定时器排序刘安邦,锁任务调度标记、请求调度标记等。本文我们来一起学习下LiteOS``CPU
核信息结构体Percpu
的源代码。文中所涉及的源代码,均可以在LiteOS
开源站点https://gitee.com/LiteOS/LiteOS 获取。相关源代码文件包括私有头文件kernel\base\include\los_percpu_pri.h、C
源代码文件kernel\base\los_percpu.c。
接下来,我们看下结构体Percpu
,及其相关的内联函数的源代码。
1.1 CPU核信息结构体Percpu定义
在文件kernel\base\include\los_percpu_pri.h
定义的CPU
核信息结构体Percpu
,源代码如下,结构体成员的解释见注释部分。
typedef struct {
SortLinkAttribute taskSortLink; /* 任务的排序链表 */
#ifdef LOSCFG_BASE_CORE_SWTMR
SortLinkAttribute swtmrSortLink; /* 软件定时器排序链表 */
#endif
UINT32 idleTaskId; /* idle空闲任务Id*/
UINT32 taskLockCnt; /* 锁任务调度标记 */
UINT32 swtmrHandlerQueue; /* 软件定时器队列Id */
UINT32 swtmrTaskId; /* 软件定时器任务Id */
UINT32 schedFlag; /* 请求调度标记 */
#ifdef LOSCFG_KERNEL_SMP
UINT32 excFlag; /* cpu halt或exc异常标记 */
#ifdef LOSCFG_KERNEL_SMP_CALL
LOS_DL_LIST funcLink; /* mp函数调用双向链表*/
#endif
#endif
} Percpu;
另外提供了2个内联函数,供调用当前CPU
核或指定CPU
核的Percpu
结构体变量。其中g_percpu
在文件kernel\base\los_percpu.c
中定义。
STATIC INLINE Percpu *OsPercpuGet(VOID)
{
return &g_percpu[ArchCurrCpuid()];
}
STATIC INLINE Percpu *OsPercpuGetByID(UINT32 cpuid)
{
return &g_percpu[cpuid];
}
小结
本文带领大家一起剖析了LiteOS
CPU
核信息结构体Percpu
的源代码,代码非常简单。感谢阅读,如有任何问题、建议,都可以留言给我们: https://gitee.com/LiteOS/LiteOS/issues 。为了更容易找到LiteOS
代码仓,建议访问 https://gitee.com/LiteOS/LiteOS ,关注Watch
、点赞Star
、并Fork
到自己账户下,如下图,谢谢。
【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱:
cloudbbs@huaweicloud.com
- 点赞
- 收藏
- 关注作者
评论(0)