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

下載本文檔

版權(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ì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論