中文字幕 另类精品,亚洲欧美一区二区蜜桃,日本在线精品视频免费,孩交精品乱子片免费

<sup id="3hn2b"></sup>

    1. <sub id="3hn2b"><ol id="3hn2b"></ol></sub><legend id="3hn2b"></legend>

      1. <xmp id="3hn2b"></xmp>

      2. "); //-->

        博客專欄

        EEPW首頁 > 博客 > 推薦一個(gè)輕量級的嵌入式系統(tǒng)框架

        推薦一個(gè)輕量級的嵌入式系統(tǒng)框架

        發(fā)布人:xiaomaidashu 時(shí)間:2023-09-21 來源:工程師 發(fā)布文章
        mr-library簡介

        mr-library 是一個(gè)面向嵌入式系統(tǒng)的輕量級框架,提供統(tǒng)一的底層驅(qū)動設(shè)備模型以及基礎(chǔ)服務(wù)功能,具有模塊化設(shè)計(jì)、可配置性和擴(kuò)展性的特點(diǎn), 可幫助開發(fā)者快速構(gòu)建嵌入式應(yīng)用程序。

        mr-library 框架支持互斥鎖、對象管理等基礎(chǔ)內(nèi)核功能。集成異步事件驅(qū)動框架(event)、多時(shí)基軟件定時(shí)器(soft-timer) 等服務(wù)。提供串口、SPI、I2C、ADC/DAC等常見外設(shè)的驅(qū)動設(shè)備模型,通過統(tǒng)一的驅(qū)動接口(open、close、ioctl、read、write)訪問底層硬件設(shè)備,解耦底層驅(qū)動和應(yīng)用。

        應(yīng)用場景
        • MCU開發(fā)的低層驅(qū)動程序。
        • RTOS實(shí)時(shí)操作系統(tǒng)的外掛框架(作為驅(qū)動設(shè)備框架使用)。
        • 各類IoT和智能硬件產(chǎn)品的快速開發(fā)。

        驅(qū)動設(shè)備框架

        開發(fā)者能以面向?qū)ο蟮姆绞皆L問外設(shè),簡化驅(qū)動邏輯的開發(fā)流程。框架實(shí)現(xiàn)了常用外設(shè)的通用驅(qū)動模板,開發(fā)者可以快速移植到不同的硬件平臺。

        驅(qū)動設(shè)備框架支持普通設(shè)備的通用接口、總線設(shè)備自動總線控制、多種設(shè)備的中斷接管。

        驅(qū)動設(shè)備接口

        設(shè)備驅(qū)動框架提供統(tǒng)一的操作接口,設(shè)備的所有操作都需要通過以下接口實(shí)現(xiàn):

        接口描述
        mr_device_add添加設(shè)備
        mr_device_find查找設(shè)備
        mr_device_open打開設(shè)備
        mr_device_close關(guān)閉設(shè)備
        mr_device_ioctl控制設(shè)備
        mr_device_read從設(shè)備讀取數(shù)據(jù)
        mr_device_write向設(shè)備寫入數(shù)據(jù)
        SPI設(shè)備使用示例:
        /* 定義SPI設(shè)備 */
        #define SPI_DEVICE0_CS_PIN              10
        #define SPI_DEVICE1_CS_PIN              20
        struct mr_spi_device spi_device0, spi_device1;
        /* 添加SPI設(shè)備 */
        mr_spi_device_add(&spi_device0, "spi10", SPI_DEVICE0_CS_PIN);
        mr_spi_device_add(&spi_device1, "spi11", SPI_DEVICE1_CS_PIN);
        /* 查找SPI設(shè)備 */
        mr_device_t spi0_device = mr_device_find("spi10");
        mr_device_t spi1_device = mr_device_find("spi11");
        /* 掛載總線 */
        mr_device_ioctl(spi0_device, MR_CTRL_ATTACH, "spi1");
        mr_device_ioctl(spi1_device, MR_CTRL_ATTACH, "spi1");
        /* 以可讀可寫的方式打開SPI設(shè)備 */
        mr_device_open(spi0_device, MR_OPEN_RDWR);
        mr_device_open(spi1_device, MR_OPEN_RDWR);
        /* 發(fā)送數(shù)據(jù) */
        char buffer0[] = "hello";
        char buffer1[] = "world";
        mr_device_write(spi0_device, 0, buffer0, sizeof(buffer0) - 1);
        mr_device_write(spi1_device, 0, buffer1, sizeof(buffer1) - 1);
        /* 讀取數(shù)據(jù) */
        mr_device_read(spi0_device, 0, buffer0, sizeof(buffer0) - 1);
        mr_device_read(spi1_device, 0, buffer1, sizeof(buffer1) - 1);
        /* 關(guān)閉設(shè)備 */
        mr_device_close(spi0_device);
        mr_device_close(spi1_device);

        服務(wù)框架

        mr-library 框架集成了輕量級的服務(wù)框架,用于構(gòu)建嵌入式開發(fā)中的應(yīng)用服務(wù),支持異步事件監(jiān)聽,多時(shí)基軟件定時(shí)器等。通過服務(wù)框架完成對應(yīng)用層不同應(yīng)用間的解耦,實(shí)現(xiàn)應(yīng)用程序的模塊化,可裁剪,業(yè)務(wù)邏輯清晰,開發(fā)快速,代碼高度復(fù)用。

        事件服務(wù)

        事件服務(wù)是一種異步事件處理機(jī)制,它通過事件分發(fā)和回調(diào)的方式,可以有效地提高系統(tǒng)的異步處理能力、解耦性和可擴(kuò)展性。

        事件服務(wù)包含兩個(gè)部分:事件服務(wù)器和事件。

        • 事件服務(wù)器用于接收和分發(fā)事件,其內(nèi)部維護(hù)一個(gè)事件隊(duì)列用于存儲待處理事件和一個(gè)事件列表用于存儲已創(chuàng)建事件。
        • 事件需要?jiǎng)?chuàng)建到事件服務(wù)器并提供一個(gè)回調(diào)函數(shù)。

        當(dāng)事件發(fā)生時(shí),事件服務(wù)器會將事件插入到事件隊(duì)列中進(jìn)行緩存。事件服務(wù)器會周期性地從事件隊(duì)列中取出事件進(jìn)行分發(fā),找到對應(yīng)的事件回調(diào)進(jìn)行事件處理。

        事件服務(wù)操作接口接口描述
        mr_event_server_find查找事件服務(wù)器
        mr_event_server_add添加事件服務(wù)器
        mr_event_server_remove移除事件服務(wù)器
        mr_event_server_handle事件服務(wù)器處理
        mr_event_create創(chuàng)建事件
        mr_event_delete移除事件
        mr_event_notify通知事件發(fā)生
        mr_event_trigger觸發(fā)事件
        事件服務(wù)使用示例:
        /* 定義事件 */
        #define EVENT1                          1
        #define EVENT2                          2
        #define EVENT3                          3
        /* 定義事件服務(wù)器 */
        struct mr_event_server event_server;
        mr_err_t event1_cb(mr_event_server_t server, void *args){
            printf("event1_cbrn");
            
            /* 通知事件服務(wù)器事件2發(fā)生 */
            mr_event_notify(EVENT2, server);
            return MR_ERR_OK;
        }
        mr_err_t event2_cb(mr_event_server_t server, void *args){
            printf("event2_cbrn");
            /* 通知事件服務(wù)器事件3發(fā)生 */
            mr_event_notify(EVENT3, server)
            return MR_ERR_OK;
        }
        mr_err_t event3_cb(mr_event_server_t server, void *args){
            printf("event3_cbrn");
            return MR_ERR_OK;
        }
        int main(void){
            /* 添加事件服務(wù)器到內(nèi)核容器 */
            mr_event_server_add(&event_server, "server", 4);
            
            /* 創(chuàng)建事件到服務(wù)器 */
            mr_event_create(EVENT1, event1_cb, MR_NULL, &event_server);
            mr_event_create(EVENT2, event2_cb, MR_NULL, &event_server);
            mr_event_create(EVENT3, event3_cb, MR_NULL, &event_server);
            
            /* 通知事件服務(wù)器事件1發(fā)生 */
            mr_event_notify(EVENT1, &event_server);
            
            while (1)
            {
                /* 事件服務(wù)器處理 */
                mr_event_server_handle(&event_server);
            }
        }

        現(xiàn)象:

        event1_cb
        event2_cb
        event3_cb
        軟件定時(shí)器服務(wù)

        軟件定時(shí)器是一種在軟件層面實(shí)現(xiàn)計(jì)時(shí)功能的機(jī)制,通過軟件定時(shí)器,可以在特定時(shí)間點(diǎn)或時(shí)間間隔觸發(fā)特定的事件。軟件定時(shí)器常用于實(shí)現(xiàn)周期性任務(wù)、超時(shí)處理、定時(shí)器中斷等功能。

        軟件定時(shí)器包含兩個(gè)主要組件:定時(shí)服務(wù)器和定時(shí)器。

        • 定時(shí)服務(wù)器用于時(shí)間管理和定時(shí)器處理。
        • 定時(shí)器用于處理特定的超時(shí)處理,它需要注冊到定時(shí)服務(wù)器并提供一個(gè)回調(diào)函數(shù)。
        軟件定時(shí)器服務(wù)操作接口接口描述
        mr_soft_timer_server_find查找定時(shí)服務(wù)器
        mr_soft_timer_server_add添加定時(shí)服務(wù)器
        mr_soft_timer_server_remove移除定時(shí)服務(wù)器
        mr_soft_timer_server_update定時(shí)服務(wù)器時(shí)基信號更新
        mr_soft_timer_server_handle定時(shí)服務(wù)器處理
        mr_soft_timer_add添加定時(shí)器
        mr_soft_timer_remove移除定時(shí)器
        mr_soft_timer_start啟動定時(shí)器
        mr_soft_timer_stop暫停定時(shí)器
        mr_soft_timer_add_then_start添加定時(shí)器并啟動
        軟件定時(shí)器服務(wù)使用示例:
        /* 定義定時(shí)服務(wù)器和定時(shí)器 */
        struct mr_soft_timer_server server;
        struct mr_soft_timer timer1, timer2, timer3;
        mr_err_t timer1_callback(mr_soft_timer timer, void *args){
            printf("timer1_callbackrn");
            return MR_ERR_OK;
        }
        mr_err_t timer2_callback(mr_soft_timer timer, void *args){
            printf("timer2_callbackrn");
            return MR_ERR_OK;
        }
        mr_err_t timer3_callback(mr_soft_timer timer, void *args){
            printf("timer3_callbackrn");
            mr_soft_timer_stop(timer);
            return MR_ERR_OK;
        }
        int main(void){
            /* 添加定時(shí)服務(wù)器 */
            mr_soft_timer_server_add(&server, "soft-timer");
            /* 添加定時(shí)器并啟動 */
            mr_soft_timer_add_then_start(&timer1, 5, timer1_callback, MR_NULL, &server);
            mr_soft_timer_add_then_start(&timer2, 10, timer2_callback, MR_NULL, &server);
            mr_soft_timer_add_then_start(&timer3, 15, timer3_callback, MR_NULL, &server);
            while (1)
            {
                /* 更新定時(shí)服務(wù)器時(shí)鐘 */
                mr_soft_timer_server_update(&server, 1);
                
                /* 定時(shí)服務(wù)器處理(放在哪里,回調(diào)就將在哪里被調(diào)用) */
                mr_soft_timer_server_handle(&server);
            }
        }

        代碼目錄

        mr-library 的代碼目錄結(jié)構(gòu)如下表所示:

        名稱描述
        bsp板級支持包
        device設(shè)備文件
        document文檔
        driver驅(qū)動文件
        include庫頭文件
        module組件
        package軟件包
        src庫源文件
        • 內(nèi)核層: mr-library 的核心部分,實(shí)現(xiàn)對象管理,設(shè)備控制,服務(wù)接口等。
        • 設(shè)備層: 提供統(tǒng)一的設(shè)備接口,將設(shè)備接入到內(nèi)核中。
        • 驅(qū)動層: 為設(shè)備提供底層硬件驅(qū)動,當(dāng)硬件更換時(shí)僅需修改驅(qū)動層。
        • 組件層: 通過框架提供的API實(shí)現(xiàn)不同的功能。包括但不限于虛擬文件系統(tǒng)、通用傳感器模塊、網(wǎng)絡(luò)框架等。
        • 軟件包: 可獨(dú)立使用,無依賴的軟件包。

        來源:https://gitee.com/MacRsh/mr-library

        轉(zhuǎn)自公眾號:嵌入式大雜燴

        版權(quán)聲明:本文來源網(wǎng)絡(luò),版權(quán)歸原作者所有。版權(quán)問題,請聯(lián)系刪除。


        *博客內(nèi)容為網(wǎng)友個(gè)人發(fā)布,僅代表博主個(gè)人觀點(diǎn),如有侵權(quán)請聯(lián)系工作人員刪除。



        關(guān)鍵詞: 嵌入式系統(tǒng)框架

        技術(shù)專區(qū)

        關(guān)閉