WMM-PS的U-APSD

  • 传统省电模式
  • U-APSD信息协商
  • U-APSD省电流程

传统省电模式

传统省电模式接收数据过程如下图所示。每发送一个ps-poll才能得到一个data frame。影响了效率。

#mermaid-svg-7P0U8CTggq40AxhP .label {font-family: 'trebuchet ms', verdana, arial;font-family: var(--mermaid-font-family);fill: #333;color: #333; }#mermaid-svg-7P0U8CTggq40AxhP .label text {fill: #333; }#mermaid-svg-7P0U8CTggq40AxhP .node rect, #mermaid-svg-7P0U8CTggq40AxhP .node circle, #mermaid-svg-7P0U8CTggq40AxhP .node ellipse, #mermaid-svg-7P0U8CTggq40AxhP .node polygon, #mermaid-svg-7P0U8CTggq40AxhP .node path {fill: #ECECFF;stroke: #9370DB;stroke-width: 1px; }#mermaid-svg-7P0U8CTggq40AxhP .node .label {text-align: center;fill: #333; }#mermaid-svg-7P0U8CTggq40AxhP .node.clickable {cursor: pointer; }#mermaid-svg-7P0U8CTggq40AxhP .arrowheadPath {fill: #333333; }#mermaid-svg-7P0U8CTggq40AxhP .edgePath .path {stroke: #333333;stroke-width: 1.5px; }#mermaid-svg-7P0U8CTggq40AxhP .flowchart-link {stroke: #333333;fill: none; }#mermaid-svg-7P0U8CTggq40AxhP .edgeLabel {background-color: #e8e8e8;text-align: center; } #mermaid-svg-7P0U8CTggq40AxhP .edgeLabel rect {opacity: 0.9; } #mermaid-svg-7P0U8CTggq40AxhP .edgeLabel span {color: #333; }#mermaid-svg-7P0U8CTggq40AxhP .cluster rect {fill: #ffffde;stroke: #aaaa33;stroke-width: 1px; }#mermaid-svg-7P0U8CTggq40AxhP .cluster text {fill: #333; }#mermaid-svg-7P0U8CTggq40AxhP div.mermaidTooltip {position: absolute;text-align: center;max-width: 200px;padding: 2px;font-family: 'trebuchet ms', verdana, arial;font-family: var(--mermaid-font-family);font-size: 12px;background: #ffffde;border: 1px solid #aaaa33;border-radius: 2px;pointer-events: none;z-index: 100; }#mermaid-svg-7P0U8CTggq40AxhP .actor {stroke: #CCCCFF;fill: #ECECFF; }#mermaid-svg-7P0U8CTggq40AxhP text.actor > tspan {fill: black;stroke: none; }#mermaid-svg-7P0U8CTggq40AxhP .actor-line {stroke: grey; }#mermaid-svg-7P0U8CTggq40AxhP .messageLine0 {stroke-width: 1.5;stroke-dasharray: none;stroke: #333; }#mermaid-svg-7P0U8CTggq40AxhP .messageLine1 {stroke-width: 1.5;stroke-dasharray: 2, 2;stroke: #333; }#mermaid-svg-7P0U8CTggq40AxhP #arrowhead path {fill: #333;stroke: #333; }#mermaid-svg-7P0U8CTggq40AxhP .sequenceNumber {fill: white; }#mermaid-svg-7P0U8CTggq40AxhP #sequencenumber {fill: #333; }#mermaid-svg-7P0U8CTggq40AxhP #crosshead path {fill: #333;stroke: #333; }#mermaid-svg-7P0U8CTggq40AxhP .messageText {fill: #333;stroke: #333; }#mermaid-svg-7P0U8CTggq40AxhP .labelBox {stroke: #CCCCFF;fill: #ECECFF; }#mermaid-svg-7P0U8CTggq40AxhP .labelText,#mermaid-svg-7P0U8CTggq40AxhP .labelText > tspan {fill: black;stroke: none; }#mermaid-svg-7P0U8CTggq40AxhP .loopText,#mermaid-svg-7P0U8CTggq40AxhP .loopText > tspan {fill: black;stroke: none; }#mermaid-svg-7P0U8CTggq40AxhP .loopLine {stroke-width: 2px;stroke-dasharray: 2, 2;stroke: #CCCCFF;fill: #CCCCFF; }#mermaid-svg-7P0U8CTggq40AxhP .note {stroke: #aaaa33;fill: #fff5ad; }#mermaid-svg-7P0U8CTggq40AxhP .noteText,#mermaid-svg-7P0U8CTggq40AxhP .noteText > tspan {fill: black;stroke: none; }#mermaid-svg-7P0U8CTggq40AxhP .activation0 {fill: #f4f4f4;stroke: #666; }#mermaid-svg-7P0U8CTggq40AxhP .activation1 {fill: #f4f4f4;stroke: #666; }#mermaid-svg-7P0U8CTggq40AxhP .activation2 {fill: #f4f4f4;stroke: #666; }#mermaid-svg-7P0U8CTggq40AxhP .mermaid-main-font {font-family: "trebuchet ms", verdana, arial;font-family: var(--mermaid-font-family); }#mermaid-svg-7P0U8CTggq40AxhP .section {stroke: none;opacity: 0.2; }#mermaid-svg-7P0U8CTggq40AxhP .section0 {fill: rgba(102, 102, 255, 0.49); }#mermaid-svg-7P0U8CTggq40AxhP .section2 {fill: #fff400; }#mermaid-svg-7P0U8CTggq40AxhP .section1, #mermaid-svg-7P0U8CTggq40AxhP .section3 {fill: white;opacity: 0.2; }#mermaid-svg-7P0U8CTggq40AxhP .sectionTitle0 {fill: #333; }#mermaid-svg-7P0U8CTggq40AxhP .sectionTitle1 {fill: #333; }#mermaid-svg-7P0U8CTggq40AxhP .sectionTitle2 {fill: #333; }#mermaid-svg-7P0U8CTggq40AxhP .sectionTitle3 {fill: #333; }#mermaid-svg-7P0U8CTggq40AxhP .sectionTitle {text-anchor: start;font-size: 11px;text-height: 14px;font-family: 'trebuchet ms', verdana, arial;font-family: var(--mermaid-font-family); }#mermaid-svg-7P0U8CTggq40AxhP .grid .tick {stroke: lightgrey;opacity: 0.8;shape-rendering: crispEdges; } #mermaid-svg-7P0U8CTggq40AxhP .grid .tick text {font-family: 'trebuchet ms', verdana, arial;font-family: var(--mermaid-font-family); }#mermaid-svg-7P0U8CTggq40AxhP .grid path {stroke-width: 0; }#mermaid-svg-7P0U8CTggq40AxhP .today {fill: none;stroke: red;stroke-width: 2px; }#mermaid-svg-7P0U8CTggq40AxhP .task {stroke-width: 2; }#mermaid-svg-7P0U8CTggq40AxhP .taskText {text-anchor: middle;font-family: 'trebuchet ms', verdana, arial;font-family: var(--mermaid-font-family); }#mermaid-svg-7P0U8CTggq40AxhP .taskText:not([font-size]) {font-size: 11px; }#mermaid-svg-7P0U8CTggq40AxhP .taskTextOutsideRight {fill: black;text-anchor: start;font-size: 11px;font-family: 'trebuchet ms', verdana, arial;font-family: var(--mermaid-font-family); }#mermaid-svg-7P0U8CTggq40AxhP .taskTextOutsideLeft {fill: black;text-anchor: end;font-size: 11px; }#mermaid-svg-7P0U8CTggq40AxhP .task.clickable {cursor: pointer; }#mermaid-svg-7P0U8CTggq40AxhP .taskText.clickable {cursor: pointer;fill: #003163 !important;font-weight: bold; }#mermaid-svg-7P0U8CTggq40AxhP .taskTextOutsideLeft.clickable {cursor: pointer;fill: #003163 !important;font-weight: bold; }#mermaid-svg-7P0U8CTggq40AxhP .taskTextOutsideRight.clickable {cursor: pointer;fill: #003163 !important;font-weight: bold; }#mermaid-svg-7P0U8CTggq40AxhP .taskText0, #mermaid-svg-7P0U8CTggq40AxhP .taskText1, #mermaid-svg-7P0U8CTggq40AxhP .taskText2, #mermaid-svg-7P0U8CTggq40AxhP .taskText3 {fill: white; }#mermaid-svg-7P0U8CTggq40AxhP .task0, #mermaid-svg-7P0U8CTggq40AxhP .task1, #mermaid-svg-7P0U8CTggq40AxhP .task2, #mermaid-svg-7P0U8CTggq40AxhP .task3 {fill: #8a90dd;stroke: #534fbc; }#mermaid-svg-7P0U8CTggq40AxhP .taskTextOutside0, #mermaid-svg-7P0U8CTggq40AxhP .taskTextOutside2 {fill: black; }#mermaid-svg-7P0U8CTggq40AxhP .taskTextOutside1, #mermaid-svg-7P0U8CTggq40AxhP .taskTextOutside3 {fill: black; }#mermaid-svg-7P0U8CTggq40AxhP .active0, #mermaid-svg-7P0U8CTggq40AxhP .active1, #mermaid-svg-7P0U8CTggq40AxhP .active2, #mermaid-svg-7P0U8CTggq40AxhP .active3 {fill: #bfc7ff;stroke: #534fbc; }#mermaid-svg-7P0U8CTggq40AxhP .activeText0, #mermaid-svg-7P0U8CTggq40AxhP .activeText1, #mermaid-svg-7P0U8CTggq40AxhP .activeText2, #mermaid-svg-7P0U8CTggq40AxhP .activeText3 {fill: black !important; }#mermaid-svg-7P0U8CTggq40AxhP .done0, #mermaid-svg-7P0U8CTggq40AxhP .done1, #mermaid-svg-7P0U8CTggq40AxhP .done2, #mermaid-svg-7P0U8CTggq40AxhP .done3 {stroke: grey;fill: lightgrey;stroke-width: 2; }#mermaid-svg-7P0U8CTggq40AxhP .doneText0, #mermaid-svg-7P0U8CTggq40AxhP .doneText1, #mermaid-svg-7P0U8CTggq40AxhP .doneText2, #mermaid-svg-7P0U8CTggq40AxhP .doneText3 {fill: black !important; }#mermaid-svg-7P0U8CTggq40AxhP .crit0, #mermaid-svg-7P0U8CTggq40AxhP .crit1, #mermaid-svg-7P0U8CTggq40AxhP .crit2, #mermaid-svg-7P0U8CTggq40AxhP .crit3 {stroke: #ff8888;fill: red;stroke-width: 2; }#mermaid-svg-7P0U8CTggq40AxhP .activeCrit0, #mermaid-svg-7P0U8CTggq40AxhP .activeCrit1, #mermaid-svg-7P0U8CTggq40AxhP .activeCrit2, #mermaid-svg-7P0U8CTggq40AxhP .activeCrit3 {stroke: #ff8888;fill: #bfc7ff;stroke-width: 2; }#mermaid-svg-7P0U8CTggq40AxhP .doneCrit0, #mermaid-svg-7P0U8CTggq40AxhP .doneCrit1, #mermaid-svg-7P0U8CTggq40AxhP .doneCrit2, #mermaid-svg-7P0U8CTggq40AxhP .doneCrit3 {stroke: #ff8888;fill: lightgrey;stroke-width: 2;cursor: pointer;shape-rendering: crispEdges; }#mermaid-svg-7P0U8CTggq40AxhP .milestone {transform: rotate(45deg) scale(0.8, 0.8); }#mermaid-svg-7P0U8CTggq40AxhP .milestoneText {font-style: italic; }#mermaid-svg-7P0U8CTggq40AxhP .doneCritText0, #mermaid-svg-7P0U8CTggq40AxhP .doneCritText1, #mermaid-svg-7P0U8CTggq40AxhP .doneCritText2, #mermaid-svg-7P0U8CTggq40AxhP .doneCritText3 {fill: black !important; }#mermaid-svg-7P0U8CTggq40AxhP .activeCritText0, #mermaid-svg-7P0U8CTggq40AxhP .activeCritText1, #mermaid-svg-7P0U8CTggq40AxhP .activeCritText2, #mermaid-svg-7P0U8CTggq40AxhP .activeCritText3 {fill: black !important; }#mermaid-svg-7P0U8CTggq40AxhP .titleText {text-anchor: middle;font-size: 18px;fill: black;font-family: 'trebuchet ms', verdana, arial;font-family: var(--mermaid-font-family); }#mermaid-svg-7P0U8CTggq40AxhP g.classGroup text {fill: #9370DB;stroke: none;font-family: 'trebuchet ms', verdana, arial;font-family: var(--mermaid-font-family);font-size: 10px; } #mermaid-svg-7P0U8CTggq40AxhP g.classGroup text .title {font-weight: bolder; }#mermaid-svg-7P0U8CTggq40AxhP g.clickable {cursor: pointer; }#mermaid-svg-7P0U8CTggq40AxhP g.classGroup rect {fill: #ECECFF;stroke: #9370DB; }#mermaid-svg-7P0U8CTggq40AxhP g.classGroup line {stroke: #9370DB;stroke-width: 1; }#mermaid-svg-7P0U8CTggq40AxhP .classLabel .box {stroke: none;stroke-width: 0;fill: #ECECFF;opacity: 0.5; }#mermaid-svg-7P0U8CTggq40AxhP .classLabel .label {fill: #9370DB;font-size: 10px; }#mermaid-svg-7P0U8CTggq40AxhP .relation {stroke: #9370DB;stroke-width: 1;fill: none; }#mermaid-svg-7P0U8CTggq40AxhP .dashed-line {stroke-dasharray: 3; }#mermaid-svg-7P0U8CTggq40AxhP #compositionStart {fill: #9370DB;stroke: #9370DB;stroke-width: 1; }#mermaid-svg-7P0U8CTggq40AxhP #compositionEnd {fill: #9370DB;stroke: #9370DB;stroke-width: 1; }#mermaid-svg-7P0U8CTggq40AxhP #aggregationStart {fill: #ECECFF;stroke: #9370DB;stroke-width: 1; }#mermaid-svg-7P0U8CTggq40AxhP #aggregationEnd {fill: #ECECFF;stroke: #9370DB;stroke-width: 1; }#mermaid-svg-7P0U8CTggq40AxhP #dependencyStart {fill: #9370DB;stroke: #9370DB;stroke-width: 1; }#mermaid-svg-7P0U8CTggq40AxhP #dependencyEnd {fill: #9370DB;stroke: #9370DB;stroke-width: 1; }#mermaid-svg-7P0U8CTggq40AxhP #extensionStart {fill: #9370DB;stroke: #9370DB;stroke-width: 1; }#mermaid-svg-7P0U8CTggq40AxhP #extensionEnd {fill: #9370DB;stroke: #9370DB;stroke-width: 1; }#mermaid-svg-7P0U8CTggq40AxhP .commit-id, #mermaid-svg-7P0U8CTggq40AxhP .commit-msg, #mermaid-svg-7P0U8CTggq40AxhP .branch-label {fill: lightgrey;color: lightgrey;font-family: 'trebuchet ms', verdana, arial;font-family: var(--mermaid-font-family); }#mermaid-svg-7P0U8CTggq40AxhP .pieTitleText {text-anchor: middle;font-size: 25px;fill: black;font-family: 'trebuchet ms', verdana, arial;font-family: var(--mermaid-font-family); }#mermaid-svg-7P0U8CTggq40AxhP .slice {font-family: 'trebuchet ms', verdana, arial;font-family: var(--mermaid-font-family); }#mermaid-svg-7P0U8CTggq40AxhP g.stateGroup text {fill: #9370DB;stroke: none;font-size: 10px;font-family: 'trebuchet ms', verdana, arial;font-family: var(--mermaid-font-family); }#mermaid-svg-7P0U8CTggq40AxhP g.stateGroup text {fill: #9370DB;fill: #333;stroke: none;font-size: 10px; }#mermaid-svg-7P0U8CTggq40AxhP g.statediagram-cluster .cluster-label text {fill: #333; }#mermaid-svg-7P0U8CTggq40AxhP g.stateGroup .state-title {font-weight: bolder;fill: black; }#mermaid-svg-7P0U8CTggq40AxhP g.stateGroup rect {fill: #ECECFF;stroke: #9370DB; }#mermaid-svg-7P0U8CTggq40AxhP g.stateGroup line {stroke: #9370DB;stroke-width: 1; }#mermaid-svg-7P0U8CTggq40AxhP .transition {stroke: #9370DB;stroke-width: 1;fill: none; }#mermaid-svg-7P0U8CTggq40AxhP .stateGroup .composit {fill: white;border-bottom: 1px; }#mermaid-svg-7P0U8CTggq40AxhP .stateGroup .alt-composit {fill: #e0e0e0;border-bottom: 1px; }#mermaid-svg-7P0U8CTggq40AxhP .state-note {stroke: #aaaa33;fill: #fff5ad; } #mermaid-svg-7P0U8CTggq40AxhP .state-note text {fill: black;stroke: none;font-size: 10px; }#mermaid-svg-7P0U8CTggq40AxhP .stateLabel .box {stroke: none;stroke-width: 0;fill: #ECECFF;opacity: 0.7; }#mermaid-svg-7P0U8CTggq40AxhP .edgeLabel text {fill: #333; }#mermaid-svg-7P0U8CTggq40AxhP .stateLabel text {fill: black;font-size: 10px;font-weight: bold;font-family: 'trebuchet ms', verdana, arial;font-family: var(--mermaid-font-family); }#mermaid-svg-7P0U8CTggq40AxhP .node circle.state-start {fill: black;stroke: black; }#mermaid-svg-7P0U8CTggq40AxhP .node circle.state-end {fill: black;stroke: white;stroke-width: 1.5; }#mermaid-svg-7P0U8CTggq40AxhP #statediagram-barbEnd {fill: #9370DB; }#mermaid-svg-7P0U8CTggq40AxhP .statediagram-cluster rect {fill: #ECECFF;stroke: #9370DB;stroke-width: 1px; }#mermaid-svg-7P0U8CTggq40AxhP .statediagram-cluster rect.outer {rx: 5px;ry: 5px; }#mermaid-svg-7P0U8CTggq40AxhP .statediagram-state .divider {stroke: #9370DB; }#mermaid-svg-7P0U8CTggq40AxhP .statediagram-state .title-state {rx: 5px;ry: 5px; }#mermaid-svg-7P0U8CTggq40AxhP .statediagram-cluster.statediagram-cluster .inner {fill: white; }#mermaid-svg-7P0U8CTggq40AxhP .statediagram-cluster.statediagram-cluster-alt .inner {fill: #e0e0e0; }#mermaid-svg-7P0U8CTggq40AxhP .statediagram-cluster .inner {rx: 0;ry: 0; }#mermaid-svg-7P0U8CTggq40AxhP .statediagram-state rect.basic {rx: 5px;ry: 5px; }#mermaid-svg-7P0U8CTggq40AxhP .statediagram-state rect.divider {stroke-dasharray: 10,10;fill: #efefef; }#mermaid-svg-7P0U8CTggq40AxhP .note-edge {stroke-dasharray: 5; }#mermaid-svg-7P0U8CTggq40AxhP .statediagram-note rect {fill: #fff5ad;stroke: #aaaa33;stroke-width: 1px;rx: 0;ry: 0; }:root {--mermaid-font-family: '"trebuchet ms", verdana, arial';--mermaid-font-family: "Comic Sans MS", "Comic Sans", cursive; }#mermaid-svg-7P0U8CTggq40AxhP .error-icon {fill: #552222; }#mermaid-svg-7P0U8CTggq40AxhP .error-text {fill: #552222;stroke: #552222; }#mermaid-svg-7P0U8CTggq40AxhP .edge-thickness-normal {stroke-width: 2px; }#mermaid-svg-7P0U8CTggq40AxhP .edge-thickness-thick {stroke-width: 3.5px; }#mermaid-svg-7P0U8CTggq40AxhP .edge-pattern-solid {stroke-dasharray: 0; }#mermaid-svg-7P0U8CTggq40AxhP .edge-pattern-dashed {stroke-dasharray: 3; }#mermaid-svg-7P0U8CTggq40AxhP .edge-pattern-dotted {stroke-dasharray: 2; }#mermaid-svg-7P0U8CTggq40AxhP .marker {fill: #333333; }#mermaid-svg-7P0U8CTggq40AxhP .marker.cross {stroke: #333333; }:root { --mermaid-font-family: "trebuchet ms", verdana, arial;}#mermaid-svg-7P0U8CTggq40AxhP {color: rgba(0, 0, 0, 0.75);font: ;}STAAPps-polldata1 more data bit=1ack 没有被AP收到当STA没有正确ack时,AP不会清除缓存的这一包ps-polldata1 more data bit=1ackps-polldata2 more data bit=0ackSTA接收到AP缓在存的所有包STAAP

