chinese直男口爆体育生外卖, 99久久er热在这里只有精品99, 又色又爽又黄18禁美女裸身无遮挡, gogogo高清免费观看日本电视,私密按摩师高清版在线,人妻视频毛茸茸,91论坛 兴趣闲谈,欧美 亚洲 精品 8区,国产精品久久久久精品免费

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

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

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

基于環(huán)形隊(duì)列的UART收發(fā)回顯實(shí)驗(yàn)

瑞薩嵌入式小百科 ? 來源:瑞薩嵌入式小百科 ? 2025-10-27 13:51 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

18.7

實(shí)驗(yàn)3:基于環(huán)形隊(duì)列的UART收發(fā)回顯

在實(shí)際項(xiàng)目開發(fā)中,由于有些串口不具備FIFO(如SCI1和SCI2)或FIFO的buffer比較小,這可能會(huì)在數(shù)據(jù)處理速度小于數(shù)據(jù)接收速度的時(shí)候,導(dǎo)致數(shù)據(jù)的丟失。因此我們可以設(shè)計(jì)一個(gè)隊(duì)列來避免這一問題。在本實(shí)驗(yàn)中,我們使用環(huán)形隊(duì)列來實(shí)現(xiàn)實(shí)驗(yàn)1的串口收發(fā)回顯,將串口接收到的數(shù)據(jù)暫存在隊(duì)列中,待完成一次接收后再將隊(duì)列中的數(shù)據(jù)全部發(fā)出去。

隊(duì)列是一種特殊的線性表,只允許在隊(duì)列頭(head)刪除元素,在隊(duì)列尾(tail)添加元素。當(dāng)隊(duì)列添加一個(gè)元素,隊(duì)列尾向后移動(dòng),當(dāng)隊(duì)列刪除一個(gè)元素,同樣,刪除一個(gè)元素,隊(duì)列頭向后移動(dòng),如圖19_18。

a5979420-b2eb-11f0-8c8f-92fbcf53809c.png

圖19-18 隊(duì)列圖示

由于存儲(chǔ)空間是有限的,如果使用線性隊(duì)列,刪除元素后就會(huì)空出一段存儲(chǔ)空間,這會(huì)造成很大的浪費(fèi)。因此實(shí)際上我們更多使用環(huán)形隊(duì)列。并不是說這段存儲(chǔ)空間是環(huán)形的,而是頭指針和尾指針到達(dá)存儲(chǔ)空間末尾后會(huì)回到存儲(chǔ)空間起點(diǎn)。因此在邏輯上這是循環(huán)的,如圖19_19。

a5f75432-b2eb-11f0-8c8f-92fbcf53809c.png

圖19-19 環(huán)形隊(duì)列

18.7.1

硬件設(shè)計(jì)

本實(shí)驗(yàn)使用到開發(fā)板的串口和LED燈,其原理圖在本章實(shí)驗(yàn)1和前面的點(diǎn)亮LED燈章節(jié)有介紹,這里不進(jìn)行贅述。

18.7.2

軟件設(shè)計(jì)

18.7.2.1

新建工程

因?yàn)楸竟?jié)的UART實(shí)驗(yàn)例程與上一個(gè)實(shí)驗(yàn)例程的FSP配置以及UART相關(guān)的一些代碼基本一致,因此我們可以直接以前面的“19_UART_Receive_Send”工程為基礎(chǔ)進(jìn)行修改。

對(duì)于e2studio開發(fā)環(huán)境:拷貝一份我們之前的e2s工程模板“19_UART_Receive_Send”,然后將工程文件夾重命名為“19_UART_Circular_Queue”,最后再將它導(dǎo)入到我們的e2studio工作空間中。

對(duì)于Keil開發(fā)環(huán)境:拷貝一份我們之前的Keil工程模板“19_UART_Receive_Send”,然后將工程文件夾重命名為“19_UART_Circular_Queue”,并進(jìn)入該文件夾里面雙擊Keil工程文件,打開該工程。

FSP配置完全一致,因此我們省略掉這部分。

18.7.2.2

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

列表8:代碼清單19-7:環(huán)形隊(duì)列頭文件內(nèi)容

左右滑動(dòng)查看完整內(nèi)容

