版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
現(xiàn)在嵌入式設(shè)計(jì)的要求,比以前要求更高了,這個(gè)時(shí)候還是建議大家要掌握一套或多套軟件框架,以便隨時(shí)派上用場(chǎng)。今天就來(lái)分享一個(gè)開(kāi)源的輕量級(jí)的嵌入式設(shè)計(jì)框架:mr-library.mr-library簡(jiǎn)介MR
框架是專為嵌入式系統(tǒng)設(shè)計(jì)的輕量級(jí)框架。充分考慮了嵌入式系統(tǒng)在資源和性能方面的需求。通過(guò)提供標(biāo)準(zhǔn)化的設(shè)備管理接口,極大簡(jiǎn)化了嵌入式應(yīng)用開(kāi)發(fā)的難度,幫助開(kāi)發(fā)者快速構(gòu)建嵌入式應(yīng)用程序??蚣転殚_(kāi)發(fā)者提供了標(biāo)準(zhǔn)化的開(kāi)啟(open)、關(guān)閉(close)、控制(ioctl)、讀(read)、寫(write)等接口。它將應(yīng)用程序與底層硬件驅(qū)動(dòng)進(jìn)行解耦。應(yīng)用程序無(wú)需了解驅(qū)動(dòng)的實(shí)現(xiàn)細(xì)節(jié)。當(dāng)硬件發(fā)生改變時(shí),只需要適配底層驅(qū)動(dòng),應(yīng)用程序就可以無(wú)縫遷移到新硬件上。這大大提高了軟件的可重用性和應(yīng)對(duì)新硬件的可擴(kuò)展性。項(xiàng)目結(jié)構(gòu)圖關(guān)鍵特性標(biāo)準(zhǔn)化的設(shè)備訪問(wèn)接口應(yīng)用程序和驅(qū)動(dòng)開(kāi)發(fā)解耦簡(jiǎn)化底層驅(qū)動(dòng)和應(yīng)用程序開(kāi)發(fā)輕量易上手,資源占用低模塊化設(shè)計(jì),各部分解耦合并獨(dú)立開(kāi)發(fā),極低的硬件遷移成本支持在裸機(jī)環(huán)境和操作系統(tǒng)環(huán)境下使用主要組成設(shè)備框架:提供設(shè)備訪問(wèn)標(biāo)準(zhǔn)接口內(nèi)存管理:動(dòng)態(tài)內(nèi)存管理工具:鏈表、隊(duì)列、平衡樹(shù)等常用數(shù)據(jù)結(jié)構(gòu)各類功能組件標(biāo)準(zhǔn)化設(shè)備接口設(shè)備的所有操作都可通過(guò)以下接口實(shí)現(xiàn):接口描述mr_dev_register注冊(cè)設(shè)備mr_dev_open打開(kāi)設(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)
{
/*
注冊(cè)SPI10設(shè)備(CS低電平有效)到SPI1總線上
*/
mr_spi_dev_register(&spi_dev,
"spi1/spi10",
0,
MR_SPI_CS_ACTIVE_LOW);
/*
打開(kāi)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
可視化配置工具,開(kāi)發(fā)者無(wú)需深入了解源代碼即可進(jìn)行配置。Kconfig
會(huì)根據(jù)配置文件自動(dòng)生成配置選項(xiàng)界面。開(kāi)發(fā)者可以通過(guò)簡(jiǎn)單的操作來(lái)選擇需要啟用的功能組件和設(shè)置相關(guān)參數(shù)。配置工具配置工具1通過(guò)修改參數(shù),快速裁剪所需功能。配置完成后通過(guò)
Python
腳本自動(dòng)生成配置文件。目錄結(jié)構(gòu)名稱描述bsp板級(jí)支持包c(diǎn)omponents組件device設(shè)備文件document文檔driver驅(qū)動(dòng)文件include庫(kù)頭文件source庫(kù)源文件Kconfig配置文件kconfig.py自動(dòng)配置腳本LICENSE許可證開(kāi)始使用配置
Kconfig
環(huán)境注:Kconfig
并非必須的,但是推薦使用(安裝和配置非??旖?,后續(xù)教程也是以應(yīng)用
Kconfig
為例)。驗(yàn)證系統(tǒng)是否安裝Python環(huán)境。在命令行中運(yùn)行
python--version
檢查Python版本(Kconfig
依賴于
python,若無(wú)
python環(huán)境請(qǐng)自行安裝)。在命令行中使用所示命令安裝
Kconfigpython-mpipinstallwindows-curses
python-mpipinstallkconfiglib在命令行中運(yùn)行
menuconfig-h
驗(yàn)證安裝是否成功。將框架導(dǎo)入工程1.從
Gitee
或
Github
倉(cāng)庫(kù)下載最新版本源碼到本地。將源碼導(dǎo)入到您工程所在的目錄。以STM32工程為例:工程目錄如使用的芯片已經(jīng)做了
BSP
適配請(qǐng)參考芯片對(duì)應(yīng)
BSP
中的配置教程,完成
BSP
配置。移除不需要的文件
bsp、document、module
目錄(如不需要GIT也可以移除.git文件刪除)。完成后,目錄結(jié)構(gòu)如下所示:工程目錄1將文件加入到IDE中(大部分IDE都能自動(dòng)識(shí)別工程路徑下的文件,無(wú)需進(jìn)行此步驟)。以
keil
為例:工程目錄Keil添加
source、device、driver
目錄下的所有文件。配置菜單選項(xiàng)在
mr-library
目錄下打開(kāi)命令行工具,運(yùn)行
menuconfig
進(jìn)行菜單配置。.工程目錄2注:當(dāng)添加對(duì)應(yīng)芯片驅(qū)動(dòng)的后,將顯示
Deviceconfigure
和
Driverconfigure。對(duì)應(yīng)
Driverconfigure
請(qǐng)參考
BSP
下教程。選中
Deviceconfigure
回車進(jìn)入菜單,按照需要配置功能。工程目錄3配置完成后,按
Q
退出菜單配置界面,按Y
保存配置。生成配置文件在
mr-library
目錄下打開(kāi)命令行工具,運(yùn)行
pythonkconfig.py,自動(dòng)生成配置文件
mr_config.h。添加包含路徑在編譯器中添加
mr-library
的包含路徑,以
keil
為例:工程目錄4配置自動(dòng)初始化(GCC環(huán)境),查找您工程下以
.ld
為后綴的連接腳本文件(通常為
link.ld),在腳本文件中添加代碼:注:如果您的是在
keil
等,能夠自動(dòng)生成鏈接腳本的環(huán)境下,請(qǐng)?zhí)^(guò)此步驟。/*
mr-library
auto
init
*/
.
=
ALIGN(4);
_mr_auto_init_start
=
.;
KEEP(*(SORT(.auto_init*)))
_mr_auto_init_end
=
.;示例:工程目錄配置GNU語(yǔ)法。如果您使用的是非
GCC
編譯器,請(qǐng)使能GNU語(yǔ)法。以
keil
為例:AC5:工程目錄6AC6:工程目錄7在您的工程中引入
#include"include/mr_lib.h"。在
main
函數(shù)中添加
mr_auto_init();
自動(dòng)初始化函數(shù)。先來(lái)點(diǎn)個(gè)燈吧#include
"include/mr_lib.h"
/*
定義LED引腳(PC13)*/
#define
LED_PIN_NUMBER
45
int
main(void)
{
/*
自動(dòng)初始化
*/
mr_auto_init();
/*
打開(kāi)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)
{
/*
點(diǎn)亮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)
{
/*
自動(dòng)初始化
*/
mr_auto_init();
/*
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 自動(dòng)化營(yíng)銷工具包及推廣方案
- 一次難忘的冒險(xiǎn)經(jīng)歷記事類作文5篇范文
- 2025河北衡水景縣人民醫(yī)院公開(kāi)招聘醫(yī)護(hù)人員20名備考核心題庫(kù)及答案解析
- 2025安義縣融媒體中心招聘全媒體記者3人筆試重點(diǎn)試題及答案解析
- 2026年西咸新區(qū)黃岡涇河學(xué)校春季教師招聘筆試重點(diǎn)題庫(kù)及答案解析
- 2025貴州黔南州統(tǒng)一面向社會(huì)招聘鄉(xiāng)村醫(yī)生59人筆試重點(diǎn)題庫(kù)及答案解析
- 2025年杭州市上城區(qū)閘弄口街道社區(qū)衛(wèi)生服務(wù)中心招聘編外1人筆試重點(diǎn)試題及答案解析
- 2025天津某國(guó)企物業(yè)公司招聘1人備考核心試題附答案解析
- 2025年黑河市愛(ài)輝區(qū)花園社區(qū)衛(wèi)生服務(wù)中心招聘編制外工作人員5人考試核心試題及答案解析
- 2026昆玉職業(yè)技術(shù)學(xué)院引進(jìn)高層次人才(28人)考試重點(diǎn)題庫(kù)及答案解析
- 心臟手術(shù)體外循環(huán)的無(wú)菌管理策略
- 2025年洗衣房年終工作總結(jié)樣本(四篇)
- 糖尿病合并腎病綜合治療方案
- 消除母嬰三病傳播知識(shí)培訓(xùn)
- 智慧水務(wù)系統(tǒng)建設(shè)方案與應(yīng)用案例
- GB/T 39368.1-2025皮革耐折牢度的測(cè)定第1部分:撓度儀法
- 尾礦砂購(gòu)銷合同范本
- DB15∕T 3434-2024 沙質(zhì)草甸草原風(fēng)蝕區(qū)植被修復(fù)技術(shù)規(guī)程
- 2025共享辦公空間服務(wù)平臺(tái)深度剖析競(jìng)爭(zhēng)態(tài)勢(shì)評(píng)估未來(lái)前景行業(yè)分析報(bào)告
- 原輔料驗(yàn)收標(biāo)準(zhǔn)與記錄模板
- 高中生審美教育
評(píng)論
0/150
提交評(píng)論