女人自慰AV免费观看内涵网,日韩国产剧情在线观看网址,神马电影网特片网,最新一级电影欧美,在线观看亚洲欧美日韩,黄色视频在线播放免费观看,ABO涨奶期羡澄,第一导航fulione,美女主播操b

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

TencentOS-tiny中環(huán)形隊(duì)列的實(shí)現(xiàn)

strongerHuang ? 來(lái)源:Mculover666 ? 作者:Mculover666 ? 2021-10-08 16:30 ? 次閱讀

1. 什么是隊(duì)列隊(duì)列(queue)是一種只能在一端插入元素、在另一端刪除元素的數(shù)據(jù)結(jié)構(gòu),遵循「先入先出」(FIFO)的規(guī)則。

隊(duì)列中有兩個(gè)基本概念:

隊(duì)頭指針(可變):永遠(yuǎn)指向此隊(duì)列的第一個(gè)數(shù)據(jù)元素;

隊(duì)尾指針(可變):永遠(yuǎn)指向此隊(duì)列的最后一個(gè)數(shù)據(jù)元素;

隊(duì)列中的數(shù)據(jù)存儲(chǔ)方式有兩種:

① 基于靜態(tài)連續(xù)內(nèi)存(數(shù)組)存儲(chǔ),如圖:② 基于動(dòng)態(tài)內(nèi)存(鏈表節(jié)點(diǎn))存儲(chǔ),如圖:

?

后續(xù)都使用基于靜態(tài)內(nèi)存存儲(chǔ)的隊(duì)列講解。

?隊(duì)列提供兩個(gè)統(tǒng)一的操作:

「入隊(duì)(enqueue)」

入隊(duì)將一個(gè)元素添加到隊(duì)尾,并將隊(duì)尾指針+1后移,如圖:

「出隊(duì)(dequeue)」

出隊(duì)將從隊(duì)頭中取出一個(gè)元素,并將隊(duì)頭指針+1后移,如圖:

2. 環(huán)形隊(duì)列2.1. 環(huán)形隊(duì)列的特點(diǎn)

普通隊(duì)列的入隊(duì)操作將隊(duì)尾指針后移+1,出隊(duì)操作將隊(duì)頭指針后移+1,操作幾次之后會(huì)發(fā)現(xiàn)隊(duì)頭指針和隊(duì)尾指針都跑到緩沖區(qū)的尾部去了:這就導(dǎo)致了前面的內(nèi)存空間全被浪費(fèi),如果要重新恢復(fù)使用,則需要進(jìn)行元素和指針的移動(dòng):顯然這種隊(duì)列使用方式太不方便了,所以就誕生了環(huán)形隊(duì)列:「不用搬移元素和指針,一直可以重復(fù)利用這段內(nèi)存空間」。

2.2. 環(huán)形隊(duì)列的實(shí)現(xiàn)

TencentOS-tiny中環(huán)形隊(duì)列的實(shí)現(xiàn)在tos_ring_queue.h和tos_ring_queue.c中。

typedef struct k_ring_queue_st {

knl_obj_t knl_obj;

uint16_t head; //隊(duì)頭指針

uint16_t tail; //隊(duì)尾指針

size_t total; //記錄隊(duì)列中元素的個(gè)數(shù)

uint8_t *pool; //隊(duì)列底層的存儲(chǔ)結(jié)構(gòu)(一個(gè)數(shù)組)

size_t item_size; //隊(duì)列中每個(gè)元素的大小,單位:字節(jié)

size_t item_cnt; //隊(duì)列中可以容納的元素?cái)?shù)量

} k_ring_q_t;

環(huán)形隊(duì)列初始化,將隊(duì)頭指針和隊(duì)尾置0:

__API__ k_err_t tos_ring_q_create(k_ring_q_t *ring_q, void *pool, size_t item_cnt, size_t item_size)

{

//省略了參數(shù)合法性檢查代碼

ring_q-》head = 0u;

ring_q-》tail = 0u;

ring_q-》total = 0;

ring_q-》pool = (uint8_t *)pool;

ring_q-》item_size = item_size;

ring_q-》item_cnt = item_cnt;

return K_ERR_NONE;

}