#defineDATA_LEN300//隊(duì)列緩存大小
typedefstruct
{
uint16_thead;//頭指針
uint16_ttail;//尾指針
uint8_tdata[DATA_LEN];//隊(duì)列數(shù)據(jù)
}Circular_queue_t;
externCircular_queue_tCircular_queue;//環(huán)形隊(duì)列全局變量
boolQueue_Init(Circular_queue_t*circular_queue);//初始化隊(duì)列
boolQueue_isEmpty(Circular_queue_t*circular_queue);//判斷隊(duì)列是否為空
boolQueue_isFull(Circular_queue_t*circular_queue);//判斷隊(duì)列是否已滿
boolQueue_Wirte(Circular_queue_t*circular_queue,uint8_t*string, uint16_
→t len);//寫數(shù)據(jù)
boolQueue_Read(Circular_queue_t*circular_queue,uint8_t*string,uint16_t?
→len);//讀數(shù)據(jù)
uint16_tQueue_HadUse(Circular_queue_t *circular_queue);//返回隊(duì)列中數(shù)據(jù)的長(zhǎng)度
uint16_tQueue_NoUse(Circular_queue_t*circular_queue);//返回未使用數(shù)據(jù)的長(zhǎng)度

環(huán)形隊(duì)列相關(guān)函數(shù)的具體定義可以在例程的circular_queue.c中查看,這里就不贅述了。

18.7.2.3

串口中斷回調(diào)函數(shù)

debug_uart4_callback串口中斷回調(diào)函數(shù)的內(nèi)容修改成如下所示。

列表9:代碼清單19-8:串口中斷回調(diào)函數(shù)

左右滑動(dòng)查看完整內(nèi)容

/*串口中斷回調(diào)*/
voiddebug_uart4_callback(uart_callback_args_t* p_args)
{
switch(p_args->event)
{
caseUART_EVENT_RX_CHAR:
{
/*接收到數(shù)據(jù)后馬上寫入隊(duì)列中*/
Queue_Wirte(&Circular_queue,(uint8_t*) &p_args->data,1);
break;
}
caseUART_EVENT_TX_COMPLETE:
{
uart_send_complete_flag=true;
break;
}
default:
break;
}
}

18.7.2.4

hal_entry入口函數(shù)

hal_entry入口函數(shù)的內(nèi)容修改成如下所示。

列表10:代碼清單19-9:hal_entry入口函數(shù)

左右滑動(dòng)查看完整內(nèi)容