更有效的做法是:当从beacon的TIM帧中发现AP有缓存的包时,STA发送Null data power bit =0直接退出省电模式,这样AP再把缓存的包发给STA,避免了反复发ps-poll。

U-APSD信息协商

U-APSD全称Unscheduled Automatic Power Save Delivery,是802.11e引入的带有优先级的省电模式。主要针对是单播QoS-Data 和QoS-Null frame。

AP在Beacon,Probe response和Association respnse中会带WMM Information Element,其中QoS Info Field会被来声明自己支持U-APSD功能。

QoS Info field when sent from WMM AP

U-APSD: 为1时代表支持U-APSD功能。
Parameter Set Count: 可以初始化为任意值,通常为0,每当AC Parameter变化时,这个值会自加。

当STA连接AP时,在Assocication request中会带QoS Info field。这里会告诉AP,STA是否支持trigger-enabled和delivery-enabled,以及每个服务周期AP最多能给STA发多少个MSDU 和MMSDU。这为后面的U-APSD功能打下基础。

QoS Info field when sent from WMM STA

Max SP Length subfield: 一个服务周期中,AP可以发给STA 最多发送多少个MSDU 和MMSDU。如下表。

AC_XX U-APSD Flag: 1- 对应的AC trigger-enabled和delivery-enabled。 0- 对应的AC non trigger-enabled和 non delivery-enabled。