判斷環(huán)形隊(duì)列是否為滿或者為空:

__API__ int tos_ring_q_is_empty(k_ring_q_t *ring_q)

{

TOS_CPU_CPSR_ALLOC();

int is_empty = K_FALSE;

//省略了參數(shù)合法性檢查代碼

TOS_CPU_INT_DISABLE();

is_empty = (ring_q-》total == 0 ? K_TRUE : K_FALSE);

TOS_CPU_INT_ENABLE();

return is_empty;

}

__API__ int tos_ring_q_is_full(k_ring_q_t *ring_q)

{

TOS_CPU_CPSR_ALLOC();

int is_full = K_FALSE;

//省略了參數(shù)合法性檢查代碼

TOS_CPU_INT_DISABLE();

is_full = (ring_q-》total == ring_q-》item_cnt ? K_TRUE : K_FALSE);

TOS_CPU_INT_ENABLE();

return is_full;

}

環(huán)形隊(duì)列入隊(duì)操作的API如下:

__API__ k_err_t tos_ring_q_enqueue(k_ring_q_t *ring_q, void *item, size_t item_size);

在此API中,入隊(duì)操作的實(shí)現(xiàn)如下:

__STATIC_INLINE__ void ring_q_item_increase(k_ring_q_t *ring_q)

{

ring_q-》tail = RING_NEXT(ring_q, ring_q-》tail);

++ring_q-》total;

}

環(huán)形隊(duì)列出隊(duì)操作的API如下:

__API__ k_err_t tos_ring_q_dequeue(k_ring_q_t *ring_q, void *item, size_t *item_size);

在此API中,出隊(duì)操作的實(shí)現(xiàn)如下:

__STATIC_INLINE__ void ring_q_item_decrease(k_ring_q_t *ring_q)

{

ring_q-》head = RING_NEXT(ring_q, ring_q-》head);

--ring_q-》total;

}

在入隊(duì)和出隊(duì)操作的時(shí)候都使用了 RING_NEXT 宏,用來(lái)獲取在環(huán)形隊(duì)列中的下一個(gè)位置:

#define RING_NEXT(ring_q, index) ((index + 1) % ring_q-》item_cnt)

2.3. 環(huán)形隊(duì)列使用Demo

編寫如下的測(cè)試代碼:

#include 《tos_k.h》typedef struct item_st {

int a;

int b;

int c;

} item_t;

#define RING_QUEUE_ITEM_MAX 5uint8_t ring_q_buffer[RING_QUEUE_ITEM_MAX * sizeof(item_t)];

k_ring_q_t ring_q;

void entry_task_demo(void *arg)

{

k_err_t err;

int i;

item_t item;

size_t item_size;

//創(chuàng)建環(huán)形隊(duì)列

tos_ring_q_create(&ring_q, ring_q_buffer, RING_QUEUE_ITEM_MAX, sizeof(item_t));

//數(shù)據(jù)入隊(duì)

for(i = 0;i 《 RING_QUEUE_ITEM_MAX; i++)

{

item.a = i;

item.b = i;

item.c = i;

err = tos_ring_q_enqueue(&ring_q, &item, sizeof(item_t));

if(err == K_ERR_NONE)

{

printf(“enqueue a item: %d %d %d

”, item.a, item.b, item.c);

}

else

{

printf(“ring queue enqueue fail,err = %d

”, err);

}

}

//隊(duì)列滿之后,繼續(xù)入隊(duì)

err = tos_ring_q_enqueue(&ring_q, &item, sizeof(item_t));

if(err == K_ERR_RING_Q_FULL)

{

printf(“ring queue is full: %s

”, tos_ring_q_is_full(&ring_q) ? “TRUE” : “FALSE”);

}

else

{

printf(“ring queue enqueue fail,err = %d

”, err);

}

//數(shù)據(jù)出隊(duì)

for(i = 0; i 《 RING_QUEUE_ITEM_MAX; ++i)

{

err = tos_ring_q_dequeue(&ring_q, &item, &item_size);

if(err == K_ERR_NONE)

{

printf(“dequeue a item(%d bytes): %d %d %d

”, item_size, item.a, item.b, item.c);

}

else

{

printf(“ring queue dequeue fail,err = %d

”, err);

}

}

//沒有數(shù)據(jù)后繼續(xù)出隊(duì)

err = tos_ring_q_dequeue(&ring_q, &item, &item_size);

if(err == K_ERR_RING_Q_EMPTY)

{

printf(“ring queue is empty: %s

”, tos_ring_q_is_empty(&ring_q) ? “TRUE” : “FALSE”);

}

else

{

printf(“ring queue dequeue fail,err = %d

”, err);

}

}

