uCOS-III 学习记录(6)——优先级表
参考内容:《[野火]uCOS-III内核实现与应用开发实战指南——基于STM32》第 11 章。
文章目录
- 1 优先级表的定义 OSPrioTbl(os_prio.c)
- 1.1 CPU_DATA——一个数组元素的数据长度为多少?(cpu.h)
- 1.2 OS_PRIO_TBL_SIZE——数组有多大?(os.h)
- 1.2.1 OS_CFG_PRIO_MAX——支持多少个优先级?(os_cfg.h)
- 1.2.2 DEF_INT_CPU_NBR_BITS——CPU 整型数据有多少位?(cpu_def.h)
- 1.3 优先级表的结构——定义好了以后?
- 2 初始化优先级表 OS_PrioInit()(os_prio.c)
- 3 置位优先级表中的相应位 OS_PrioInsert()(os_prio.c)
- 位运算求余——为什么求余操作可以这么写?
- 4 清除优先级表的相应位置 OS_PrioRemove()(os_prio.c)
- 5 查找最高优先级 OS_PrioGetHighest()(os_prio.c)
- 5.1 前导零和后导零
- 5.2 由 C 语言实现前导零 CPU_CntLeadZeros(cpu_core.c)
- 5.3 由汇编语言实现前导零 CPU_CntLeadZeros(cpu_a.asm)
- 5.4 完成剩余的工作
1 优先级表的定义 OSPrioTbl(os_prio.c)
在文件 os_prio.c 中定义优先级表,它是一个数组:
CPU_DATA OSPrioTbl[OS_PRIO_TBL_SIZE]; /* 定义优先级表 */
接下来着重理解 CPU_DATA 和 OS_PRIO_TBL_SIZE 的含义。
1.1 CPU_DATA——一个数组元素的数据长度为多少?(cpu.h)
在 cpu.h 中定义了 CPU_DATA 的类型为 unsigned int,也就是一个数组元素为 32 位:
typedef unsigned int CPU_INT32U;typedef CPU_INT32U CPU_DATA;
如果 MCU 的(字长)类型是 16 位、8 位或者 64 位,只需要把优先级表的数据类型 CPU_DATA 改成相应的位数即可。
1.2 OS_PRIO_TBL_SIZE——数组有多大?(os.h)
这个问题将会关系到优先级表有多大。在 os.h 中宏定义了 OS_PRIO_TBL_SIZE:
#define OS_PRIO_TBL_SIZE ( ((OS_CFG_PRIO_MAX - 1u) / DEF_INT_CPU_NBR_BITS) + 1u )
接下来,我们来讲讲 OS_CFG_PRIO_MAX 和 DEF_INT_CPU_NBR_BITS 的来由。
1.2.1 OS_CFG_PRIO_MAX——支持多少个优先级?(os_cfg.h)
在 os_cfg.h 中宏定义了 OS_CFG_PRIO_MAX。我们设置为 32,即最大支持 32 个优先级:
/* 支持最大的优先级 */
#define OS_CFG_PRIO_MAX 32u
1.2.2 DEF_INT_CPU_NBR_BITS——CPU 整型数据有多少位?(cpu_def.h)
DEF_INT_CPU_NBR_BITS 表示一个整型数据有多少位,在 cpu_def.h 定义:
/* CPU整型数位定义 */
#define DEF_INT_CPU_NBR_BITS (DEF_OCTET_NBR_BITS * CPU_CFG_DATA_SIZE)
- DEF_OCTET_NBR_BITS 表示一个字节长度是多少位,这里默认设置为 8 位,在 cpu_def.h 中已定义:
/* 一个字节长度为8位 */
#define DEF_OCTET_NBR_BITS 8u
- CPU_CFG_DATA_SIZE 表示 CPU 数据的字长相当于多少个字节。类似地,CPU_CFG_ADDR_SIZE 表示 CPU 地址的字长相当于多少个字节。在 cpu.h 中已定义:
/*********************************CPU字长配置**********************************/#define CPU_CFG_ADDR_SIZE CPU_WORD_SIZE_32
#define CPU_CFG_DATA_SIZE CPU_WORD_SIZE_32
#define CPU_CFG_DATA_SIZE_MAX CPU_WORD_SIZE_64
- 而 CPU_WORD_SIZE_32 又在 cpu_def.h 中已定义,表示 32 位长度在这种设置下被定义为 4 个字节:
#define CPU_WORD_SIZE_08 1u
#define CPU_WORD_SIZE_16 2u
#define CPU_WORD_SIZE_32 4u
#define CPU_WORD_SIZE_64 8u
因此,DEF_INT_CPU_NBR_BITS = DEF_OCTET_NBR_BITS * CPU_CFG_DATA_SIZE = 8(一个字节有 8 位) * 4(4 个字节) = 32
,说明 CPU 整型数据有 32 位,即字长为 32。
【恶补概念!】
- 位(bit):位表示的是二进制位,一般称为比特,是计算机存储的最小单位。
- 字节(byte):字节是计算机中数据处理的基本单位。计算机中以字节为单位存储和解释信息,规定一个字节由八个二进制位构成,即 1 个字节等于 8 个比特(1Byte = 8bit)。
- 字(word):计算机进行数据处理时,一次存取、加工和传送的数据长度称为字(word)。一个字通常由一个或多个(一般是字节的整数位)字节构成。例如 286 微机的字由 2 个字节组成,它的字长为 16;486 微机的字由 4 个字节组成,它的字长为 32。计算机的字长决定了其 CPU 一次操作处理实际位数的多少,由此可见计算机的字长越大,其性能越优越。
- 字长:计算机的每个字所包含的位数称为字长。例如 286 微机的字由 2 个字节组成,它的字长为 16;486 微机的字由 4 个字节组成,它的字长为 32。
1.3 优先级表的结构——定义好了以后?
由以上讨论可知,我们定义的 CPU 字长为 32,支持最大优先级为 32,则DEF_INT_CPU_NBR_BITS = 32
,OS_CFG_PRIO_MAX = 32
,所以数组元素一共有:( (OS_CFG_PRIO_MAX - 1u) / DEF_INT_CPU_NBR_BITS ) + 1u = ( (32 - 1) / 32 ) + 1 = 0 + 1 = 1
。优先级表里只有一个元素。
如果我们需要支持 64 个优先级,CPU 字长为 32,那么DEF_INT_CPU_NBR_BITS = 32
,OS_CFG_PRIO_MAX = 64
,所以数组元素一共有:( (OS_CFG_PRIO_MAX - 1u) / DEF_INT_CPU_NBR_BITS ) + 1u = ( (64 - 1) / 32 ) + 1 = 1 + 1 = 2
。优先级表里两个元素。
如下图所示,这是 CPU 字长为 32 的优先级表结构:
- 若最大支持 32 个优先级,那么说明优先级一共有 0-31 的编号,没有 32 的编号。
- 优先级表 OSPrioTbl[0] 记录了优先级 0-31 的情况,OSPrioTbl[1] 记录了优先级 32-63 的情况,以此类推。
- 数据的每一位表示该优先级的任务是否存在,置 1 表示该优先级存在任务,置 0 表示该优先级没有任务。
- 数据的高位对应的是更低的优先级,低位对应的是更高的优先级。比如,OSPrioTbl[0] 的位 31 对应的是优先级 0,而位 30 对应的是优先级 1。对于我们定义的字长和最大优先级,若要创建一个优先级为 prio 的任务,那么就在 OSPrioTbl[0] 的位 [31-prio] 置 1 即可。这与我们的认知正好相反。
- 总结:若要创建一个优先级为 prio 的任务,那么就在
OSPrioTbl[prio/字长]
的位[字长-prio-1]
置 1 即可。
2 初始化优先级表 OS_PrioInit()(os_prio.c)
该函数的功能是:
- 初始化优先级表 OSPrioTbl,将每个数组元素全部置 0。
/* 初始化优先级表 */
void OS_PrioInit (void)
{CPU_DATA i;/* 全部初始化为 0 */for (i = 0u; i < OS_PRIO_TBL_SIZE; i++){OSPrioTbl[i] = (CPU_DATA)0;}
}
该函数需要被 OSInit() 调用。初始化后的优先级表如下所示:
3 置位优先级表中的相应位 OS_PrioInsert()(os_prio.c)
该函数的功能是:
- 在优先级表中,将相应的位置位。(形参是优先级)
/* 在优先级表的相应位置置位 */
void OS_PrioInsert (OS_PRIO prio)
{CPU_DATA bit;CPU_DATA bit_nbr;OS_PRIO ix;/* 求模,获取优先级表数组的下标 */ix = prio / DEF_INT_CPU_NBR_BITS;/* 求余,将优先级限制在 DEF_INT_CPU_NBR_BITS 内 */bit_nbr = (CPU_DATA)prio & (DEF_INT_CPU_NBR_BITS - 1u); /* 等价于 prio % DEF_INT_CPU_NBR_BITS *//* X % (2^N) = X & (2^N-1) */bit = 1u;/* 获取优先级在优先级表中对应的位的位置 */bit <<= (DEF_INT_CPU_NBR_BITS - 1u) - bit_nbr;/* 将优先级在优先级表中对应的位置 1 */OSPrioTbl[ix] |= bit;
}
我们定义的 CPU 字长为 32,支持最大优先级为 32,则DEF_INT_CPU_NBR_BITS = 32
,OS_CFG_PRIO_MAX = 32
,则优先级表中只有一个元素。那么假设现在 prio = 3:
- 求模:ix = 3 / 32 = 0,说明优先级为 3 在第一个数组元素 OSPrioTbl[0] 中。
- 求余:bit_nbr = 3 & 31 = 3。
- 获取位置:bit <<= 31 - 3 = 28,在 OSPrioTbl[0] 的位 28 置 1 即可。
若 prio = 35:
- 求模:ix = 35 / 32 = 1,说明优先级为 35 在第二个数组元素 OSPrioTbl[1] 中。
- 求余:bit_nbr = 35 & 31 = 4。
- 获取位置:bit <<= 31 - 4 = 27,在 OSPrioTbl[1] 的位 27 置 1 即可。
由上面的例子可以看到,该函数没有防止优先级溢出的情况发生。目前我不太清楚 uCOS 有没有一种机制可以防止这种非法的情况发生。
在优先级最大是 32,DEF_INT_CPU_NBR_BITS 等于 32 的情况下,如果分别创建了优先级 3、5、8 和 11 这四个任务,任务创建成功后,优先级表的设置情况可见下图。有一点要注意的是,在 uCOS 中,最高优先级和最低优先级是留给系统任务使用的,用户任务不能使用。
位运算求余——为什么求余操作可以这么写?
应该有同学注意到了,求余的那行代码居然不用 % ,用的是 & 运算符,这是什么原理呢?先提前声明:这个原理仅适用于 2 的幂次方。
我们知道,一个数除以一个形如 2^N 的数,可等价于这个数右移 N 位:
X / 2^N = X >> N
-
比如 11 / 2 = 5,11 的二进制为 1011,右移一位为 0101,也就是 5。现在请注意,被移走的消失不见的数是什么?是二进制下的 1,也就是十进制的 1,它就是余数;
-
再比如 11 / 8 = 1,11 的二进制为 1011,右移三位为 0001,也就是 1。被移走消失不见的数是二进制下的 011,也就是十进制的 3,它就是余数;
-
再比如 14 / 4 = 3,15 的二进制为 1110,右移两位为 0011,也就是 3。被移走消失不见的数是二进制下的 10,也就是十进制的 2,它就是余数。
你有发现什么吗?其实我们移走的数字就是余数。现在我们求余,想要保留的就是这个余数。那如何得到呢?还需要仔细观察上面这三个例子。
- 第一个例子:对 1011 右移一位,仅最后一位保留,保留的是 1;
- 第二个例子:对 1011 右移三位,最后三位保留,保留的是 011;
- 第三个例子:对 1110 右移两位,最后两位保留,保留的是 10。
联想到 & 运算的性质,可以将其等价为:
- 第一个例子:1011 & 0001,仅最后一位保留,保留的是 1;
- 第二个例子:1011 & 0111,最后三位保留,保留的是 011;
- 第三个例子:1110 & 0011,最后两位保留,保留的是 10。
也就是可以看做:
- 第一个例子: 1011 & (2-1),仅最后一位保留,保留的是 1;
- 第二个例子: 1011 & (8-1),最后三位保留,保留的是 011;
- 第三个例子: 1110 & (4-1),最后两位保留,保留的是 10。
你看懂了么?所以对 2 的幂次方求余,可以等价为:X & (2^N - 1)。这样做能加快运算速度。记住,该结论只对 2 的幂次方适用!!!
4 清除优先级表的相应位置 OS_PrioRemove()(os_prio.c)
与优先级表置位的函数类似,这个函数也需要找到相应的位置,寻找方法也是一样的。唯一不同的是最后一句代码,本函数需要将相应位清零。
该函数的功能是:
- 在优先级表中,将相应的位清零。(形参是优先级)
/* 清除优先级表的相应位置 */
void OS_PrioRemove (OS_PRIO prio)
{CPU_DATA bit;CPU_DATA bit_nbr;OS_PRIO ix;/* 求模,获取优先级表数组的下标 */ix = prio / DEF_INT_CPU_NBR_BITS;/* 求余,将优先级限制在 DEF_INT_CPU_NBR_BITS 内 */bit_nbr = (CPU_DATA)prio & (DEF_INT_CPU_NBR_BITS - 1u); /* 等价于 prio % DEF_INT_CPU_NBR_BITS *//* X % (2^N) = X & (2^N-1) */bit = 1u;/* 获取优先级在优先级表中对应的位的位置 */bit <<= (DEF_INT_CPU_NBR_BITS - 1u) - bit_nbr;/* 将优先级在优先级表中对应的位清 0 */OSPrioTbl[ix] &= ~bit;
}
5 查找最高优先级 OS_PrioGetHighest()(os_prio.c)
什么是最高优先级?最高优先级即数组元素下标最大且位数最大的位置。比如如下图所示,只有一个数组元素,从高位看起,第一次出现 1 的位置是 28,那么对应的最高优先级为 3。
5.1 前导零和后导零
好了,最精彩的部分来了。现在我想请各位思考一个问题,如何才能最快、最高效的找到最高优先级?一个很朴素的想法是,从数组的最高位开始,一位一位的测试哪个位为 1,第一次出现 1 的地方一定就是最高优先级的位置。对,这个想法很朴素,也是接下来我们寻找最高优先级的核心思路。但是,思路正确,实现起来却有点棘手。
因为,一位位的测试,也太麻烦了。32 个优先级,就要循环 32 遍的位测试;128 个优先级,就要循环 128 遍的位测试。都说 uCOS 很小巧精致,这个称谓并非空穴来风。只需换个角度看待问题,立马算法效率就提高了。
还是以上面的图为例,从数据的高位到低位查找第一个不为 0 的位置,即优先级为 3,为最高优先级。你注意到了吗?既然是最高优先级,那么更高的位数肯定全都是 0,数数这些 0 的个数,正好是 3 个 0,正好也是最高优先级的值!
0001 0100 1001 0000 0000 0000 0000 0000|||最高优先级(前面有 3 个 0,正好是最高优先级的值,也是前导零的个数)
从最高位起开始数 0 的个数,一直数到第一次出现 1 的地方。这些零,就是前导零,数出来的 0 的个数,就是这个数的前导零个数。 它也正好是最高优先级的值。
一个数的前导零个数是多少?这个问题是有前提条件的,即,你要告诉我该数的位数是多少,不同位数,得出的结果是不同的。例如:
- 在 4 位字长下,2 的前导零个数是多少?写成二进制:0010,前导零个数为 2。
- 在 8 位字长下,2 的前导零个数是多少?写成二进制:0000 0010,前导零个数为 6。
- 在 4 位字长下,7 的前导零个数是多少?写成二进制:0111,前导零个数为 1。
- 在 8 位字长下,7 的前导零个数是多少?写成二进制:0000 0111,前导零个数为 5。
- 在 32 位字长下,0001 0100 1001 0000 0000 0000 0000 0000 的前导零个数为 3。
类似的,从最低位起开始数 0 的个数,一直数到第一次出现 1 的地方。数出来的 0 的个数,就是这个数的后导零个数。
查找最高优先级的本质,就是求前导零的过程。我们有两种办法实现求前导零,一种是 C 语言,另一种是 ARM 汇编。
5.2 由 C 语言实现前导零 CPU_CntLeadZeros(cpu_core.c)
用 C 语言查找一个 32 位数的前导零个数,一个最容易想到的办法是一位位的查找,但对于这种实时性要求高的系统而言还是太慢了。最快的办法是“用空间换时间”,可以将 32 位数拆成四部分,每部分都是 8 位,我们 8 位 8 位的去检查,最多只需要检查 4 次。每次检查,直接从一个大数组表中找到对应的前导零个数,如下所示:
/*
*********************************************************************************************************
* 8位前导零查找表
*********************************************************************************************************
*/#ifndef CPU_CFG_LEAD_ZEROS_ASM_PRESENT
static const CPU_INT08U CPU_CntLeadZerosTbl[256] = { /* Data vals : */
/* 0 1 2 3 4 5 6 7 8 9 A B C D E F */8u, 7u, 6u, 6u, 5u, 5u, 5u, 5u, 4u, 4u, 4u, 4u, 4u, 4u, 4u, 4u, /* 0x00 to 0x0F */3u, 3u, 3u, 3u, 3u, 3u, 3u, 3u, 3u, 3u, 3u, 3u, 3u, 3u, 3u, 3u, /* 0x10 to 0x1F */2u, 2u, 2u, 2u, 2u, 2u, 2u, 2u, 2u, 2u, 2u, 2u, 2u, 2u, 2u, 2u, /* 0x20 to 0x2F */2u, 2u, 2u, 2u, 2u, 2u, 2u, 2u, 2u, 2u, 2u, 2u, 2u, 2u, 2u, 2u, /* 0x30 to 0x3F */1u, 1u, 1u, 1u, 1u, 1u, 1u, 1u, 1u, 1u, 1u, 1u, 1u, 1u, 1u, 1u, /* 0x40 to 0x4F */1u, 1u, 1u, 1u, 1u, 1u, 1u, 1u, 1u, 1u, 1u, 1u, 1u, 1u, 1u, 1u, /* 0x50 to 0x5F */1u, 1u, 1u, 1u, 1u, 1u, 1u, 1u, 1u, 1u, 1u, 1u, 1u, 1u, 1u, 1u, /* 0x60 to 0x6F */1u, 1u, 1u, 1u, 1u, 1u, 1u, 1u, 1u, 1u, 1u, 1u, 1u, 1u, 1u, 1u, /* 0x70 to 0x7F */0u, 0u, 0u, 0u, 0u, 0u, 0u, 0u, 0u, 0u, 0u, 0u, 0u, 0u, 0u, 0u, /* 0x80 to 0x8F */0u, 0u, 0u, 0u, 0u, 0u, 0u, 0u, 0u, 0u, 0u, 0u, 0u, 0u, 0u, 0u, /* 0x90 to 0x9F */0u, 0u, 0u, 0u, 0u, 0u, 0u, 0u, 0u, 0u, 0u, 0u, 0u, 0u, 0u, 0u, /* 0xA0 to 0xAF */0u, 0u, 0u, 0u, 0u, 0u, 0u, 0u, 0u, 0u, 0u, 0u, 0u, 0u, 0u, 0u, /* 0xB0 to 0xBF */0u, 0u, 0u, 0u, 0u, 0u, 0u, 0u, 0u, 0u, 0u, 0u, 0u, 0u, 0u, 0u, /* 0xC0 to 0xCF */0u, 0u, 0u, 0u, 0u, 0u, 0u, 0u, 0u, 0u, 0u, 0u, 0u, 0u, 0u, 0u, /* 0xD0 to 0xDF */0u, 0u, 0u, 0u, 0u, 0u, 0u, 0u, 0u, 0u, 0u, 0u, 0u, 0u, 0u, 0u, /* 0xE0 to 0xEF */0u, 0u, 0u, 0u, 0u, 0u, 0u, 0u, 0u, 0u, 0u, 0u, 0u, 0u, 0u, 0u /* 0xF0 to 0xFF */
};
#endif
第一行存储的是 0x00-0x0F 的前导零个数,比如 0x00 的前导零有 8 个,0x01 的前导零有 7 个;以此类推,第二行存储的是 0x10-0x1F 的前导零个数,比如 0x10 的前导零有 3 个……一共有 256 个数,正好存储了从 0x00-0xFF 的前导零个数。现在的内存都已经非常充足,用这一点空间的损失换取算法上的提高是非常值得的。
每次检查 8 位时,只需要用 8 位数作为下标去访问数组表,得到对应的前导零个数。
用 C 语言求前导零,假设要求的数据是 32 位的:
- 检查位 31-24,是否全是 0,若不是,将其右移 24 位,变成 8 位数,然后将其作为下标访问查找表,得到前导零个数。
- 如果位 31-24 全是 0,检查位 23-16,是否全是 0,若不是,将其右移 16 位,变成 8 位数,然后将其作为下标访问查找表,得到前导零个数(还需要加上位 31-24 的前导零个数,即 8)。
- 如果位 23-16 全是 0,检查位 15-8,是否全是 0,若不是,将其右移 8 位,变成 8 位数,然后将其作为下标访问查找表,得到前导零个数(还需要加上位 31-16 的前导零个数,即 16)。
- 如果位 15-8 全是 0,检查位 7-0,是否全是 0,若不是,将其右移 0 位,变成 8 位数,然后将其作为下标访问查找表,得到前导零个数(还需要加上位 31-8 的前导零个数,即 24)。
/*
*********************************************************************************************************
* 前导零函数(只实现了 32 位)
*********************************************************************************************************
*/
#ifndef CPU_CFG_LEAD_ZEROS_ASM_PRESENT
CPU_DATA CPU_CntLeadZeros (CPU_DATA val)
{CPU_DATA nbr_lead_zeros;CPU_INT08U ix;#if (CPU_CFG_DATA_SIZE == CPU_WORD_SIZE_32) if (val > 0x0000FFFFu) /* 检查高 16 位,若不都是 0 */{if (val > 0x00FFFFFFu) /* 检查位 31-24,若不都是 0 */{ix = (CPU_INT08U)(val >> 24u); /* 右移 24 位 */nbr_lead_zeros = (CPU_DATA)(CPU_LeadZerosTbl[ix] + 0u);}else /* 若位 31-24 都是 0,检查位 23-16 */{ix = (CPU_INT08U)(val >> 16u); /* 右移 16 位 */nbr_lead_zeros = (CPU_DATA)(CPU_LeadZerosTbl[ix] + 8u);}}else /* 检查低 16 位,若不都是 0 */{if (val > 0x000000FFu) /* 检查位 15-8,若不都是 0 */{ix = (CPU_INT08U)(val >> 8u); /* 右移 8 位 */nbr_lead_zeros = (CPU_DATA)(CPU_LeadZerosTbl[ix] + 16u);}else /* 若位 15-8 都是 0,检查位 7-0 */{ix = (CPU_INT08U)(val >> 0u); /* 右移 0 位 */nbr_lead_zeros = (CPU_DATA)(CPU_LeadZerosTbl[ix] + 24u);}}
#endifreturn nbr_lead_zeros;
}
#endif
对于其他位数,比如 8 位、16 位、64 位等,也是一样的办法,这里不再赘述。
5.3 由汇编语言实现前导零 CPU_CntLeadZeros(cpu_a.asm)
事实上,某些汇编已经支持前导零和后导零的指令了。有些汇编没有前导零的指令,只能使用 C 语言的办法实现。而在 ARM 汇编中,可以用 CLZ 指令求前导零。而对于后导零,可以先将源操作数反转,然后再求前导零。
;********************************************************************************************************
; 前导零/后导零函数
;********************************************************************************************************; CPU_DATA CPU_CntLeadZeros (CPU_DATA val); (前导零)
CPU_CntLeadZerosCLZ R0, R0BX LR; CPU_DATA CPU_CntTrailZeros (CPU_DATA val); (后导零)
CPU_CntTrailZerosRBIT R0, R0CLZ R0, R0BX LR
5.4 完成剩余的工作
现在将 OS_PrioGetHighest() 的代码全部展示出来:
/* 获取最高优先级 */
OS_PRIO OS_PrioGetHighest (void)
{CPU_DATA *p_tbl;OS_PRIO prio;prio = (OS_PRIO)0;p_tbl = &OSPrioTbl[0]; /* 优先级表首地址 */while (*p_tbl == (CPU_DATA)0) /* 找到不为 0 的数组元素 */{prio += DEF_INT_CPU_NBR_BITS;p_tbl++;}/* 找到优先级表中置位的最高的优先级 */prio += (OS_PRIO)CPU_CntLeadZeros(*p_tbl);return prio;
}
该函数完成的工作有:
- 先遍历优先级表,看看哪个数组元素是非 0 的。因为数组元素为 0,说明这个数组元素没有一个优先级是被置位的。
- 一旦发现某个数组元素非 0,意味着该数组元素至少有一位被置位了,最高优先级也一定在里面。
- 计算该数组元素的前导零个数,得到最高优先级。
现在,优先级表的代码,看起来也不那么难了吧!
如若内容造成侵权/违法违规/事实不符,请联系编程学习网邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
相关文章
- 关于大疆mini一代如何手动拍摄合成全景图
无人机其实也不是什么新鲜事了,我也入手了一台大疆mini1,以前虽然也买过,但是不是大疆,也不是兽x之类的,反正是杂牌!用不久,难得买台无人机回来吃灰!所以就像做点事情!有…...
2024/4/19 22:14:08 - mysql基础(二)
查询结果去除重复记录【distinct】 注意:原表数据不会被修改,只是查询结果去重。去重需要使用一个关键字:distinctmysql> select distinct job from emp;-----------| job |-----------| CLERK || SALESMAN || MANAGER || A…...
2024/4/25 7:26:55 - 在CPU上跑yolov5(详细步骤+适合入门)
目录 一、创建新环境 二、导入Pytorch库 三、新建项目 四、测试 五、准备数据集 六、修改配置文件 七、训练 八、实例测试 九、结束语 默认大家都装好了Anaconda和Pycharm,且知晓基本操作。 一、创建新环境 打开cmd窗口,输入conda create -n …...
2024/4/18 22:11:51 - 数据分析——统计学多指标统计方法
一、多变量分析方法的选择 https://pan.baidu.com/s/1ogCfSwcNvxlJXPhPzeHlGQ 提取码: qs3d; 分析的目的:区分有监督分析和无监督分析 1、有因变量,则建立有监督模型; 1)因变量为连续变量(建立的模型称为回…...
2024/4/18 22:27:36 - UE4 GamePlay架构总结 学习笔记
游戏世界,万物皆Actor,Actor再通过Component组装Actor所拥有的功能,Actor再通过UChildActorComponent实现Actor之间的父子嵌套。 Actor又通过UChildActorComponent实现Actor之间的父子嵌套 众多的Actor由组装成了Level,Level就是…...
2024/4/25 9:05:35 - 什么是方法重写?方法重写的规则是什么?
你也许知道什么是方法重写,但是方法重写的细节你可能还不了解,相信看完这篇笔记,你会有所收获的。 1.什么是方法重写?方法重写也称方法覆盖,就是子类有一个方法,和父类的方法的名称,返回类型&a…...
2024/4/16 12:25:48 - Hive Privilege 分析
Hive Privilege 是 Hive 权限系统的基础。 PrivilegeType 权限类型 权限类型的枚举,以及根据 token 和名称返回 PrivilegeType 的静态方法。 public enum PrivilegeType {ALL(HiveParser.TOK_PRIV_ALL, "All"),ALTER_DATA(HiveParser.TOK_PRIV_ALTER_D…...
2024/5/6 13:02:31 - sparksql特殊符号转义
1. 符号 . sql split(app_version, \\.)[1]sparksql split(app_version, \\\\.)[1]...
2024/4/13 21:35:20 - tinyplay扩展-实现软件、硬件同源输出
简介 该功能主要是用于测试音频模块的同源输出部分是否支持。 同源输出 分为软件和硬件两种模式,先来介绍一下同源输出的概念:简单地说就是往其中一个声卡写入数据,该声卡和另一个声卡都可以发出声音。一般情况下都是硬件实现,…...
2024/5/4 6:43:51 - 获取类的运行时结构、动态创建对象执行方法
获取类的运行时结构 实体类 package pojo;public class User {private int id;private String name;private String pwd;//构造,有参,无参//set/get//toString()Overridepublic String toString() {return "User{" "id" id ", name" name \…...
2024/5/6 0:02:09 - 一刷129-动态规划-674最长连续递增序列(e)
题目: 给定一个未经排序的整数数组,找到最长且 连续 递增 的子序列,并返回该序列的长度。连续递增的子序列 可以由两个下标 l 和 r(l < r)确定,如果对于每个 l < i < r, 都有 nums[i] …...
2024/5/3 20:00:53 - Vue的ref引用及插槽
目录ref引用ref引用DOM元素ref引用组件实例实现标签的按需切换插槽匿名插槽具名插槽作用域插槽ref引用 ref被用来给元素或子组件注册引用信息。引用信息将会注册在父组件的$refs对象上。如果在普通的DOM元素上使用,引用指向的就是DOM元素;如果用在子组件…...
2024/5/3 13:18:38 - Vue路由——vue-router
目录前端路由与后端路由路由后端路由前端路由vue-router路由vue-router基本用法前端路由与后端路由 路由 路由(routing):指从源到目的地时,决定端到端路径的决策过程。 路由分为两大类:前端路由和后端路由。 后端路…...
2024/5/3 20:00:08 - 来自开发者的点赞, HMS Core荣获多个行业奖项
2021年,HMS Core发布全新HMS Core 6,为全球开发者提供多终端、跨OS、全场景的华为移动服务核心能力,和开发者共同成长。通过和开发者在行业解决方案、业务场景创新和商业增长上的持续合作,HMS Core得到了行业和开发者的认可&#…...
2024/4/13 21:35:15 - 【蓝桥杯】新型斐波那契数列
蓝桥杯 新型斐波那契数列 问题描述 新型斐波那契数列的第一、二、三项都为1,从第四项起每一项等于前面三项之和,求此数列第n项模m的余数。 输入格式 输入一行为两个整数n、m,用空格隔开。 输出格式 输出一行为新型斐波那契数列第n项模m的余数…...
2024/4/13 21:35:00 - 【补充】提高显示性能的一些措施
1、禁用动画 <lvc:CartesianChart DisableAnimations"True" />2、尽可能控制点位数量在25个以内 3、禁用图表对鼠标的响应事件 <lvc:CatesianChart Hoverable"False" DataTooltip"{x:Null}" />4、使用 .AddRange() 添加点位 常规…...
2024/4/13 21:35:00 - 磁盘基本知识介绍
数据库的数据存储在文件系统中。 文件系统是操作系统用来明确存储设备或分区上的文件 的方法和数据结构(存储设备常见的是磁盘,也有基于NAND Flash的固态硬盘) 磁盘上数据必须用一个三维地址唯一标示:柱面号、盘面号、块号(磁道上的盘块)。 硬盘只是磁盘…...
2024/4/13 21:35:25 - LeetCode 503: 下一个更大元素 II
LeetCode 503: 下一个更大元素 II 解答 单调栈,但中间有一些小细节需要注意 代码一 这里需要特别注意的是单调栈中存的是值还是下标索引,如果存值的话(有时候写起来会简单一些),需要搭配map的(val, idx)映射&…...
2024/5/3 21:15:07 - python数据结构第五天(栈、队练习二)
一、队列入门 1、滑动窗口: 《LeetCode 933. 最近的请求次数》 示例: 输入: ["RecentCounter", "ping", "ping", "ping", "ping"] [[], [1], [100], [3001], [3002]] 输出࿱…...
2024/4/13 21:35:30 - uniapp 全局引入iconfont
1.在App.vue中中引入unicode链接 添加字体文件的引入后,定义iconfont样式类: 2.使用 3.使用v-for循环 要实现这种效果: 首先下载iconfont的压缩包,找到iconfont.css文件,找到每个图标的content属性: 在…...
2024/4/13 21:35:20
最新文章
- 电子电器架构 --- 主机厂产线的两种刷写方法
电子电器架构 — 主机厂产线的两种刷写方法 我是穿拖鞋的汉子,魔都中坚持长期主义的汽车电子工程师。 老规矩,分享一段喜欢的文字,避免自己成为高知识低文化的工程师: 屏蔽力是信息过载时代一个人的特殊竞争力,任何消耗你的人和事,多看一眼都是你的不对。非必要不费力证…...
2024/5/6 13:19:49 - 梯度消失和梯度爆炸的一些处理方法
在这里是记录一下梯度消失或梯度爆炸的一些处理技巧。全当学习总结了如有错误还请留言,在此感激不尽。 权重和梯度的更新公式如下: w w − η ⋅ ∇ w w w - \eta \cdot \nabla w ww−η⋅∇w 个人通俗的理解梯度消失就是网络模型在反向求导的时候出…...
2024/5/6 9:38:23 - Redis Stack十部曲之三:理解Redis Stack中的数据类型
文章目录 前言String字符串作为计数器限制 List限制列表阻塞列表自动创建和删除聚合类型键限制 Set限制 Hash限制 Sorted Set范围操作字典操作更新分数 JSON路径限制 BitMapBitfieldProbabilisticHyperLogLogBloom filterCuckoo filtert-digestTop-KCount-min sketchConfigurat…...
2024/5/4 13:36:16 - 与机器对话:ChatGPT 和 AI 语言模型的奇妙故事
原文:Talking to Machines: The Fascinating Story of ChatGPT and AI Language Models 译者:飞龙 协议:CC BY-NC-SA 4.0 从 ELIZA 到 ChatGPT:会话式人工智能的简史 会话式人工智能是人工智能(AI)的一个分…...
2024/5/5 8:50:13 - 【外汇早评】美通胀数据走低,美元调整
原标题:【外汇早评】美通胀数据走低,美元调整昨日美国方面公布了新一期的核心PCE物价指数数据,同比增长1.6%,低于前值和预期值的1.7%,距离美联储的通胀目标2%继续走低,通胀压力较低,且此前美国一季度GDP初值中的消费部分下滑明显,因此市场对美联储后续更可能降息的政策…...
2024/5/4 23:54:56 - 【原油贵金属周评】原油多头拥挤,价格调整
原标题:【原油贵金属周评】原油多头拥挤,价格调整本周国际劳动节,我们喜迎四天假期,但是整个金融市场确实流动性充沛,大事频发,各个商品波动剧烈。美国方面,在本周四凌晨公布5月份的利率决议和新闻发布会,维持联邦基金利率在2.25%-2.50%不变,符合市场预期。同时美联储…...
2024/5/4 23:54:56 - 【外汇周评】靓丽非农不及疲软通胀影响
原标题:【外汇周评】靓丽非农不及疲软通胀影响在刚结束的周五,美国方面公布了新一期的非农就业数据,大幅好于前值和预期,新增就业重新回到20万以上。具体数据: 美国4月非农就业人口变动 26.3万人,预期 19万人,前值 19.6万人。 美国4月失业率 3.6%,预期 3.8%,前值 3…...
2024/5/4 23:54:56 - 【原油贵金属早评】库存继续增加,油价收跌
原标题:【原油贵金属早评】库存继续增加,油价收跌周三清晨公布美国当周API原油库存数据,上周原油库存增加281万桶至4.692亿桶,增幅超过预期的74.4万桶。且有消息人士称,沙特阿美据悉将于6月向亚洲炼油厂额外出售更多原油,印度炼油商预计将每日获得至多20万桶的额外原油供…...
2024/5/6 9:21:00 - 【外汇早评】日本央行会议纪要不改日元强势
原标题:【外汇早评】日本央行会议纪要不改日元强势近两日日元大幅走强与近期市场风险情绪上升,避险资金回流日元有关,也与前一段时间的美日贸易谈判给日本缓冲期,日本方面对汇率问题也避免继续贬值有关。虽然今日早间日本央行公布的利率会议纪要仍然是支持宽松政策,但这符…...
2024/5/4 23:54:56 - 【原油贵金属早评】欧佩克稳定市场,填补伊朗问题的影响
原标题:【原油贵金属早评】欧佩克稳定市场,填补伊朗问题的影响近日伊朗局势升温,导致市场担忧影响原油供给,油价试图反弹。此时OPEC表态稳定市场。据消息人士透露,沙特6月石油出口料将低于700万桶/日,沙特已经收到石油消费国提出的6月份扩大出口的“适度要求”,沙特将满…...
2024/5/4 23:55:05 - 【外汇早评】美欲与伊朗重谈协议
原标题:【外汇早评】美欲与伊朗重谈协议美国对伊朗的制裁遭到伊朗的抗议,昨日伊朗方面提出将部分退出伊核协议。而此行为又遭到欧洲方面对伊朗的谴责和警告,伊朗外长昨日回应称,欧洲国家履行它们的义务,伊核协议就能保证存续。据传闻伊朗的导弹已经对准了以色列和美国的航…...
2024/5/4 23:54:56 - 【原油贵金属早评】波动率飙升,市场情绪动荡
原标题:【原油贵金属早评】波动率飙升,市场情绪动荡因中美贸易谈判不安情绪影响,金融市场各资产品种出现明显的波动。随着美国与中方开启第十一轮谈判之际,美国按照既定计划向中国2000亿商品征收25%的关税,市场情绪有所平复,已经开始接受这一事实。虽然波动率-恐慌指数VI…...
2024/5/4 23:55:16 - 【原油贵金属周评】伊朗局势升温,黄金多头跃跃欲试
原标题:【原油贵金属周评】伊朗局势升温,黄金多头跃跃欲试美国和伊朗的局势继续升温,市场风险情绪上升,避险黄金有向上突破阻力的迹象。原油方面稍显平稳,近期美国和OPEC加大供给及市场需求回落的影响,伊朗局势并未推升油价走强。近期中美贸易谈判摩擦再度升级,美国对中…...
2024/5/4 23:54:56 - 【原油贵金属早评】市场情绪继续恶化,黄金上破
原标题:【原油贵金属早评】市场情绪继续恶化,黄金上破周初中国针对于美国加征关税的进行的反制措施引发市场情绪的大幅波动,人民币汇率出现大幅的贬值动能,金融市场受到非常明显的冲击。尤其是波动率起来之后,对于股市的表现尤其不安。隔夜美国股市出现明显的下行走势,这…...
2024/5/6 1:40:42 - 【外汇早评】美伊僵持,风险情绪继续升温
原标题:【外汇早评】美伊僵持,风险情绪继续升温昨日沙特两艘油轮再次发生爆炸事件,导致波斯湾局势进一步恶化,市场担忧美伊可能会出现摩擦生火,避险品种获得支撑,黄金和日元大幅走强。美指受中美贸易问题影响而在低位震荡。继5月12日,四艘商船在阿联酋领海附近的阿曼湾、…...
2024/5/4 23:54:56 - 【原油贵金属早评】贸易冲突导致需求低迷,油价弱势
原标题:【原油贵金属早评】贸易冲突导致需求低迷,油价弱势近日虽然伊朗局势升温,中东地区几起油船被袭击事件影响,但油价并未走高,而是出于调整结构中。由于市场预期局势失控的可能性较低,而中美贸易问题导致的全球经济衰退风险更大,需求会持续低迷,因此油价调整压力较…...
2024/5/4 23:55:17 - 氧生福地 玩美北湖(上)——为时光守候两千年
原标题:氧生福地 玩美北湖(上)——为时光守候两千年一次说走就走的旅行,只有一张高铁票的距离~ 所以,湖南郴州,我来了~ 从广州南站出发,一个半小时就到达郴州西站了。在动车上,同时改票的南风兄和我居然被分到了一个车厢,所以一路非常愉快地聊了过来。 挺好,最起…...
2024/5/4 23:55:06 - 氧生福地 玩美北湖(中)——永春梯田里的美与鲜
原标题:氧生福地 玩美北湖(中)——永春梯田里的美与鲜一觉醒来,因为大家太爱“美”照,在柳毅山庄去寻找龙女而错过了早餐时间。近十点,向导坏坏还是带着饥肠辘辘的我们去吃郴州最富有盛名的“鱼头粉”。说这是“十二分推荐”,到郴州必吃的美食之一。 哇塞!那个味美香甜…...
2024/5/4 23:54:56 - 氧生福地 玩美北湖(下)——奔跑吧骚年!
原标题:氧生福地 玩美北湖(下)——奔跑吧骚年!让我们红尘做伴 活得潇潇洒洒 策马奔腾共享人世繁华 对酒当歌唱出心中喜悦 轰轰烈烈把握青春年华 让我们红尘做伴 活得潇潇洒洒 策马奔腾共享人世繁华 对酒当歌唱出心中喜悦 轰轰烈烈把握青春年华 啊……啊……啊 两…...
2024/5/4 23:55:06 - 扒开伪装医用面膜,翻六倍价格宰客,小姐姐注意了!
原标题:扒开伪装医用面膜,翻六倍价格宰客,小姐姐注意了!扒开伪装医用面膜,翻六倍价格宰客!当行业里的某一品项火爆了,就会有很多商家蹭热度,装逼忽悠,最近火爆朋友圈的医用面膜,被沾上了污点,到底怎么回事呢? “比普通面膜安全、效果好!痘痘、痘印、敏感肌都能用…...
2024/5/5 8:13:33 - 「发现」铁皮石斛仙草之神奇功效用于医用面膜
原标题:「发现」铁皮石斛仙草之神奇功效用于医用面膜丽彦妆铁皮石斛医用面膜|石斛多糖无菌修护补水贴19大优势: 1、铁皮石斛:自唐宋以来,一直被列为皇室贡品,铁皮石斛生于海拔1600米的悬崖峭壁之上,繁殖力差,产量极低,所以古代仅供皇室、贵族享用 2、铁皮石斛自古民间…...
2024/5/4 23:55:16 - 丽彦妆\医用面膜\冷敷贴轻奢医学护肤引导者
原标题:丽彦妆\医用面膜\冷敷贴轻奢医学护肤引导者【公司简介】 广州华彬企业隶属香港华彬集团有限公司,专注美业21年,其旗下品牌: 「圣茵美」私密荷尔蒙抗衰,产后修复 「圣仪轩」私密荷尔蒙抗衰,产后修复 「花茵莳」私密荷尔蒙抗衰,产后修复 「丽彦妆」专注医学护…...
2024/5/4 23:54:58 - 广州械字号面膜生产厂家OEM/ODM4项须知!
原标题:广州械字号面膜生产厂家OEM/ODM4项须知!广州械字号面膜生产厂家OEM/ODM流程及注意事项解读: 械字号医用面膜,其实在我国并没有严格的定义,通常我们说的医美面膜指的应该是一种「医用敷料」,也就是说,医用面膜其实算作「医疗器械」的一种,又称「医用冷敷贴」。 …...
2024/5/4 23:55:01 - 械字号医用眼膜缓解用眼过度到底有无作用?
原标题:械字号医用眼膜缓解用眼过度到底有无作用?医用眼膜/械字号眼膜/医用冷敷眼贴 凝胶层为亲水高分子材料,含70%以上的水分。体表皮肤温度传导到本产品的凝胶层,热量被凝胶内水分子吸收,通过水分的蒸发带走大量的热量,可迅速地降低体表皮肤局部温度,减轻局部皮肤的灼…...
2024/5/4 23:54:56 - 配置失败还原请勿关闭计算机,电脑开机屏幕上面显示,配置失败还原更改 请勿关闭计算机 开不了机 这个问题怎么办...
解析如下:1、长按电脑电源键直至关机,然后再按一次电源健重启电脑,按F8健进入安全模式2、安全模式下进入Windows系统桌面后,按住“winR”打开运行窗口,输入“services.msc”打开服务设置3、在服务界面,选中…...
2022/11/19 21:17:18 - 错误使用 reshape要执行 RESHAPE,请勿更改元素数目。
%读入6幅图像(每一幅图像的大小是564*564) f1 imread(WashingtonDC_Band1_564.tif); subplot(3,2,1),imshow(f1); f2 imread(WashingtonDC_Band2_564.tif); subplot(3,2,2),imshow(f2); f3 imread(WashingtonDC_Band3_564.tif); subplot(3,2,3),imsho…...
2022/11/19 21:17:16 - 配置 已完成 请勿关闭计算机,win7系统关机提示“配置Windows Update已完成30%请勿关闭计算机...
win7系统关机提示“配置Windows Update已完成30%请勿关闭计算机”问题的解决方法在win7系统关机时如果有升级系统的或者其他需要会直接进入一个 等待界面,在等待界面中我们需要等待操作结束才能关机,虽然这比较麻烦,但是对系统进行配置和升级…...
2022/11/19 21:17:15 - 台式电脑显示配置100%请勿关闭计算机,“准备配置windows 请勿关闭计算机”的解决方法...
有不少用户在重装Win7系统或更新系统后会遇到“准备配置windows,请勿关闭计算机”的提示,要过很久才能进入系统,有的用户甚至几个小时也无法进入,下面就教大家这个问题的解决方法。第一种方法:我们首先在左下角的“开始…...
2022/11/19 21:17:14 - win7 正在配置 请勿关闭计算机,怎么办Win7开机显示正在配置Windows Update请勿关机...
置信有很多用户都跟小编一样遇到过这样的问题,电脑时发现开机屏幕显现“正在配置Windows Update,请勿关机”(如下图所示),而且还需求等大约5分钟才干进入系统。这是怎样回事呢?一切都是正常操作的,为什么开时机呈现“正…...
2022/11/19 21:17:13 - 准备配置windows 请勿关闭计算机 蓝屏,Win7开机总是出现提示“配置Windows请勿关机”...
Win7系统开机启动时总是出现“配置Windows请勿关机”的提示,没过几秒后电脑自动重启,每次开机都这样无法进入系统,此时碰到这种现象的用户就可以使用以下5种方法解决问题。方法一:开机按下F8,在出现的Windows高级启动选…...
2022/11/19 21:17:12 - 准备windows请勿关闭计算机要多久,windows10系统提示正在准备windows请勿关闭计算机怎么办...
有不少windows10系统用户反映说碰到这样一个情况,就是电脑提示正在准备windows请勿关闭计算机,碰到这样的问题该怎么解决呢,现在小编就给大家分享一下windows10系统提示正在准备windows请勿关闭计算机的具体第一种方法:1、2、依次…...
2022/11/19 21:17:11 - 配置 已完成 请勿关闭计算机,win7系统关机提示“配置Windows Update已完成30%请勿关闭计算机”的解决方法...
今天和大家分享一下win7系统重装了Win7旗舰版系统后,每次关机的时候桌面上都会显示一个“配置Windows Update的界面,提示请勿关闭计算机”,每次停留好几分钟才能正常关机,导致什么情况引起的呢?出现配置Windows Update…...
2022/11/19 21:17:10 - 电脑桌面一直是清理请关闭计算机,windows7一直卡在清理 请勿关闭计算机-win7清理请勿关机,win7配置更新35%不动...
只能是等着,别无他法。说是卡着如果你看硬盘灯应该在读写。如果从 Win 10 无法正常回滚,只能是考虑备份数据后重装系统了。解决来方案一:管理员运行cmd:net stop WuAuServcd %windir%ren SoftwareDistribution SDoldnet start WuA…...
2022/11/19 21:17:09 - 计算机配置更新不起,电脑提示“配置Windows Update请勿关闭计算机”怎么办?
原标题:电脑提示“配置Windows Update请勿关闭计算机”怎么办?win7系统中在开机与关闭的时候总是显示“配置windows update请勿关闭计算机”相信有不少朋友都曾遇到过一次两次还能忍但经常遇到就叫人感到心烦了遇到这种问题怎么办呢?一般的方…...
2022/11/19 21:17:08 - 计算机正在配置无法关机,关机提示 windows7 正在配置windows 请勿关闭计算机 ,然后等了一晚上也没有关掉。现在电脑无法正常关机...
关机提示 windows7 正在配置windows 请勿关闭计算机 ,然后等了一晚上也没有关掉。现在电脑无法正常关机以下文字资料是由(历史新知网www.lishixinzhi.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!关机提示 windows7 正在配…...
2022/11/19 21:17:05 - 钉钉提示请勿通过开发者调试模式_钉钉请勿通过开发者调试模式是真的吗好不好用...
钉钉请勿通过开发者调试模式是真的吗好不好用 更新时间:2020-04-20 22:24:19 浏览次数:729次 区域: 南阳 > 卧龙 列举网提醒您:为保障您的权益,请不要提前支付任何费用! 虚拟位置外设器!!轨迹模拟&虚拟位置外设神器 专业用于:钉钉,外勤365,红圈通,企业微信和…...
2022/11/19 21:17:05 - 配置失败还原请勿关闭计算机怎么办,win7系统出现“配置windows update失败 还原更改 请勿关闭计算机”,长时间没反应,无法进入系统的解决方案...
前几天班里有位学生电脑(windows 7系统)出问题了,具体表现是开机时一直停留在“配置windows update失败 还原更改 请勿关闭计算机”这个界面,长时间没反应,无法进入系统。这个问题原来帮其他同学也解决过,网上搜了不少资料&#x…...
2022/11/19 21:17:04 - 一个电脑无法关闭计算机你应该怎么办,电脑显示“清理请勿关闭计算机”怎么办?...
本文为你提供了3个有效解决电脑显示“清理请勿关闭计算机”问题的方法,并在最后教给你1种保护系统安全的好方法,一起来看看!电脑出现“清理请勿关闭计算机”在Windows 7(SP1)和Windows Server 2008 R2 SP1中,添加了1个新功能在“磁…...
2022/11/19 21:17:03 - 请勿关闭计算机还原更改要多久,电脑显示:配置windows更新失败,正在还原更改,请勿关闭计算机怎么办...
许多用户在长期不使用电脑的时候,开启电脑发现电脑显示:配置windows更新失败,正在还原更改,请勿关闭计算机。。.这要怎么办呢?下面小编就带着大家一起看看吧!如果能够正常进入系统,建议您暂时移…...
2022/11/19 21:17:02 - 还原更改请勿关闭计算机 要多久,配置windows update失败 还原更改 请勿关闭计算机,电脑开机后一直显示以...
配置windows update失败 还原更改 请勿关闭计算机,电脑开机后一直显示以以下文字资料是由(历史新知网www.lishixinzhi.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!配置windows update失败 还原更改 请勿关闭计算机&#x…...
2022/11/19 21:17:01 - 电脑配置中请勿关闭计算机怎么办,准备配置windows请勿关闭计算机一直显示怎么办【图解】...
不知道大家有没有遇到过这样的一个问题,就是我们的win7系统在关机的时候,总是喜欢显示“准备配置windows,请勿关机”这样的一个页面,没有什么大碍,但是如果一直等着的话就要两个小时甚至更久都关不了机,非常…...
2022/11/19 21:17:00 - 正在准备配置请勿关闭计算机,正在准备配置windows请勿关闭计算机时间长了解决教程...
当电脑出现正在准备配置windows请勿关闭计算机时,一般是您正对windows进行升级,但是这个要是长时间没有反应,我们不能再傻等下去了。可能是电脑出了别的问题了,来看看教程的说法。正在准备配置windows请勿关闭计算机时间长了方法一…...
2022/11/19 21:16:59 - 配置失败还原请勿关闭计算机,配置Windows Update失败,还原更改请勿关闭计算机...
我们使用电脑的过程中有时会遇到这种情况,当我们打开电脑之后,发现一直停留在一个界面:“配置Windows Update失败,还原更改请勿关闭计算机”,等了许久还是无法进入系统。如果我们遇到此类问题应该如何解决呢࿰…...
2022/11/19 21:16:58 - 如何在iPhone上关闭“请勿打扰”
Apple’s “Do Not Disturb While Driving” is a potentially lifesaving iPhone feature, but it doesn’t always turn on automatically at the appropriate time. For example, you might be a passenger in a moving car, but your iPhone may think you’re the one dri…...
2022/11/19 21:16:57