wordpress修改站标在哪个文件网站建设与运营方案
2026/1/18 1:22:48 网站建设 项目流程
wordpress修改站标在哪个文件,网站建设与运营方案,广州 网站 建设,较好的网站建设公司关于uC/OS-II的几个Grp、Tbl、List、FreeList、WaitList真是让人头大#xff0c;于是我们开始分析#xff1a;uC/OS-II 的核心调度算法就是依赖以下5个表实现的 O(1) 时间复杂度的位图#xff08;Bitmap#xff09;算法。OSMapTbl[]、OSUnMapTbl[] 、OSRdyGrp[]、OSRdyTbl[…关于uC/OS-II的几个Grp、Tbl、List、FreeList、WaitList真是让人头大于是我们开始分析uC/OS-II 的核心调度算法就是依赖以下5个表实现的O(1)时间复杂度的位图Bitmap算法。OSMapTbl[]、OSUnMapTbl[] 、OSRdyGrp[]、OSRdyTbl[]、OSTCBPrioTbl[]文章分为静态查找表数据展示、动态状态表结构展示、逻辑关系图和具体实例四个部分。一、静态查找表这两个表的内容是固定不变的编译时就已经确定用于加速位运算直接查表就行了这就是Bitmap的精髓。1.OSMapTbl[8](位映射表)用途 用于将 0-7 的数字转换为对应的二进制位第 n 位置 1。大小 8 字节。索引 (Index)二进制 (Binary)十六进制 (Hex)作用00000 00010x01第 0 位置 110000 00100x02第 1 位置 120000 01000x04第 2 位置 130000 10000x08第 3 位置 140001 00000x10第 4 位置 150010 00000x20第 5 位置 160100 00000x40第 6 位置 171000 00000x80第 7 位置 12.OSUnMapTbl[256](优先级判定表)用途 给定一个 8 位的字节0-255快速找出最低位是 1 的位置即最高优先级的位。大小 256 字节。如何查表如果数值是0x56(即0101 0110)找到行5x和列x6的交叉点值为1因为0110最低为 1 的位是 bit 1。HEXx0x1x2x3x4x5x6x7x8x9xAxBxCxDxExF0x00102010301020101x40102010301020102x50102010301020103x40102010301020104x60102010301020105x40102010301020106x50102010301020107x40102010301020108x70102010301020109x4010201030102010Ax5010201030102010Bx4010201030102010Cx6010201030102010Dx4010201030102010Ex5010201030102010Fx4010201030102010二、动态状态表这两个表变量是随系统运行动态变化的记录了当前哪些任务是就绪的。1.OSRdyGrp(就绪组)类型 INT8U (8位变量)作用 这是一个行索引。如果第 i 位为 1说明第 i 组OSRdyTbl[i]里有任务就绪。Bit 7Bit 6Bit 5Bit 4Bit 3Bit 2Bit 1Bit 0Grp 7Grp 6Grp 5Grp 4Grp 3Grp 2Grp 1Grp 02.OSRdyTbl[8](就绪表)类型 INT8U 数组 (8个元素)作用 这是一个列索引。数组的每一个元素字节代表一组8个优先级。索引 (Grp)Bit 7Bit 6Bit 5Bit 4Bit 3Bit 2Bit 1Bit 0包含的优先级OSRdyTbl[0]765432100 ~ 7OSRdyTbl[1]151413121110988 ~ 15OSRdyTbl[2]232221201918171616 ~ 23OSRdyTbl[3]313029282726252424 ~ 31OSRdyTbl[4]393837363534333232 ~ 39OSRdyTbl[5]474645444342414040 ~ 47OSRdyTbl[6]555453525150494848 ~ 55OSRdyTbl[7]636261605958575656 ~ 633.OSTCBPrioTbl[64](TCB 指针表)类型 OS_TCB * (指针数组)作用 一旦通过上面的表计算出了优先级数值0-63因为uc/os ii的优先级是唯一的优先级就是任务ID直接用这个优先级数值拿到对应的 OSTCBPtr 指针。索引 (Priority)内容 (Value)0指向 Prio 0 的 TCB 内存地址 (或 NULL)1指向 Prio 1 的 TCB 内存地址 (或 NULL)......63指向 Prio 63 的 TCB 内存地址 (或 NULL)三、逻辑关系图这5个表构成了一个完整的任务调度流程。四、具体实例假设系统中有一个任务优先级为 11 (Priority 11) 要变为就绪态即OSTCBCur、OSPrioCur要指向它。我们需要看它如何改变这些表以及系统如何反向找到它。1.数据的拆分优先级 11 的二进制是 0000 1011。uC/OS-II 将其看作 00 YYY XXX。Y (高3位, 组索引):001(即 1) - 对应OSRdyTbl[1]X (低3位, 位索引):011(即 3) - 对应 Bit 32.放入就绪表 (使用OSMapTbl)代码逻辑OSRdyGrp | OSMapTbl[1]; // OSMapTbl[1] 是 0x02 (0000 0010) OSRdyTbl[1] | OSMapTbl[3]; // OSMapTbl[3] 是 0x08 (0000 1000)此时表的状态OSRdyGrp:0000 0010(第 1 位变 1表示第 1 组有任务)OSRdyTbl[1]:0000 1000(第 3 位变 1表示组内的 3 号偏移有任务)3.调度器查找最高优先级 (使用OSUnMapTbl)假设此时没有比 11 更高的优先级即OSRdyGrp的第 0 位是 0。1找组 (Y)查表y OSUnMapTbl[OSRdyGrp]即y OSUnMapTbl[0x02]查看上面的OSUnMapTbl矩阵Index 0x02 对应的值是 1。结论Y 1。2找位 (X)获取该组的数据val OSRdyTbl[y] - OSRdyTbl[1] - 0x08。查表x OSUnMapTbl[val]即x OSUnMapTbl[0x08]查看上面的OSUnMapTbl矩阵Index 0x08对应的值是 3。结论X 3。3合成优先级Prio (y 3) x即Prio (1 * 8) 3 114.获取 TCB (使用OSTCBPrioTbl)拿到 Prio 11 后CurrentTask OSTCBPrioTbl[11];这样就拿到了优先级为 11 的任务控制块指针可以进行上下文切换了。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询