運(yùn)行結(jié)果如下:

3. 優(yōu)先級(jí)隊(duì)列3.1. 優(yōu)先級(jí)隊(duì)列的特點(diǎn)

優(yōu)先級(jí)隊(duì)列也是一種基于隊(duì)列的數(shù)據(jù)結(jié)構(gòu),但是它「不遵循FIFO」,而是按照每個(gè)元素的優(yōu)先級(jí)進(jìn)行出隊(duì):「最高優(yōu)先級(jí)的先出隊(duì)」。

3.2. 優(yōu)先級(jí)隊(duì)列的實(shí)現(xiàn)

TencentOS-tiny中環(huán)形隊(duì)列的實(shí)現(xiàn)在tos_prio_queue.h和tos_prio_queue.c中。

優(yōu)先級(jí)隊(duì)列在數(shù)據(jù)入隊(duì)的時(shí)候,會(huì)按照入隊(duì)元素的優(yōu)先級(jí)進(jìn)行一次排序,「將優(yōu)先級(jí)值最小(優(yōu)先級(jí)最高的元素)放在隊(duì)頭」,出隊(duì)的時(shí)候只需要取第一個(gè)元素即可。

正是因?yàn)檫@種特性,優(yōu)先級(jí)隊(duì)列的底層存儲(chǔ)結(jié)構(gòu)不能使用數(shù)組(排序太麻煩),而是使用了二項(xiàng)堆的數(shù)據(jù)結(jié)構(gòu)。

?

二項(xiàng)堆是一種二叉樹集合的數(shù)據(jù)結(jié)構(gòu),在本文中不再深入講解,有興趣的讀者可以自己搜索閱讀。

?下面只給出優(yōu)先級(jí)隊(duì)列的API,「理解其規(guī)則,會(huì)用即可」。

創(chuàng)建優(yōu)先級(jí)隊(duì)列

__API__ k_err_t tos_prio_q_create(k_prio_q_t *prio_q, void *mgr_array, void *pool, size_t item_cnt, size_t item_size);

參數(shù)描述

prio_q優(yōu)先級(jí)隊(duì)列控制塊指針

mgr_array提供一塊緩沖區(qū)用于內(nèi)部管理

pool隊(duì)列的緩沖區(qū)

item_cnt隊(duì)列可容納的元素?cái)?shù)量

item_size每個(gè)元素的大小,單位字節(jié)

其中用于內(nèi)部管理的緩存區(qū)大小可以使用宏定義來(lái)計(jì)算,比如有5個(gè)元素的管理緩沖區(qū)大小:

uint8_t mgr_pool[TOS_PRIO_Q_MGR_ARRAY_SIZE(5)];

元素入隊(duì)

__API__ k_err_t tos_prio_q_enqueue(k_prio_q_t *prio_q, void *item, size_t item_size, k_prio_t prio);

其中優(yōu)先級(jí)的值遵循:數(shù)值越小,優(yōu)先級(jí)越高。

元素出隊(duì)

__API__ k_err_t tos_prio_q_dequeue(k_prio_q_t *prio_q, void *item, size_t *item_size, k_prio_t *prio);

其中prio需要傳入一個(gè)地址,用于記錄出隊(duì)元素的優(yōu)先級(jí)。

3.3. 優(yōu)先級(jí)隊(duì)列使用Demo

#include 《tos_k.h》typedef struct item_st {

int a;

int b;

int c;

} item_t;

#define PRIO_QUEUE_ITEM_MAX 5uint8_t prio_q_buffer[PRIO_QUEUE_ITEM_MAX * sizeof(item_t)];

