分享一個輕量級的嵌入式設(shè)計框架_第1頁
分享一個輕量級的嵌入式設(shè)計框架_第2頁
分享一個輕量級的嵌入式設(shè)計框架_第3頁
分享一個輕量級的嵌入式設(shè)計框架_第4頁
分享一個輕量級的嵌入式設(shè)計框架_第5頁
已閱讀5頁,還剩8頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)

文檔簡介

現(xiàn)在嵌入式設(shè)計的要求,比以前要求更高了,這個時候還是建議大家要掌握一套或多套軟件框架,以便隨時派上用場。今天就來分享一個開源的輕量級的嵌入式設(shè)計框架:mr-library.mr-library簡介MR

框架是專為嵌入式系統(tǒng)設(shè)計的輕量級框架。充分考慮了嵌入式系統(tǒng)在資源和性能方面的需求。通過提供標(biāo)準(zhǔn)化的設(shè)備管理接口,極大簡化了嵌入式應(yīng)用開發(fā)的難度,幫助開發(fā)者快速構(gòu)建嵌入式應(yīng)用程序??蚣転殚_發(fā)者提供了標(biāo)準(zhǔn)化的開啟(open)、關(guān)閉(close)、控制(ioctl)、讀(read)、寫(write)等接口。它將應(yīng)用程序與底層硬件驅(qū)動進(jìn)行解耦。應(yīng)用程序無需了解驅(qū)動的實現(xiàn)細(xì)節(jié)。當(dāng)硬件發(fā)生改變時,只需要適配底層驅(qū)動,應(yīng)用程序就可以無縫遷移到新硬件上。這大大提高了軟件的可重用性和應(yīng)對新硬件的可擴(kuò)展性。項目結(jié)構(gòu)圖關(guān)鍵特性標(biāo)準(zhǔn)化的設(shè)備訪問接口應(yīng)用程序和驅(qū)動開發(fā)解耦簡化底層驅(qū)動和應(yīng)用程序開發(fā)輕量易上手,資源占用低模塊化設(shè)計,各部分解耦合并獨立開發(fā),極低的硬件遷移成本支持在裸機(jī)環(huán)境和操作系統(tǒng)環(huán)境下使用主要組成設(shè)備框架:提供設(shè)備訪問標(biāo)準(zhǔn)接口內(nèi)存管理:動態(tài)內(nèi)存管理工具:鏈表、隊列、平衡樹等常用數(shù)據(jù)結(jié)構(gòu)各類功能組件標(biāo)準(zhǔn)化設(shè)備接口設(shè)備的所有操作都可通過以下接口實現(xiàn):接口描述mr_dev_register注冊設(shè)備mr_dev_open打開設(shè)備mr_dev_close關(guān)閉設(shè)備mr_dev_ioctl控制設(shè)備mr_dev_read從設(shè)備讀取數(shù)據(jù)mr_dev_write向設(shè)備寫入數(shù)據(jù)示例:struct

mr_spi_dev

spi_dev;

int

main(void)

{

/*

注冊SPI10設(shè)備(CS低電平有效)到SPI1總線上

*/

mr_spi_dev_register(&spi_dev,

"spi1/spi10",

0,

MR_SPI_CS_ACTIVE_LOW);

/*

打開SPI1總線下的SPI10設(shè)備

*/

int

ds

=

mr_dev_open("spi1/spi10",

MR_OFLAG_RDWR);

/*

發(fā)送數(shù)據(jù)

*/

uint8_t

wr_buf[]

=

{0x01,

0x02,

0x03,

0x04};

mr_dev_write(ds,

wr_buf,

sizeof(wr_buf));

/*

接收數(shù)據(jù)

*/

uint8_t

rd_buf[4]

=

{0};

mr_dev_read(ds,

rd_buf,

sizeof(rd_buf));

/*

關(guān)閉設(shè)備

*/

mr_dev_close(ds);

}配置工具M(jìn)R

提供

Kconfig

可視化配置工具,開發(fā)者無需深入了解源代碼即可進(jìn)行配置。Kconfig

會根據(jù)配置文件自動生成配置選項界面。開發(fā)者可以通過簡單的操作來選擇需要啟用的功能組件和設(shè)置相關(guān)參數(shù)。配置工具配置工具1通過修改參數(shù),快速裁剪所需功能。配置完成后通過

Python