U-APSD省电流程

  1. 当AP为STA缓存了包时,会在beacon帧的TIM中置位,通知STA,这个与传统省电模式一样。
  2. STA发送Trigger Frame with power bit =0 开启一个服务周期。Trigger Frame可以是一个QoS的Data,也可以是QoS的NUll data。AP会根据QoS Control Field中的UP字段确定发送哪个AC的缓存包。当这个服务周期结束前,STA将一直处于Active状态,等待收包。STA收到AP缓存包时,检查QoS Control Field中的EOSP字段,为1代表当前服务周期结束。

QoS Control Field

EOSP:End of Service Period,为1代表结束。
UP:是上层的优先级,0~7。通过802.1D映射到AC(BK/BE/VI/VO)。

  1. AP根据UP得出STA请求的AC,然后将该AC的缓存包发给STA。AP至少要发一个包或是发 Max SP Length个包。
  • 比如当AP发现STA请求的AC中没有任何包时,这时至少要发一个QoS Null data(more data bit=0 EOSP=1)。
  • 当然也有可能本服务周期结束时,缓存的data还没有传完,这时最后一包的data会是more data bit=1, EOSP=1,等待STA后面再发Trigger Frame。
  • AP可能遇到STA要求的AC没有trigger-enabled和delivery-enabled,这时也会发QoS Null data(more data bit=0 EOSP=1)。