uint8_t mgr_pool[TOS_PRIO_Q_MGR_ARRAY_SIZE(PRIO_QUEUE_ITEM_MAX)];

k_prio_q_t prio_q;

void entry_task_demo(void *arg)

{

k_err_t err;

int i;

item_t item;

size_t item_size;

k_prio_t item_prio;

//創(chuàng)建優(yōu)先級(jí)隊(duì)列

tos_prio_q_create(&prio_q, mgr_pool, prio_q_buffer, PRIO_QUEUE_ITEM_MAX, sizeof(item_t));

//數(shù)據(jù)入隊(duì)

for(i = PRIO_QUEUE_ITEM_MAX;i 》 0; i--)

{

item.a = i;

item.b = i;

item.c = i;

err = tos_prio_q_enqueue(&prio_q, &item, sizeof(item), i);

if(err == K_ERR_NONE)

{

printf(“enqueue a item: %d %d %d

”, item.a, item.b, item.c);

}

else

{

printf(“prio queue enqueue fail,err = %d

”, err);

}

}

//隊(duì)列滿之后,繼續(xù)入隊(duì)

err = tos_prio_q_enqueue(&prio_q, &item, sizeof(item_t), i);

if(err == K_ERR_PRIO_Q_FULL)

{

printf(“prio queue is full: %s

”, tos_prio_q_is_full(&prio_q) ? “TRUE” : “FALSE”);

}

else

{

printf(“prio queue enqueue fail,err = %d

”, err);

}

//數(shù)據(jù)出隊(duì)

for(i = 0; i 《 PRIO_QUEUE_ITEM_MAX; ++i)

{

err = tos_prio_q_dequeue(&prio_q, &item, &item_size, &item_prio);

if(err == K_ERR_NONE)

{

printf(“dequeue a item[piro %d]: %d %d %d

”, item_prio, item.a, item.b, item.c);

}

else

{

printf(“prio queue dequeue fail,err = %d

”, err);

}

}

//沒有數(shù)據(jù)后繼續(xù)出隊(duì)

err = tos_prio_q_dequeue(&prio_q, &item, &item_size, &item_prio);

if(err == K_ERR_PRIO_Q_EMPTY)

{

printf(“prio queue is empty: %s

”, tos_prio_q_is_empty(&prio_q) ? “TRUE” : “FALSE”);

}

else

{

printf(“prio queue dequeue fail,err = %d

”, err);

}

}

4. 總結(jié)① 普通隊(duì)列是一種只能在一端入隊(duì),在一端出隊(duì)的數(shù)據(jù)結(jié)構(gòu),規(guī)則:FIFO。

② 環(huán)形隊(duì)列對(duì)內(nèi)存空間的利用率最高,使用最多,規(guī)則:FIFO。

③ 優(yōu)先級(jí)隊(duì)列不遵循FIFO,每個(gè)元素都有自己的優(yōu)先級(jí),規(guī)則:優(yōu)先級(jí)最高的元素先出隊(duì)。

責(zé)任編輯:haq

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • 數(shù)據(jù)
    +關(guān)注

    關(guān)注

    8

    文章

    7237

    瀏覽量

    90932
  • 存儲(chǔ)
    +關(guān)注

    關(guān)注

    13

    文章

    4495

    瀏覽量

    87027
  • TencentOS
    +關(guān)注

    關(guān)注

    0

    文章

    8

    瀏覽量

    7411

原文標(biāo)題:TencentOS-tiny中隊(duì)列、環(huán)形隊(duì)列、優(yōu)先級(jí)隊(duì)列的實(shí)現(xiàn)及使用

文章出處:【微信號(hào):strongerHuang,微信公眾號(hào):strongerHuang】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