腳本自動生成配置文件。目錄結(jié)構(gòu)名稱描述bsp板級支持包components組件device設(shè)備文件document文檔driver驅(qū)動文件include庫頭文件source庫源文件Kconfig配置文件kconfig.py自動配置腳本LICENSE許可證開始使用配置

Kconfig

環(huán)境注:Kconfig

并非必須的,但是推薦使用(安裝和配置非常快捷,后續(xù)教程也是以應(yīng)用

Kconfig

為例)。驗證系統(tǒng)是否安裝Python環(huán)境。在命令行中運行

python--version

檢查Python版本(Kconfig

依賴于

python,若無

python環(huán)境請自行安裝)。在命令行中使用所示命令安裝

Kconfigpython-mpipinstallwindows-curses

python-mpipinstallkconfiglib在命令行中運行

menuconfig-h

驗證安裝是否成功。將框架導(dǎo)入工程1.從

Gitee

Github

倉庫下載最新版本源碼到本地。將源碼導(dǎo)入到您工程所在的目錄。以STM32工程為例:工程目錄如使用的芯片已經(jīng)做了

BSP

適配請參考芯片對應(yīng)

BSP

中的配置教程,完成

BSP

配置。移除不需要的文件

bsp、document、module

目錄(如不需要GIT也可以移除.git文件刪除)。完成后,目錄結(jié)構(gòu)如下所示:工程目錄1將文件加入到IDE中(大部分IDE都能自動識別工程路徑下的文件,無需進(jìn)行此步驟)。以

keil

為例:工程目錄Keil添加

source、device、driver

目錄下的所有文件。配置菜單選項在

mr-library

目錄下打開命令行工具,運行

menuconfig

進(jìn)行菜單配置。.工程目錄2注:當(dāng)添加對應(yīng)芯片驅(qū)動的后,將顯示

Deviceconfigure

Driverconfigure。對應(yīng)

Driverconfigure

請參考

BSP

下教程。選中

Deviceconfigure

回車進(jìn)入菜單,按照需要配置功能。工程目錄3配置完成后,按

Q

退出菜單配置界面,按Y

保存配置。生成配置文件在

mr-library

目錄下打開命令行工具,運行

pythonkconfig.py,自動生成配置文件

mr_config.h。添加包含路徑在編譯器中添加

mr-library

的包含路徑,以

keil

為例:工程目錄4配置自動初始化(GCC環(huán)境),查找您工程下以

.ld

為后綴的連接腳本文件(通常為

link.ld),在腳本文件中添加代碼:注:如果您的是在

keil

等,能夠自動生成鏈接腳本的環(huán)境下,請?zhí)^此步驟。/*

mr-library

auto

init

*/

.

=

ALIGN(4);

_mr_auto_init_start

=

.;

KEEP(*(SORT(.auto_init*)))

_mr_auto_init_end

=

.;示例:工程目錄配置GNU語法。如果您使用的是非

GCC

編譯器,請使能GNU語法。以

keil

為例:AC5:工程目錄6AC6:工程目錄7在您的工程中引入

#include"include/mr_lib.h"。在

main

函數(shù)中添加

mr_auto_init();

自動初始化函數(shù)。先來點個燈吧#include

"include/mr_lib.h"

/*

定義LED引腳(PC13)*/

#define

LED_PIN_NUMBER

45

int

main(void)

{

/*

自動初始化

*/

mr_auto_init();

/*

打開PIN設(shè)備

*/

int

ds

=

mr_dev_open("pin",

MR_OFLAG_RDWR);

/*

設(shè)置到LED引腳

*/

mr_dev_ioctl(ds,

MR_CTL_PIN_SET_NUMBER,

mr_make_local(int,

LED_PIN_NUMBER));

/*

設(shè)置LED引腳為推挽輸出模式

*/

mr_dev_ioctl(ds,

MR_CTL_PIN_SET_MODE,

mr_make_local(int,

MR_PIN_MODE_OUTPUT));

while(1)

{

/*

點亮LED

*/

mr_dev_write(ds,

mr_make_local(uint8_t,

MR_PIN_HIGH_LEVEL),

sizeof(uint8_t));

mr_delay_ms(500);

mr_dev_write(ds,

mr_make_local(uint8_t,

MR_PIN_LOW_LEVEL),

sizeof(uint8_t));

mr_delay_ms(500);

}

}HelloWorld#include

"include/mr_lib.h"

int

main(void)

{

/*

自動初始化

*/

mr_auto_init();

/*

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論