rt_thread操作系统线程调度器获取当前最高优先级线程算法.doc
文本预览下载声明
上一章大概分析了rt-thread操作系统的线程调度器的源码,此文具体来讲讲rt-thread在调试时,是如何获取获得当前最高优先级线程的算法过程。
之前已提到过,rt-thread采用了一个位图来实现此过程,在具体分析此过程之前,我们首先来看看此位图的结构及相关的一些参数变量。
1 位图结构及相关参数
1.1 位图结构
在rt-thread的源码文件scheduler.c中在一位图映射表,如下定义:
[cpp] view plaincopyprint?
const?rt_uint8_t?rt_lowest_bitmap[]?=??
{??
????/*?00?*/?0,?0,?1,?0,?2,?0,?1,?0,?3,?0,?1,?0,?2,?0,?1,?0,??
????/*?10?*/?4,?0,?1,?0,?2,?0,?1,?0,?3,?0,?1,?0,?2,?0,?1,?0,??
????/*?20?*/?5,?0,?1,?0,?2,?0,?1,?0,?3,?0,?1,?0,?2,?0,?1,?0,??
????/*?30?*/?4,?0,?1,?0,?2,?0,?1,?0,?3,?0,?1,?0,?2,?0,?1,?0,??
????/*?40?*/?6,?0,?1,?0,?2,?0,?1,?0,?3,?0,?1,?0,?2,?0,?1,?0,??
????/*?50?*/?4,?0,?1,?0,?2,?0,?1,?0,?3,?0,?1,?0,?2,?0,?1,?0,??
????/*?60?*/?5,?0,?1,?0,?2,?0,?1,?0,?3,?0,?1,?0,?2,?0,?1,?0,??
????/*?70?*/?4,?0,?1,?0,?2,?0,?1,?0,?3,?0,?1,?0,?2,?0,?1,?0,??
????/*?80?*/?7,?0,?1,?0,?2,?0,?1,?0,?3,?0,?1,?0,?2,?0,?1,?0,??
????/*?90?*/?4,?0,?1,?0,?2,?0,?1,?0,?3,?0,?1,?0,?2,?0,?1,?0,??
????/*?A0?*/?5,?0,?1,?0,?2,?0,?1,?0,?3,?0,?1,?0,?2,?0,?1,?0,??
????/*?B0?*/?4,?0,?1,?0,?2,?0,?1,?0,?3,?0,?1,?0,?2,?0,?1,?0,??
????/*?C0?*/?6,?0,?1,?0,?2,?0,?1,?0,?3,?0,?1,?0,?2,?0,?1,?0,??
????/*?D0?*/?4,?0,?1,?0,?2,?0,?1,?0,?3,?0,?1,?0,?2,?0,?1,?0,??
????/*?E0?*/?5,?0,?1,?0,?2,?0,?1,?0,?3,?0,?1,?0,?2,?0,?1,?0,??
????/*?F0?*/?4,?0,?1,?0,?2,?0,?1,?0,?3,?0,?1,?0,?2,?0,?1,?0??
};??
const rt_uint8_t rt_lowest_bitmap[] =
{
/* 00 */ 0, 0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0,
/* 10 */ 4, 0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0,
/* 20 */ 5, 0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0,
/* 30 */ 4, 0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0,
/* 40 */ 6, 0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0,
/* 50 */ 4, 0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0,
/* 60 */ 5, 0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0,
/* 70 */ 4, 0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0,
/* 80 */ 7, 0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0,
/* 90 */ 4, 0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0,
/* A0 */ 5, 0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0,
显示全部