收藏 人收藏

    評(píng)論

    相關(guān)推薦
    熱點(diǎn)推薦

    NVME控制器之隊(duì)列管理模塊

    隊(duì)列管理模塊是整個(gè)NVMe Host控制器的核心模塊,該模塊實(shí)現(xiàn)了提交隊(duì)列與完成隊(duì)列的管理,多隊(duì)列請(qǐng)求的仲裁判決等功能。
    發(fā)表于 05-03 20:19

    NVME控制器之隊(duì)列管理模塊

    隊(duì)列管理模塊是整個(gè)NVMe Host控制器的核心模塊,該模塊實(shí)現(xiàn)了提交隊(duì)列與完成隊(duì)列的管理,多隊(duì)列請(qǐng)求的仲裁判決等功能。
    的頭像 發(fā)表于 05-03 15:32 ?100次閱讀
    NVME控制器之<b class='flag-5'>隊(duì)列</b>管理模塊

    淺談環(huán)形鐵心兼談環(huán)形變壓器

    近年來(lái),在電子市場(chǎng)上,環(huán)形變壓器已廣泛用于家庭影院和多種電子設(shè)備中,而繞制環(huán)形變壓器所用的鐵心即環(huán)形鐵心,可分A、B兩種系列,現(xiàn)介紹如下: 1. A系列環(huán)形鐵心 A系列
    發(fā)表于 04-16 15:04

    OptiSystem應(yīng)用:環(huán)形通量仿真

    環(huán)形通量,顧名思義就是描述了光纖內(nèi)部圓形半徑內(nèi)的通量。環(huán)繞通量通常被量化為從光纖中心開始的半徑,該半徑需要環(huán)繞穿過(guò)光纖的25%到75%的光能。由環(huán)繞通量值描述的光纖的功率分布是確保千兆以太網(wǎng)系統(tǒng)中所
    發(fā)表于 04-09 08:47

    將Yolo V3-Tiny模型轉(zhuǎn)換為IR格式遇到錯(cuò)誤怎么解決?

    將Yolo V3-Tiny 模型轉(zhuǎn)換為 IR 格式。 遇到錯(cuò)誤: Error: Exception occurred during running replacer \"
    發(fā)表于 03-05 09:57

    助力AIoT應(yīng)用:在米爾FPGA開發(fā)板上實(shí)現(xiàn)Tiny YOLO V4

    Only Look Once)是一種實(shí)時(shí)物體檢測(cè)模型,它通過(guò)一次性掃描整個(gè)圖像,實(shí)現(xiàn)高效的對(duì)象識(shí)別。而其簡(jiǎn)化版 Tiny YOLO V4 更適合嵌入式設(shè)備,具有較少的層數(shù)和參數(shù)。其輕量化特性更適合在資源
    發(fā)表于 12-06 17:18

    環(huán)形器的特點(diǎn)和應(yīng)用

    環(huán)形器是一個(gè)有單向傳輸特性的三端口器件,它表明器件從1到2,從2到3 和從3到1是導(dǎo)通的,反過(guò)來(lái)信號(hào)從2到1,從3到2和從1到3是隔離的。環(huán)形器是有數(shù)個(gè)端的非可逆器件。
    的頭像 發(fā)表于 11-29 16:49 ?2278次閱讀
    <b class='flag-5'>環(huán)形</b>器的特點(diǎn)和應(yīng)用

    JavaWeb消息隊(duì)列使用指南

    在現(xiàn)代的JavaWeb應(yīng)用中,消息隊(duì)列(Message Queue)是一種常見的技術(shù),用于異步處理任務(wù)、解耦系統(tǒng)組件、提高系統(tǒng)性能和可靠性。 1. 消息隊(duì)列的基本概念 消息隊(duì)列是一種應(yīng)用程序?qū)?yīng)
    的頭像 發(fā)表于 11-25 09:27 ?408次閱讀

    分享一個(gè)嵌入式通用FIFO環(huán)形緩沖區(qū)實(shí)現(xiàn)庫(kù)

    開源項(xiàng)目ringbuff ,是一款通用FIFO環(huán)形緩沖區(qū)實(shí)現(xiàn)的開源庫(kù),作者M(jìn)aJerle,遵循 MIT 開源許可協(xié)議。
    的頭像 發(fā)表于 10-23 16:20 ?955次閱讀
    分享一個(gè)嵌入式通用FIFO<b class='flag-5'>環(huán)形</b>緩沖區(qū)<b class='flag-5'>實(shí)現(xiàn)</b>庫(kù)

    嵌入式環(huán)形隊(duì)列與消息隊(duì)列實(shí)現(xiàn)原理

    嵌入式環(huán)形隊(duì)列,也稱為環(huán)形緩沖區(qū)或循環(huán)隊(duì)列,是一種先進(jìn)先出(FIFO)的數(shù)據(jù)結(jié)構(gòu),用于在固定大小的存儲(chǔ)區(qū)域中高效地存儲(chǔ)和訪問數(shù)據(jù)。其主要特點(diǎn)包括固定大小的數(shù)組和兩個(gè)指針(頭指針和尾指針
    的頭像 發(fā)表于 09-02 15:29 ?1031次閱讀

    環(huán)形變壓器輸出是直流還是交流

    。 關(guān)于環(huán)形變壓器輸出是直流還是交流的問題,我們需要從變壓器的工作原理和環(huán)形變壓器的特點(diǎn)來(lái)分析。 變壓器的工作原理 變壓器是一種利用電磁感應(yīng)原理實(shí)現(xiàn)電能轉(zhuǎn)換的設(shè)備。它由兩個(gè)或多個(gè)線圈組成,這些線圈繞在一個(gè)或多個(gè)鐵
    的頭像 發(fā)表于 08-21 09:45 ?1400次閱讀

    單片機(jī)中的幾種環(huán)形緩沖區(qū)的分析和實(shí)現(xiàn)

    單片機(jī)中的幾種環(huán)形緩沖區(qū)的分析和實(shí)現(xiàn)一、簡(jiǎn)介環(huán)形緩沖區(qū)(RingBuffer)是一種高效的使用內(nèi)存的方法,它將一段固定長(zhǎng)度的內(nèi)存看成一個(gè)環(huán)形結(jié)構(gòu),用于存儲(chǔ)數(shù)據(jù),能夠避免使用動(dòng)態(tài)申請(qǐng)內(nèi)存
    的頭像 發(fā)表于 08-14 08:39 ?1524次閱讀
    單片機(jī)中的幾種<b class='flag-5'>環(huán)形</b>緩沖區(qū)的分析和<b class='flag-5'>實(shí)現(xiàn)</b>

    玩轉(zhuǎn)RT-Thread之消息隊(duì)列的應(yīng)用

    在嵌入式系統(tǒng)開發(fā)中,實(shí)時(shí)處理串口和ADC數(shù)據(jù)是一項(xiàng)重要的任務(wù)。本文將介紹如何在RT-Thread實(shí)時(shí)操作系統(tǒng)中,利用消息隊(duì)列來(lái)同時(shí)處理來(lái)自串口和ADC的數(shù)據(jù)。通過(guò)這種方法,我們能夠高效地管理和處理
    的頭像 發(fā)表于 07-23 08:11 ?825次閱讀
    玩轉(zhuǎn)RT-Thread之消息<b class='flag-5'>隊(duì)列</b>的應(yīng)用

    基于Tiny AI技術(shù)的玻璃敲碎聲事件離線檢測(cè)方案

    該方案基于RA系列MCU產(chǎn)品(RA4),在R7FA4E10D2CNE硬件上運(yùn)行Aizip Tiny AI玻璃敲碎聲音事件檢測(cè)算法庫(kù),實(shí)現(xiàn)了實(shí)時(shí)檢測(cè)玻璃敲碎聲,并個(gè)性化定制報(bào)警邏輯的功能。
    發(fā)表于 06-20 14:25 ?552次閱讀
    基于<b class='flag-5'>Tiny</b> AI技術(shù)的玻璃敲碎聲事件離線檢測(cè)方案

    TCL中環(huán)備戰(zhàn)收購(gòu)Maxeon,助力能源綠色低碳轉(zhuǎn)型

    此項(xiàng)總金額高達(dá)1.975億美元的交易包括TCL中環(huán)對(duì)Maxeon的控股收購(gòu)以及其納入合并報(bào)表范圍的過(guò)程。完成交易后,TCL中環(huán)對(duì)Maxeon的持股比例將大幅提升,達(dá)到至少50.1%。
    的頭像 發(fā)表于 05-31 15:33 ?1364次閱讀