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

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

嵌入式軟件工程師在日常開發過程中的關鍵組件

Linux閱碼場 ? 來源:小麥大叔 ? 作者:菜刀和小麥 ? 2021-09-24 10:47 ? 次閱讀

大家好,周末快樂,我是小麥,今天分享一下CBUF。

循環緩沖區是嵌入式軟件工程師在日常開發過程中的關鍵組件。

多年來,互聯網上出現了許多不同的循環緩沖區實現和示例。我非常喜歡這個模塊,可以GitHub上找到這個開源的 CBUF.h 模塊。

地址:https://github.com/barraq/BRBrain/blob/master/firmware/CBUF.h

CBUF.h 模塊使用宏實現循環緩沖區,具體源碼如下所示;

#if !defined( CBUF_H )#define CBUF_H /**《 Include Guard *//* ---- Include Files ---------------------------------------------------- *//* ---- Constants and Types ---------------------------------------------- *//**

* Initializes the circular buffer for use.

*/

#define CBUF_Init( cbuf ) cbuf.m_getIdx = cbuf.m_putIdx = 0/**

* Returns the number of elements which are currently contained in the

* circular buffer.

*/#define CBUF_Len( cbuf ) ((typeof( cbuf.m_putIdx ))(( cbuf.m_putIdx ) - ( cbuf.m_getIdx )))/**

* Appends an element to the end of the circular buffer

*/#define CBUF_Push( cbuf, elem ) (cbuf.m_entry)[ cbuf.m_putIdx++ & (( cbuf##_SIZE ) - 1 )] = (elem)/**

* Retrieves an element from the beginning of the circular buffer

*/#define CBUF_Pop( cbuf ) (cbuf.m_entry)[ cbuf.m_getIdx++ & (( cbuf##_SIZE ) - 1 )]/**

* Retrieves the i‘th element from the beginning of the circular buffer

*/#define CBUF_Get( cbuf, idx ) (cbuf.m_entry)[( cbuf.m_getIdx + idx ) & (( cbuf##_SIZE ) - 1 )]/**

* Retrieves the i’th element from the end of the circular buffer

*/#define CBUF_GetEnd( cbuf, idx ) (cbuf.m_entry)[( cbuf.m_putIdx - idx - 1 ) & (( cbuf##_SIZE ) - 1 )]/**

* Determines if the circular buffer is empty

*/#define CBUF_IsEmpty( cbuf ) ( CBUF_Len( cbuf ) == 0 )/**

* Determines if the circular buffer is full.

*/#define CBUF_IsFull( cbuf ) ( CBUF_Len( cbuf ) == ( cbuf##_SIZE ))/**

* Determines if the circular buffer is currenly overflowed or underflowed.

*/#define CBUF_Error( cbuf ) ( CBUF_Len( cbuf ) 》 cbuf##_SIZE )#if defined( __cplusplus )template 《 class IndexType, unsigned Size, class EntryType 》

class CBUF

{public:

CBUF()

{

m_getIdx = m_putIdx = 0;

}

IndexType Len() const { return m_putIdx - m_getIdx; }

bool IsEmpty() const { return Len() == 0; }

bool IsFull() const { return Len() == Size; }

bool Error() const { return Len() 》 Size; }

void Push( EntryType val )

{

m_entry[ m_putIdx++ & ( Size - 1 )] = val;

}

EntryType Pop()

{

return m_entry[ m_getIdx++ & ( Size - 1 )];

}

private:

volatile IndexType m_getIdx;

volatile IndexType m_putIdx;

EntryType m_entry[ Size ];

};

#endif // __cplusplus/* ---- Variable Externs ------------------------------------------------- *//* ---- Function Prototypes ---------------------------------------------- *//** @} */#endif // CBUF_H

現在一般我不喜歡以這種方式使用宏,但實現已被證明是快速、高效且工作相對良好的,這是很難爭論的。

循環緩沖區的設置非常簡單。首先,需要定義循環緩沖區的大小。這是通過定義宏 myQ_SIZE 來完成的,同時記住緩沖區大小需要是 2 的冪。