voidhal_entry(void)
{
/*TODO:add your own code here */
uint8_tRead_Buffer[DATA_LEN];
uint16_tRead_Length;
LED_Init();
// LED 初始化
Debug_UART4_Init();// SCI4 UART 調(diào)試串口初始化
Queue_Init((Circular_queue_t*)&Circular_queue);//環(huán)形隊(duì)列初始化
printf("這是一個(gè)串口環(huán)形隊(duì)列例程
");
printf("打開串口助手發(fā)送數(shù)據(jù) 5 個(gè)及以上的數(shù)據(jù),接收窗口會(huì)打印所發(fā)送的數(shù)據(jù)
");
while(1)
{
if(Queue_isEmpty(&Circular_queue) ==false)//判斷隊(duì)列中的數(shù)據(jù)不為空
{
Read_Length =Queue_HadUse(&Circular_queue);
if( Read_Length >=5)
// 如果隊(duì)列中的數(shù)據(jù)大于等于 5 個(gè),開始打印
隊(duì)列中的所有數(shù)據(jù)
{
printf("Read_Length=%d: ", Read_Length);
memset(Read_Buffer,0, DATA_LEN);
/* 讀出 Read_Length 個(gè)數(shù)據(jù) */
Queue_Read(&Circular_queue, Read_Buffer, Read_Length);
printf("%s
", Read_Buffer);
 }
}
R_BSP_SoftwareDelay(1, BSP_DELAY_UNITS_MILLISECONDS);
}
#ifBSP_TZ_SECURE_BUILD
/* Enter non-secure code */
R_BSP_NonSecureEnter();
#endif
}

18.7.3

下載驗(yàn)證

保證開發(fā)板相關(guān)硬件連接正確,用Type-CUSB線連接開發(fā)板“USBTOUART”接口電腦。本次實(shí)驗(yàn)需要使用到串口調(diào)試助手,配置好串口參數(shù)并打開串口后,在調(diào)試助手的發(fā)送區(qū)域輸入超過5個(gè)的任意字符并點(diǎn)擊發(fā)送,即可在接收區(qū)看見返回字符,不一定馬上全部返回全部的已發(fā)送的字符,可以多發(fā)送幾次數(shù)據(jù)觀察,數(shù)據(jù)并沒有丟失。

聲明:本文內(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)投訴
  • led燈
    +關(guān)注

    關(guān)注

    22

    文章

    1603

    瀏覽量

    110829
  • fifo
    +關(guān)注

    關(guān)注

    3

    文章

    403

    瀏覽量

    45377
  • 串口
    +關(guān)注

    關(guān)注

    15

    文章

    1602

    瀏覽量

    81586
  • uart
    +關(guān)注

    關(guān)注

    22

    文章

    1292

    瀏覽量

    105832

原文標(biāo)題:實(shí)驗(yàn)3:基于環(huán)形隊(duì)列的UART收發(fā)回顯——瑞薩RA系列FSP庫開發(fā)實(shí)戰(zhàn)指南(49)

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

收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評(píng)論

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

    UART波特率計(jì)算及UART收發(fā)回實(shí)驗(yàn)

    決定串口波特率的寄存器有BRR(Bite Rate Rigister),SEMR(Serial Extended Mode Rigister)和MDDR(Modulation Duty Register)。波特率與寄存器的值的公式如圖19_8 所示。N表示BRR寄存器的值,B是波特率,PCLK 是外設(shè)時(shí)鐘的頻率(單位:MHz)。BGDM(Baud Rate Generator Double-Speed Mode Select)在RA6M5中,SCI掛載在PHBIU(Peripheral High Speed Bus Interface Unit)總線上,使用時(shí)鐘PCLKA,該時(shí)鐘默認(rèn)頻率為100MHz。
    的頭像 發(fā)表于 10-17 09:51 ?1963次閱讀
    <b class='flag-5'>UART</b>波特率計(jì)算及<b class='flag-5'>UART</b><b class='flag-5'>收發(fā)回</b><b class='flag-5'>顯</b><b class='flag-5'>實(shí)驗(yàn)</b>

    基于STM32的串口環(huán)形隊(duì)列IAP調(diào)試

    基于STM32的串口環(huán)形隊(duì)列IAP調(diào)試心得
    的頭像 發(fā)表于 09-18 15:33 ?2302次閱讀
    基于STM32的串口<b class='flag-5'>環(huán)形</b><b class='flag-5'>隊(duì)列</b>IAP調(diào)試

    環(huán)形隊(duì)列在串口數(shù)據(jù)接收中的使用

    前言??書接上回,前文主要介紹了環(huán)形隊(duì)列的實(shí)現(xiàn)原理以及C語言實(shí)現(xiàn)及測(cè)試過程,本文將回歸到嵌入式平臺(tái)的應(yīng)用中,話不多說,淦,上干貨!實(shí)驗(yàn)目的HAL庫下串口的配置及使用環(huán)形
    發(fā)表于 12-06 06:27

    如何使用隊(duì)列實(shí)現(xiàn)STM32串口環(huán)形緩沖?

    串口環(huán)形緩沖的好處是什么?如何使用隊(duì)列實(shí)現(xiàn)STM32串口環(huán)形緩沖?
    發(fā)表于 12-07 07:13

    如何將DMA和環(huán)形的FIFO隊(duì)列結(jié)合在一起來使用呢

    如何將DMA和環(huán)形的FIFO隊(duì)列結(jié)合在一起來使用呢?有哪些實(shí)驗(yàn)步驟呢?
    發(fā)表于 12-09 08:05

    實(shí)現(xiàn)隊(duì)列環(huán)形緩沖的方法

    串口隊(duì)列環(huán)形緩沖區(qū)隊(duì)列串口環(huán)形緩沖的好處代碼實(shí)現(xiàn)隊(duì)列??要實(shí)現(xiàn)隊(duì)列
    發(fā)表于 02-21 07:11

    環(huán)形隊(duì)列的相關(guān)資料分享

    前言??當(dāng)代碼,不再是簡(jiǎn)單的完成需求,對(duì)代碼進(jìn)行堆砌,而是開始思考如何寫出優(yōu)美代碼的時(shí)候,我們的代碼水平必然會(huì)不斷提升,今天,咱們來學(xué)習(xí)環(huán)形隊(duì)列結(jié)構(gòu)。環(huán)形隊(duì)列的基本概念??相信對(duì)數(shù)據(jù)結(jié)
    發(fā)表于 02-23 06:10

    環(huán)形隊(duì)列的操作如何去實(shí)現(xiàn)呢

    環(huán)形隊(duì)列結(jié)構(gòu)的定義是什么?環(huán)形隊(duì)列的操作如何去實(shí)現(xiàn)呢?
    發(fā)表于 02-25 06:35

    深度解析數(shù)據(jù)結(jié)構(gòu)與算法篇之隊(duì)列環(huán)形隊(duì)列的實(shí)現(xiàn)

    的位置。 02 — 環(huán)形隊(duì)列的實(shí)現(xiàn) 要想將元素放入隊(duì)列我們必須知道對(duì)頭和隊(duì)尾,在隊(duì)列長(zhǎng)度不能無限大的條件下我們還要知道隊(duì)列的最大容量,我們還
    的頭像 發(fā)表于 06-18 10:07 ?2337次閱讀

    【STM32+cubemx】0005 HAL庫開發(fā):uart串口中斷和fifo環(huán)形隊(duì)列

    上一節(jié)我們學(xué)習(xí)了串口的輪詢收發(fā),以及HAL庫自帶的中斷收發(fā)。也分析了優(yōu)缺點(diǎn),這一節(jié)我們來講講如何改寫HAL庫函數(shù),使它能更高效地收發(fā)數(shù)據(jù),更方便地使用。早些年在使用51單片機(jī)、AVR單片機(jī)的時(shí)候
    發(fā)表于 11-15 20:36 ?39次下載
    【STM32+cubemx】0005 HAL庫開發(fā):<b class='flag-5'>uart</b>串口中斷和fifo<b class='flag-5'>環(huán)形</b><b class='flag-5'>隊(duì)列</b>

    基于STM32的串口環(huán)形隊(duì)列IAP調(diào)試心得

    使用環(huán)形隊(duì)列,簡(jiǎn)單點(diǎn)說就是個(gè)環(huán)形數(shù)組,一邊接收上位機(jī)數(shù)據(jù),一邊往flash里面寫。
    發(fā)表于 02-08 15:22 ?5次下載
    基于STM32的串口<b class='flag-5'>環(huán)形</b><b class='flag-5'>隊(duì)列</b>IAP調(diào)試心得

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

    嵌入式環(huán)形隊(duì)列和消息隊(duì)列是實(shí)現(xiàn)數(shù)據(jù)緩存和通信的常見數(shù)據(jù)結(jié)構(gòu),廣泛應(yīng)用于嵌入式系統(tǒng)中的通信協(xié)議和領(lǐng)域。
    的頭像 發(fā)表于 04-14 11:52 ?2243次閱讀

    嵌入式環(huán)形隊(duì)列和消息隊(duì)列是如何去實(shí)現(xiàn)的?

    嵌入式環(huán)形隊(duì)列和消息隊(duì)列是實(shí)現(xiàn)數(shù)據(jù)緩存和通信的常見數(shù)據(jù)結(jié)構(gòu),廣泛應(yīng)用于嵌入式系統(tǒng)中的通信協(xié)議和領(lǐng)域。
    發(fā)表于 05-20 14:55 ?1539次閱讀

    裸機(jī)中環(huán)形隊(duì)列與RTOS中消息隊(duì)列有何區(qū)別呢?

    環(huán)形隊(duì)列”和“消息隊(duì)列”在嵌入式領(lǐng)域有應(yīng)用非常廣泛,相信有經(jīng)驗(yàn)的嵌入式軟件工程師對(duì)它們都不陌生。
    的頭像 發(fā)表于 01-26 09:38 ?1238次閱讀
    裸機(jī)中<b class='flag-5'>環(huán)形</b><b class='flag-5'>隊(duì)列</b>與RTOS中消息<b class='flag-5'>隊(duì)列</b>有何區(qū)別呢?

    嵌入式環(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 ?1582次閱讀