分享一个轻量级的嵌入式设计框架_第1页
分享一个轻量级的嵌入式设计框架_第2页
分享一个轻量级的嵌入式设计框架_第3页
分享一个轻量级的嵌入式设计框架_第4页
分享一个轻量级的嵌入式设计框架_第5页
已阅读5页,还剩8页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

现在嵌入式设计的要求,比以前要求更高了,这个时候还是建议大家要掌握一套或多套软件框架,以便随时派上用场。今天就来分享一个开源的轻量级的嵌入式设计框架:mr-library.mr-library简介MR

框架是专为嵌入式系统设计的轻量级框架。充分考虑了嵌入式系统在资源和性能方面的需求。通过提供标准化的设备管理接口,极大简化了嵌入式应用开发的难度,帮助开发者快速构建嵌入式应用程序。框架为开发者提供了标准化的开启(open)、关闭(close)、控制(ioctl)、读(read)、写(write)等接口。它将应用程序与底层硬件驱动进行解耦。应用程序无需了解驱动的实现细节。当硬件发生改变时,只需要适配底层驱动,应用程序就可以无缝迁移到新硬件上。这大大提高了软件的可重用性和应对新硬件的可扩展性。项目结构图关键特性标准化的设备访问接口应用程序和驱动开发解耦简化底层驱动和应用程序开发轻量易上手,资源占用低模块化设计,各部分解耦合并独立开发,极低的硬件迁移成本支持在裸机环境和操作系统环境下使用主要组成设备框架:提供设备访问标准接口内存管理:动态内存管理工具:链表、队列、平衡树等常用数据结构各类功能组件标准化设备接口设备的所有操作都可通过以下接口实现:接口描述mr_dev_register注册设备mr_dev_open打开设备mr_dev_close关闭设备mr_dev_ioctl控制设备mr_dev_read从设备读取数据mr_dev_write向设备写入数据示例:struct

mr_spi_dev

spi_dev;

int

main(void)

{

/*

注册SPI10设备(CS低电平有效)到SPI1总线上

*/

mr_spi_dev_register(&spi_dev,

"spi1/spi10",

0,

MR_SPI_CS_ACTIVE_LOW);

/*

打开SPI1总线下的SPI10设备

*/

int

ds

=

mr_dev_open("spi1/spi10",

MR_OFLAG_RDWR);

/*

发送数据

*/

uint8_t

wr_buf[]

=

{0x01,

0x02,

0x03,

0x04};

mr_dev_write(ds,

wr_buf,

sizeof(wr_buf));

/*

接收数据

*/

uint8_t

rd_buf[4]

=

{0};

mr_dev_read(ds,

rd_buf,

sizeof(rd_buf));

/*

关闭设备

*/

mr_dev_close(ds);

}配置工具MR

提供

Kconfig

可视化配置工具,开发者无需深入了解源代码即可进行配置。Kconfig

会根据配置文件自动生成配置选项界面。开发者可以通过简单的操作来选择需要启用的功能组件和设置相关参数。配置工具配置工具1通过修改参数,快速裁剪所需功能。配置完成后通过

Python

脚本自动生成配置文件。目录结构名称描述bsp板级支持包components组件device设备文件document文档driver驱动文件include库头文件source库源文件Kconfig配置文件kconfig.py自动配置脚本LICENSE许可证开始使用配置

Kconfig

环境注:Kconfig

并非必须的,但是推荐使用(安装和配置非常快捷,后续教程也是以应用

Kconfig

为例)。验证系统是否安装Python环境。在命令行中运行

python--version

检查Python版本(Kconfig

依赖于

python,若无

python环境请自行安装)。在命令行中使用所示命令安装

Kconfigpython-mpipinstallwindows-curses

python-mpipinstallkconfiglib在命令行中运行

menuconfig-h

验证安装是否成功。将框架导入工程1.从

Gitee

Github

仓库下载最新版本源码到本地。将源码导入到您工程所在的目录。以STM32工程为例:工程目录如使用的芯片已经做了

BSP

适配请参考芯片对应

BSP

中的配置教程,完成

BSP

配置。移除不需要的文件

bsp、document、module

目录(如不需要GIT也可以移除.git文件删除)。完成后,目录结构如下所示:工程目录1将文件加入到IDE中(大部分IDE都能自动识别工程路径下的文件,无需进行此步骤)。以

keil

为例:工程目录Keil添加

source、device、driver

目录下的所有文件。配置菜单选项在

mr-library

目录下打开命令行工具,运行

menuconfig

进行菜单配置。.工程目录2注:当添加对应芯片驱动的后,将显示

Deviceconfigure

Driverconfigure。对应

Driverconfigure

请参考

BSP

下教程。选中

Deviceconfigure

回车进入菜单,按照需要配置功能。工程目录3配置完成后,按

Q

退出菜单配置界面,按Y

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

mr-library

目录下打开命令行工具,运行

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

mr_config.h。添加包含路径在编译器中添加

mr-library

的包含路径,以

keil

为例:工程目录4配置自动初始化(GCC环境),查找您工程下以

.ld

为后缀的连接脚本文件(通常为

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

keil

等,能够自动生成链接脚本的环境下,请跳过此步骤。/*

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

函数中添加

mr_auto_init();

自动初始化函数。先来点个灯吧#include

"include/mr_lib.h"

/*

定义LED引脚(PC13)*/

#define

LED_PIN_NUMBER

45

int

main(void)

{

/*

自动初始化

*/

mr_auto_init();

/*

打开PIN设备

*/

int

ds

=

mr_dev_open("pin",

MR_OFLAG_RDWR);

/*

设置到LED引脚

*/

mr_dev_ioctl(ds,

MR_CTL_PIN_SET_NUMBER,

mr_make_local(int,

LED_PIN_NUMBER));

/*

设置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. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论