然后通過創建一個 myQ 類型的變量來聲明循環緩沖區。例如,如果 myQ_SIZE 定義為 64 字節,則可以定義 UART 的發送和接收緩沖區,如下面的圖 1 所示。

994a0046-11e5-11ec-8fb8-12bb97331649.png

圖 1 – 定義循環緩沖區

在此示例中,myQ 被定義為靜態以限制緩沖區的范圍并聲明為易失性,因為它們在中斷內被修改。定義循環緩沖區只是第一步。為了分配緩沖區,必須將這些變量傳遞給 CBUF_INIT 宏,如下圖 2 所示。

99790ca6-11e5-11ec-8fb8-12bb97331649.png圖 2 – 緩沖區初始化

除了這個初始設置之外,緩沖區相當簡單且易于使用。例如,可以使用 CBUF_PUSH 將通過串行接口接收 UART接收的字符推送到循環緩沖區,如圖 3 所示。

99a3eb4c-11e5-11ec-8fb8-12bb97331649.png

圖 3 – 推入緩沖區

開發人員不僅希望將數據推送到循環緩沖區上,還希望從緩沖區彈出或獲取數據。看到這一點的一個簡單示例是需要獲取字符并通過 UART 傳輸的串行發送器。圖 4 中可以看到一個示例傳輸函數。

99bd6ee6-11e5-11ec-8fb8-12bb97331649.png

圖 4 – 從緩沖區彈出數據

在健壯的應用程序中,還應檢查循環緩沖區長度和溢出狀態。CBUF 模塊確實提供了能夠檢查這些重要指標的宏。

要記住的一個重要問題是,如果需要對 CBUF 本身進行任何調試,這是不可能的。無法為宏設置斷點,因此如果出現問題,則需要對模塊進行功能化以逐步執行和調試。

多年來使用這個模塊雖然我沒有發現任何問題。循環緩沖區是在嵌入式系統中與串行設備通信的一個重要方面。

循環緩沖區也很好理解,應該創建它們以便它們可以模塊化并從一個應用程序到下一個應用程序重復使用。

到目前為止,CBUF 模塊已被證明是這樣一個模塊,所以在這里,我強烈推薦一下這個模塊。好了,今天的文章就到這里,我們下期再見。

責任編輯:haq

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 模塊
    +關注

    關注

    7

    文章

    2783

    瀏覽量

    49622
  • 嵌入式
    +關注

    關注

    5141

    文章

    19537

    瀏覽量

    315136

原文標題:優雅地用宏實現環形緩沖區