最后用下图描述一次U-APSD的过程。

#mermaid-svg-u1hC8Zu0JF8zhlTX .label {font-family: 'trebuchet ms', verdana, arial;font-family: var(--mermaid-font-family);fill: #333;color: #333; }#mermaid-svg-u1hC8Zu0JF8zhlTX .label text {fill: #333; }#mermaid-svg-u1hC8Zu0JF8zhlTX .node rect, #mermaid-svg-u1hC8Zu0JF8zhlTX .node circle, #mermaid-svg-u1hC8Zu0JF8zhlTX .node ellipse, #mermaid-svg-u1hC8Zu0JF8zhlTX .node polygon, #mermaid-svg-u1hC8Zu0JF8zhlTX .node path {fill: #ECECFF;stroke: #9370DB;stroke-width: 1px; }#mermaid-svg-u1hC8Zu0JF8zhlTX .node .label {text-align: center;fill: #333; }#mermaid-svg-u1hC8Zu0JF8zhlTX .node.clickable {cursor: pointer; }#mermaid-svg-u1hC8Zu0JF8zhlTX .arrowheadPath {fill: #333333; }#mermaid-svg-u1hC8Zu0JF8zhlTX .edgePath .path {stroke: #333333;stroke-width: 1.5px; }#mermaid-svg-u1hC8Zu0JF8zhlTX .flowchart-link {stroke: #333333;fill: none; }#mermaid-svg-u1hC8Zu0JF8zhlTX .edgeLabel {background-color: #e8e8e8;text-align: center; } #mermaid-svg-u1hC8Zu0JF8zhlTX .edgeLabel rect {opacity: 0.9; } #mermaid-svg-u1hC8Zu0JF8zhlTX .edgeLabel span {color: #333; }#mermaid-svg-u1hC8Zu0JF8zhlTX .cluster rect {fill: #ffffde;stroke: #aaaa33;stroke-width: 1px; }#mermaid-svg-u1hC8Zu0JF8zhlTX .cluster text {fill: #333; }#mermaid-svg-u1hC8Zu0JF8zhlTX div.mermaidTooltip {position: absolute;text-align: center;max-width: 200px;padding: 2px;font-family: 'trebuchet ms', verdana, arial;font-family: var(--mermaid-font-family);font-size: 12px;background: #ffffde;border: 1px solid #aaaa33;border-radius: 2px;pointer-events: none;z-index: 100; }#mermaid-svg-u1hC8Zu0JF8zhlTX .actor {stroke: #CCCCFF;fill: #ECECFF; }#mermaid-svg-u1hC8Zu0JF8zhlTX text.actor > tspan {fill: black;stroke: none; }#mermaid-svg-u1hC8Zu0JF8zhlTX .actor-line {stroke: grey; }#mermaid-svg-u1hC8Zu0JF8zhlTX .messageLine0 {stroke-width: 1.5;stroke-dasharray: none;stroke: #333; }#mermaid-svg-u1hC8Zu0JF8zhlTX .messageLine1 {stroke-width: 1.5;stroke-dasharray: 2, 2;stroke: #333; }#mermaid-svg-u1hC8Zu0JF8zhlTX #arrowhead path {fill: #333;stroke: #333; }#mermaid-svg-u1hC8Zu0JF8zhlTX .sequenceNumber {fill: white; }#mermaid-svg-u1hC8Zu0JF8zhlTX #sequencenumber {fill: #333; }#mermaid-svg-u1hC8Zu0JF8zhlTX #crosshead path {fill: #333;stroke: #333; }#mermaid-svg-u1hC8Zu0JF8zhlTX .messageText {fill: #333;stroke: #333; }#mermaid-svg-u1hC8Zu0JF8zhlTX .labelBox {stroke: #CCCCFF;fill: #ECECFF; }#mermaid-svg-u1hC8Zu0JF8zhlTX .labelText,#mermaid-svg-u1hC8Zu0JF8zhlTX .labelText > tspan {fill: black;stroke: none; }#mermaid-svg-u1hC8Zu0JF8zhlTX .loopText,#mermaid-svg-u1hC8Zu0JF8zhlTX .loopText > tspan {fill: black;stroke: none; }#mermaid-svg-u1hC8Zu0JF8zhlTX .loopLine {stroke-width: 2px;stroke-dasharray: 2, 2;stroke: #CCCCFF;fill: #CCCCFF; }#mermaid-svg-u1hC8Zu0JF8zhlTX .note {stroke: #aaaa33;fill: #fff5ad; }#mermaid-svg-u1hC8Zu0JF8zhlTX .noteText,#mermaid-svg-u1hC8Zu0JF8zhlTX .noteText > tspan {fill: black;stroke: none; }#mermaid-svg-u1hC8Zu0JF8zhlTX .activation0 {fill: #f4f4f4;stroke: #666; }#mermaid-svg-u1hC8Zu0JF8zhlTX .activation1 {fill: #f4f4f4;stroke: #666; }#mermaid-svg-u1hC8Zu0JF8zhlTX .activation2 {fill: #f4f4f4;stroke: #666; }#mermaid-svg-u1hC8Zu0JF8zhlTX .mermaid-main-font {font-family: "trebuchet ms", verdana, arial;font-family: var(--mermaid-font-family); }#mermaid-svg-u1hC8Zu0JF8zhlTX .section {stroke: none;opacity: 0.2; }#mermaid-svg-u1hC8Zu0JF8zhlTX .section0 {fill: rgba(102, 102, 255, 0.49); }#mermaid-svg-u1hC8Zu0JF8zhlTX .section2 {fill: #fff400; }#mermaid-svg-u1hC8Zu0JF8zhlTX .section1, #mermaid-svg-u1hC8Zu0JF8zhlTX .section3 {fill: white;opacity: 0.2; }#mermaid-svg-u1hC8Zu0JF8zhlTX .sectionTitle0 {fill: #333; }#mermaid-svg-u1hC8Zu0JF8zhlTX .sectionTitle1 {fill: #333; }#mermaid-svg-u1hC8Zu0JF8zhlTX .sectionTitle2 {fill: #333; }#mermaid-svg-u1hC8Zu0JF8zhlTX .sectionTitle3 {fill: #333; }#mermaid-svg-u1hC8Zu0JF8zhlTX .sectionTitle {text-anchor: start;font-size: 11px;text-height: 14px;font-family: 'trebuchet ms', verdana, arial;font-family: var(--mermaid-font-family); }#mermaid-svg-u1hC8Zu0JF8zhlTX .grid .tick {stroke: lightgrey;opacity: 0.8;shape-rendering: crispEdges; } #mermaid-svg-u1hC8Zu0JF8zhlTX .grid .tick text {font-family: 'trebuchet ms', verdana, arial;font-family: var(--mermaid-font-family); }#mermaid-svg-u1hC8Zu0JF8zhlTX .grid path {stroke-width: 0; }#mermaid-svg-u1hC8Zu0JF8zhlTX .today {fill: none;stroke: red;stroke-width: 2px; }#mermaid-svg-u1hC8Zu0JF8zhlTX .task {stroke-width: 2; }#mermaid-svg-u1hC8Zu0JF8zhlTX .taskText {text-anchor: middle;font-family: 'trebuchet ms', verdana, arial;font-family: var(--mermaid-font-family); }#mermaid-svg-u1hC8Zu0JF8zhlTX .taskText:not([font-size]) {font-size: 11px; }#mermaid-svg-u1hC8Zu0JF8zhlTX .taskTextOutsideRight {fill: black;text-anchor: start;font-size: 11px;font-family: 'trebuchet ms', verdana, arial;font-family: var(--mermaid-font-family); }#mermaid-svg-u1hC8Zu0JF8zhlTX .taskTextOutsideLeft {fill: black;text-anchor: end;font-size: 11px; }#mermaid-svg-u1hC8Zu0JF8zhlTX .task.clickable {cursor: pointer; }#mermaid-svg-u1hC8Zu0JF8zhlTX .taskText.clickable {cursor: pointer;fill: #003163 !important;font-weight: bold; }#mermaid-svg-u1hC8Zu0JF8zhlTX .taskTextOutsideLeft.clickable {cursor: pointer;fill: #003163 !important;font-weight: bold; }#mermaid-svg-u1hC8Zu0JF8zhlTX .taskTextOutsideRight.clickable {cursor: pointer;fill: #003163 !important;font-weight: bold; }#mermaid-svg-u1hC8Zu0JF8zhlTX .taskText0, #mermaid-svg-u1hC8Zu0JF8zhlTX .taskText1, #mermaid-svg-u1hC8Zu0JF8zhlTX .taskText2, #mermaid-svg-u1hC8Zu0JF8zhlTX .taskText3 {fill: white; }#mermaid-svg-u1hC8Zu0JF8zhlTX .task0, #mermaid-svg-u1hC8Zu0JF8zhlTX .task1, #mermaid-svg-u1hC8Zu0JF8zhlTX .task2, #mermaid-svg-u1hC8Zu0JF8zhlTX .task3 {fill: #8a90dd;stroke: #534fbc; }#mermaid-svg-u1hC8Zu0JF8zhlTX .taskTextOutside0, #mermaid-svg-u1hC8Zu0JF8zhlTX .taskTextOutside2 {fill: black; }#mermaid-svg-u1hC8Zu0JF8zhlTX .taskTextOutside1, #mermaid-svg-u1hC8Zu0JF8zhlTX .taskTextOutside3 {fill: black; }#mermaid-svg-u1hC8Zu0JF8zhlTX .active0, #mermaid-svg-u1hC8Zu0JF8zhlTX .active1, #mermaid-svg-u1hC8Zu0JF8zhlTX .active2, #mermaid-svg-u1hC8Zu0JF8zhlTX .active3 {fill: #bfc7ff;stroke: #534fbc; }#mermaid-svg-u1hC8Zu0JF8zhlTX .activeText0, #mermaid-svg-u1hC8Zu0JF8zhlTX .activeText1, #mermaid-svg-u1hC8Zu0JF8zhlTX .activeText2, #mermaid-svg-u1hC8Zu0JF8zhlTX .activeText3 {fill: black !important; }#mermaid-svg-u1hC8Zu0JF8zhlTX .done0, #mermaid-svg-u1hC8Zu0JF8zhlTX .done1, #mermaid-svg-u1hC8Zu0JF8zhlTX .done2, #mermaid-svg-u1hC8Zu0JF8zhlTX .done3 {stroke: grey;fill: lightgrey;stroke-width: 2; }#mermaid-svg-u1hC8Zu0JF8zhlTX .doneText0, #mermaid-svg-u1hC8Zu0JF8zhlTX .doneText1, #mermaid-svg-u1hC8Zu0JF8zhlTX .doneText2, #mermaid-svg-u1hC8Zu0JF8zhlTX .doneText3 {fill: black !important; }#mermaid-svg-u1hC8Zu0JF8zhlTX .crit0, #mermaid-svg-u1hC8Zu0JF8zhlTX .crit1, #mermaid-svg-u1hC8Zu0JF8zhlTX .crit2, #mermaid-svg-u1hC8Zu0JF8zhlTX .crit3 {stroke: #ff8888;fill: red;stroke-width: 2; }#mermaid-svg-u1hC8Zu0JF8zhlTX .activeCrit0, #mermaid-svg-u1hC8Zu0JF8zhlTX .activeCrit1, #mermaid-svg-u1hC8Zu0JF8zhlTX .activeCrit2, #mermaid-svg-u1hC8Zu0JF8zhlTX .activeCrit3 {stroke: #ff8888;fill: #bfc7ff;stroke-width: 2; }#mermaid-svg-u1hC8Zu0JF8zhlTX .doneCrit0, #mermaid-svg-u1hC8Zu0JF8zhlTX .doneCrit1, #mermaid-svg-u1hC8Zu0JF8zhlTX .doneCrit2, #mermaid-svg-u1hC8Zu0JF8zhlTX .doneCrit3 {stroke: #ff8888;fill: lightgrey;stroke-width: 2;cursor: pointer;shape-rendering: crispEdges; }#mermaid-svg-u1hC8Zu0JF8zhlTX .milestone {transform: rotate(45deg) scale(0.8, 0.8); }#mermaid-svg-u1hC8Zu0JF8zhlTX .milestoneText {font-style: italic; }#mermaid-svg-u1hC8Zu0JF8zhlTX .doneCritText0, #mermaid-svg-u1hC8Zu0JF8zhlTX .doneCritText1, #mermaid-svg-u1hC8Zu0JF8zhlTX .doneCritText2, #mermaid-svg-u1hC8Zu0JF8zhlTX .doneCritText3 {fill: black !important; }#mermaid-svg-u1hC8Zu0JF8zhlTX .activeCritText0, #mermaid-svg-u1hC8Zu0JF8zhlTX .activeCritText1, #mermaid-svg-u1hC8Zu0JF8zhlTX .activeCritText2, #mermaid-svg-u1hC8Zu0JF8zhlTX .activeCritText3 {fill: black !important; }#mermaid-svg-u1hC8Zu0JF8zhlTX .titleText {text-anchor: middle;font-size: 18px;fill: black;font-family: 'trebuchet ms', verdana, arial;font-family: var(--mermaid-font-family); }#mermaid-svg-u1hC8Zu0JF8zhlTX g.classGroup text {fill: #9370DB;stroke: none;font-family: 'trebuchet ms', verdana, arial;font-family: var(--mermaid-font-family);font-size: 10px; } #mermaid-svg-u1hC8Zu0JF8zhlTX g.classGroup text .title {font-weight: bolder; }#mermaid-svg-u1hC8Zu0JF8zhlTX g.clickable {cursor: pointer; }#mermaid-svg-u1hC8Zu0JF8zhlTX g.classGroup rect {fill: #ECECFF;stroke: #9370DB; }#mermaid-svg-u1hC8Zu0JF8zhlTX g.classGroup line {stroke: #9370DB;stroke-width: 1; }#mermaid-svg-u1hC8Zu0JF8zhlTX .classLabel .box {stroke: none;stroke-width: 0;fill: #ECECFF;opacity: 0.5; }#mermaid-svg-u1hC8Zu0JF8zhlTX .classLabel .label {fill: #9370DB;font-size: 10px; }#mermaid-svg-u1hC8Zu0JF8zhlTX .relation {stroke: #9370DB;stroke-width: 1;fill: none; }#mermaid-svg-u1hC8Zu0JF8zhlTX .dashed-line {stroke-dasharray: 3; }#mermaid-svg-u1hC8Zu0JF8zhlTX #compositionStart {fill: #9370DB;stroke: #9370DB;stroke-width: 1; }#mermaid-svg-u1hC8Zu0JF8zhlTX #compositionEnd {fill: #9370DB;stroke: #9370DB;stroke-width: 1; }#mermaid-svg-u1hC8Zu0JF8zhlTX #aggregationStart {fill: #ECECFF;stroke: #9370DB;stroke-width: 1; }#mermaid-svg-u1hC8Zu0JF8zhlTX #aggregationEnd {fill: #ECECFF;stroke: #9370DB;stroke-width: 1; }#mermaid-svg-u1hC8Zu0JF8zhlTX #dependencyStart {fill: #9370DB;stroke: #9370DB;stroke-width: 1; }#mermaid-svg-u1hC8Zu0JF8zhlTX #dependencyEnd {fill: #9370DB;stroke: #9370DB;stroke-width: 1; }#mermaid-svg-u1hC8Zu0JF8zhlTX #extensionStart {fill: #9370DB;stroke: #9370DB;stroke-width: 1; }#mermaid-svg-u1hC8Zu0JF8zhlTX #extensionEnd {fill: #9370DB;stroke: #9370DB;stroke-width: 1; }#mermaid-svg-u1hC8Zu0JF8zhlTX .commit-id, #mermaid-svg-u1hC8Zu0JF8zhlTX .commit-msg, #mermaid-svg-u1hC8Zu0JF8zhlTX .branch-label {fill: lightgrey;color: lightgrey;font-family: 'trebuchet ms', verdana, arial;font-family: var(--mermaid-font-family); }#mermaid-svg-u1hC8Zu0JF8zhlTX .pieTitleText {text-anchor: middle;font-size: 25px;fill: black;font-family: 'trebuchet ms', verdana, arial;font-family: var(--mermaid-font-family); }#mermaid-svg-u1hC8Zu0JF8zhlTX .slice {font-family: 'trebuchet ms', verdana, arial;font-family: var(--mermaid-font-family); }#mermaid-svg-u1hC8Zu0JF8zhlTX g.stateGroup text {fill: #9370DB;stroke: none;font-size: 10px;font-family: 'trebuchet ms', verdana, arial;font-family: var(--mermaid-font-family); }#mermaid-svg-u1hC8Zu0JF8zhlTX g.stateGroup text {fill: #9370DB;fill: #333;stroke: none;font-size: 10px; }#mermaid-svg-u1hC8Zu0JF8zhlTX g.statediagram-cluster .cluster-label text {fill: #333; }#mermaid-svg-u1hC8Zu0JF8zhlTX g.stateGroup .state-title {font-weight: bolder;fill: black; }#mermaid-svg-u1hC8Zu0JF8zhlTX g.stateGroup rect {fill: #ECECFF;stroke: #9370DB; }#mermaid-svg-u1hC8Zu0JF8zhlTX g.stateGroup line {stroke: #9370DB;stroke-width: 1; }#mermaid-svg-u1hC8Zu0JF8zhlTX .transition {stroke: #9370DB;stroke-width: 1;fill: none; }#mermaid-svg-u1hC8Zu0JF8zhlTX .stateGroup .composit {fill: white;border-bottom: 1px; }#mermaid-svg-u1hC8Zu0JF8zhlTX .stateGroup .alt-composit {fill: #e0e0e0;border-bottom: 1px; }#mermaid-svg-u1hC8Zu0JF8zhlTX .state-note {stroke: #aaaa33;fill: #fff5ad; } #mermaid-svg-u1hC8Zu0JF8zhlTX .state-note text {fill: black;stroke: none;font-size: 10px; }#mermaid-svg-u1hC8Zu0JF8zhlTX .stateLabel .box {stroke: none;stroke-width: 0;fill: #ECECFF;opacity: 0.7; }#mermaid-svg-u1hC8Zu0JF8zhlTX .edgeLabel text {fill: #333; }#mermaid-svg-u1hC8Zu0JF8zhlTX .stateLabel text {fill: black;font-size: 10px;font-weight: bold;font-family: 'trebuchet ms', verdana, arial;font-family: var(--mermaid-font-family); }#mermaid-svg-u1hC8Zu0JF8zhlTX .node circle.state-start {fill: black;stroke: black; }#mermaid-svg-u1hC8Zu0JF8zhlTX .node circle.state-end {fill: black;stroke: white;stroke-width: 1.5; }#mermaid-svg-u1hC8Zu0JF8zhlTX #statediagram-barbEnd {fill: #9370DB; }#mermaid-svg-u1hC8Zu0JF8zhlTX .statediagram-cluster rect {fill: #ECECFF;stroke: #9370DB;stroke-width: 1px; }#mermaid-svg-u1hC8Zu0JF8zhlTX .statediagram-cluster rect.outer {rx: 5px;ry: 5px; }#mermaid-svg-u1hC8Zu0JF8zhlTX .statediagram-state .divider {stroke: #9370DB; }#mermaid-svg-u1hC8Zu0JF8zhlTX .statediagram-state .title-state {rx: 5px;ry: 5px; }#mermaid-svg-u1hC8Zu0JF8zhlTX .statediagram-cluster.statediagram-cluster .inner {fill: white; }#mermaid-svg-u1hC8Zu0JF8zhlTX .statediagram-cluster.statediagram-cluster-alt .inner {fill: #e0e0e0; }#mermaid-svg-u1hC8Zu0JF8zhlTX .statediagram-cluster .inner {rx: 0;ry: 0; }#mermaid-svg-u1hC8Zu0JF8zhlTX .statediagram-state rect.basic {rx: 5px;ry: 5px; }#mermaid-svg-u1hC8Zu0JF8zhlTX .statediagram-state rect.divider {stroke-dasharray: 10,10;fill: #efefef; }#mermaid-svg-u1hC8Zu0JF8zhlTX .note-edge {stroke-dasharray: 5; }#mermaid-svg-u1hC8Zu0JF8zhlTX .statediagram-note rect {fill: #fff5ad;stroke: #aaaa33;stroke-width: 1px;rx: 0;ry: 0; }:root {--mermaid-font-family: '"trebuchet ms", verdana, arial';--mermaid-font-family: "Comic Sans MS", "Comic Sans", cursive; }#mermaid-svg-u1hC8Zu0JF8zhlTX .error-icon {fill: #552222; }#mermaid-svg-u1hC8Zu0JF8zhlTX .error-text {fill: #552222;stroke: #552222; }#mermaid-svg-u1hC8Zu0JF8zhlTX .edge-thickness-normal {stroke-width: 2px; }#mermaid-svg-u1hC8Zu0JF8zhlTX .edge-thickness-thick {stroke-width: 3.5px; }#mermaid-svg-u1hC8Zu0JF8zhlTX .edge-pattern-solid {stroke-dasharray: 0; }#mermaid-svg-u1hC8Zu0JF8zhlTX .edge-pattern-dashed {stroke-dasharray: 3; }#mermaid-svg-u1hC8Zu0JF8zhlTX .edge-pattern-dotted {stroke-dasharray: 2; }#mermaid-svg-u1hC8Zu0JF8zhlTX .marker {fill: #333333; }#mermaid-svg-u1hC8Zu0JF8zhlTX .marker.cross {stroke: #333333; }:root { --mermaid-font-family: "trebuchet ms", verdana, arial;}#mermaid-svg-u1hC8Zu0JF8zhlTX {color: rgba(0, 0, 0, 0.75);font: ;}APSTAbeacon(TIM IE)指示有缓存包,STA进入Active Modetrigger frame(UP=6 vo power bit=0)ackvo data1(more data=1 EOSP=0)ackvo data2(more data=1 EOSP=1)ack服务周期结束STA,但data还没有收完。trigger frame(UP=6 vo power bit=0)ackvo data3(more data=0 EOSP=1)ackdata收完,服务周期结束,STA进入Sleep Mode。APSTA

