资源描述:
《rt_thread操作系统的线程调度器获取当前最高优先级线程的算法》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、上一章大概分析了rt-thread操作系统的线程调度器的源码,此文具体来讲讲rt-thread在调试时,是如何获取获得当前最高优先级线程的算法过程。之前已提到过,rt-thread采用了一个位图来实现此过程,在具体分析此过程之前,我们首先来看看此位图的结构及相关的一些参数变量。1位图结构及相关参数1.1位图结构在rt-thread的源码文件scheduler.c中在一位图映射表,如下定义:[cpp]viewplaincopyprint?1.const rt_uint8_t rt_lowest_bitm
2、ap[] = 2.{ 3. /* 00 */ 0, 0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0, 4. /* 10 */ 4, 0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0, 5. /* 20 */ 5, 0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0, 6. /* 30 */ 4, 0, 1, 0, 2, 0, 1, 0, 3, 0, 1,
3、0, 2, 0, 1, 0, 7. /* 40 */ 6, 0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0, 8. /* 50 */ 4, 0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0, 9. /* 60 */ 5, 0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0, 10. /* 70 */ 4, 0, 1, 0, 2, 0, 1, 0, 3, 0,
4、 1, 0, 2, 0, 1, 0, 11. /* 80 */ 7, 0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0, 12. /* 90 */ 4, 0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0, 13. /* A0 */ 5, 0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0, 14. /* B0 */ 4, 0, 1, 0, 2, 0, 1, 0
5、, 3, 0, 1, 0, 2, 0, 1, 0, 15. /* C0 */ 6, 0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0, 16. /* D0 */ 4, 0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0, 17. /* E0 */ 5, 0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0, 18. /* F0 */ 4, 0, 1, 0, 2,
6、0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0 19.}; constrt_uint8_trt_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,
7、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
8、,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};从这里暂时我们看不出什么名堂出来,暂且跳过,且再看些与此位图相关的一些参数.1.2与位图相关的参数还是