文章出處:【微信號:LinuxDev,微信公眾號:Linux閱碼場】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏

    評論

    相關推薦
    熱點推薦

    如何成為一名嵌入式軟件工程師

    、Java等)和軟件開發工具,還需要對硬件的工作原理有深入的理解。 團隊嵌入式軟件工程師往往扮演著核心角色,他們的工作直接關系到產品的
    發表于 04-15 14:37

    嵌入式系統開發圣經【干貨】

    內容包括:嵌入式系統的介紹、嵌入式SoC硬件系統概論、嵌入式系統軟件開發。適用于產品主管、系統設計分析人員及欲進入該領域的工程師。本資料詳細
    發表于 03-12 13:58

    嵌入式軟件工程師就業好不好?

    ,市場需求大,所以其薪資待遇普遍較高。一般來說,北京、上海、深圳等發達地區,嵌入式軟件工程師的薪資水平會更高。并且,隨著技術水平的提高和經驗的積累,薪資待遇還會不斷提升。 行業發展潛力巨大 從長遠來看
    發表于 02-20 10:19

    如何成為嵌入式開發工程師

    如何成為嵌入式開發工程師? 成為嵌入式開發工程師通常需要掌握一系列技能和知識,并且在實踐不斷積累經驗。以下是一些基本步驟和建議: 1. 基
    發表于 02-19 10:39

    月薪 3 萬的嵌入式工程師都在用,串口屏到底神在哪?

    作為一名資深的嵌入式工程師,我深知選擇硬件組件時,性能、可靠性、易用性和成本效益都是至關重要的考量因素。月薪3萬的嵌入式
    的頭像 發表于 02-12 10:33 ?584次閱讀
    月薪 3 萬的<b class='flag-5'>嵌入式</b><b class='flag-5'>工程師</b>都在用,串口屏到底神在哪?

    一個優秀的嵌入式軟件“架構” — AWFlow

    大型項目的軟件開發過程中,模塊化開發面臨著接口設計不合理、代碼沖突以及模塊間不兼容等問題,導致團隊協作效率低下。為了解決這些問題,嵌入式軟件
    的頭像 發表于 02-10 16:44 ?475次閱讀
    一個優秀的<b class='flag-5'>嵌入式</b><b class='flag-5'>軟件</b>“架構<b class='flag-5'>師</b>” — AWFlow

    如何在日常開發過程中提高代碼質量

    。 提高代碼質量是一個系統工程,本文主要介紹開發人員如何在日常開發過程中提高代碼質量。 01 什么是代碼質量? 代碼質量一般用于衡量代碼的“好”和“爛”:“好”代碼表示代碼質量高,“爛”代碼表示代碼質量低。雖然目前
    的頭像 發表于 01-23 09:09 ?452次閱讀
    如何在<b class='flag-5'>日常開發過程中</b>提高代碼質量

    年薪30萬的嵌入式工程師,究竟需要掌握哪些技能?

    隨著智能硬件、物聯網、智能汽車、自動化控制等領域的迅速發展,嵌入式工程師的需求也水漲船高。尤其是全球化和技術加速的時代,嵌入式開發不僅是一個熱門行業,還是跨學科技術與創新的交匯點。對
    的頭像 發表于 01-16 10:59 ?1086次閱讀
    年薪30萬的<b class='flag-5'>嵌入式</b><b class='flag-5'>工程師</b>,究竟需要掌握哪些技能?

    為什么嵌入式驅動開發工程師可以拿高薪?

    。 為什么嵌入式驅動開發工程師可以拿高薪? 嵌入式驅動開發工程師屬于技術密集型工作,不僅需要
    發表于 01-07 16:56

    嵌入式工程師常用的開發工具有哪些?

    仿真器可以模擬復雜的微控制器和外設,幫助工程師早期階段進行軟件開發和調試。這大大縮短了開發周期,降低了開發成本。 總之,
    發表于 12-20 15:29

    AM6254開發常見問題之「燒寫問題排查」——飛凌嵌入式

    項目的開發過程中,各位工程師小伙伴們可能會遇到各種類型的問題,其中“燒寫問題”就是非常典型的一種。本篇文章,將以飛凌嵌入式OK6254-C開發
    的頭像 發表于 11-08 11:51 ?1470次閱讀
    AM6254<b class='flag-5'>開發</b>常見問題之「燒寫問題排查」——飛凌<b class='flag-5'>嵌入式</b>

    名單公布!【書籍評測活動NO.42】 嵌入式Hypervisor:架構、原理與應用

    ,以及PRTOS社區的愿景等內容。 作者簡介 孫陳偉 某大廠資深編譯器團隊編譯器開發工程師,曾任華為技術軟件公司高級軟件工程師,梅特勒-托利多儀器儀表(中國)有限公司
    發表于 08-23 15:17

    嵌入式軟件開發招聘

    本帖最后由 jf_19082533 于 2024-7-26 13:56 編輯 尋求:嵌入式軟件工程師 要求:3年以上開發經驗,音視頻領域應用層開發 地址:北京市昌平區 郵箱:10
    發表于 07-26 13:44

    嵌入式硬件VS軟件,到底哪個更難?

    :挑戰與精密嵌入式硬件開發涉及到電路設計、電子元器件選型、PCB設計等諸多方面。在這個過程中工程師需要具備扎實的電子知識和豐富的實踐經驗。硬件開發
    的頭像 發表于 06-13 08:10 ?1716次閱讀
    <b class='flag-5'>嵌入式</b>硬件VS<b class='flag-5'>軟件</b>,到底哪個更難?

    嵌入式軟件工程師如何提升自己?

    的發展打下堅實的基礎。 2.掌握專業技能 除了基礎知識外,嵌入式軟件工程師還需要掌握專業的技能。這包括熟練掌握嵌入式系統的開發工具、硬件平臺和軟件開
    發表于 06-12 11:20