WMM-PS的U-APSD(5)相关推荐

  1. 802.11 Power Save(节电/省电/节能)机制总结

    背景介绍 了解WIFI节能的机制之前,首先要了解WIFI能耗的消耗发生在什么状态下,显而易见,发送和接收肯定是消耗能量的,还有一点是要认识到的,Power Save通常是在STA端进行的,AP需要一直 ...

  2. MT7601U芯片怎么样?MT7601U处理器参数介绍

    MT7601U是一种高度集成的WiFi单芯片,支持150 Mbps的PHY速率.它完全符合ieee 802.11n和ieee 802.11 b/g标准,提供丰富的无线连接功能.在高标准下,从扩展的距离 ...

  3. wifi四种省电模式的控制

    分享一下我老师大神的人工智能教程!零基础,通俗易懂!http://blog.csdn.net/jiangjunshow 也欢迎大家转载本篇文章.分享知识,造福人民,实现我们中华民族伟大复兴! WIFI ...

  4. Linux 运维常用命令 find、awk、sed、grep、vi、ps、lsof、rpm

    先用一个脚本,模拟创建 14 个测试文件: #!/bin/bash for ((i=1;i<=10;i++)); do if [ $i -lt 3 ] thentouch /home/mysql ...

  5. Linux shell 学习笔记(2)— 监测程序、磁盘空间和处理文件(ps -ef、top、kill、df、du 、grep、tar)

    1. 监测程序 1.1 检查进程 默认情况下,ps 命令只会显示运行在当前控制台下的属于当前用户的进程. $ ps PID TTY TIME CMD 3081 pts/0 00:00:00 bash ...

  6. ps -ef 的含义

    在linux中ps一般后面加上-ef来显示详细的进程信息 一般我们使用的时候会在后面添加grep 例如: ps -ef|grep java 显示java 的所有进程,当然我们也可以不输入完整例如ps ...

  7. PS多形式的部分之间复制“笨办法”

    PS剪切页面,有时候你可能会遇到这样的情况:设计改进,但是,我们要具有相同的切片. 在此假设,可以直接用于切割片.我们可以节省大量的时间,又分为片. 但是,人们一般不会在你的上跨片设计PSD在变化,但 ...

  8. camera raw 滤镜预设_Camera Raw中利用预设实现批量化调色,PS这款滤镜真的很好用...

    大家都知道Camera Raw是PS里面自带的一款调色滤镜,功能非常强大,但是你知道如何在Camera Raw中批量化调色吗,今天就教给大家如何运用Camera Raw中的预设功能快速调色 1.打开P ...

  9. 3d stroke插件下载_推荐一款好用的PS 3D地图插件,PS插件3D Map Generator ,一键生成地图神器...

    今天,给大家推荐一个强大的Photoshop(PS)地图插件--3D Map Generator,可以方便制作3D特效效果. 3D Map Generator插件是什么 3D Map Generato ...

  10. io vivado 怎么查看ps_ZYNQ 7020学习笔记之PL侧普通信号中断PS的实验

    1.参考 UG585 网络笔记 2.理论知识 见中断部分 3.实验目的 练习使用PL侧的普通信号来中断PS处理器. 4.实验过程 建立工程,设置并初始化串口中断,在运行程序之后,如果串口接收到N(1- ...

最新文章

  1. java 视图对象转换,使用spring boot开发时java对象和Json对象转换的问题_JavaScript_网络编程...
  2. 使用显式Intent向下一个活动传递数据
  3. 操作篇 DHCP协议学习与应用
  4. jsp或servlet依赖范围不能省略原因
  5. frontcon函数用不了_真香警告!用了XLOOKUP再也回不去VLOOKUP了
  6. c语言中验证巴德哥赫猜想,哥赫巴德猜想具体内容是什么?
  7. IT如何跨越与业务间的那道“鸿沟”?
  8. 入选 Gartner 魔力象限,剖析华为云 GaussDB 数据库演进之路
  9. Spark on Yarn遇到的几个问题
  10. 读书笔记:Hadoop权威指南 简介
  11. PCB板层简介+走线
  12. 百度网盘新用户超级会员多少钱
  13. 作为技术人员,我是如何安排学习的
  14. 舒适区下的焦虑感和破局
  15. 移植spca5xx-v4l1goodbye到立宇泰ARMSYS244O开发板
  16. 安全邮箱是什么邮箱?怎么登录163邮箱?
  17. 《Flex+PHP RIA应用开发实战详解-梁文新版》学习日记1
  18. Android——百度语音唤醒
  19. Eclipse实用插件
  20. 1024: 大小写转换(C语言)

热门文章

  1. 使用matplotlib的axes画图
  2. 晚清五大臣出洋考察事件解密
  3. 科技公司的中台战略:理念溯源、组织边界及其实施之道∣企鹅经济学
  4. 哥德堡 值得被爱上的老城
  5. signature=e144ca2b8087c6451a470f87040ffa4d,COMPLEX IMPEDANCE DETECTION
  6. 百度地图API报 APP服务被禁用
  7. 单片机设计_8路抢答器(AT89C51)
  8. 快速开发智能硬件,阿里云AIoT首期云端一体训练营开麦了
  9. 一图读懂HUAWEI HiAI Foundation
  10. 计算机二级C++模拟题一(附参考答案解析)