MR
open
)、关闭(close
)、ioctl
)、读(read
)、write
)
- 标准
化 的 设备访问接 口 - 应用
程 序 和 驱动开发解 耦 - 简化
底 层驱动和应用程 序 开发 - 轻量
易 上手 ,资源占 用 低 模 块化设计,各部 分解 耦合并独立 开发,极低的 硬 件 迁移成本 支持 在 裸 机 环境和 操作 系 统环境 下 使用
- 设备
框 架 :提供 设备访问标准接 口 内 存 管理 :动态内 存 管理 工具 :链表、队列、平衡 树等常用 数 据 结构各 类功能 组件
设备
描述 | |
---|---|
mr_dev_register | |
mr_dev_open | |
mr_dev_close | 关闭设备 |
mr_dev_ioctl | |
mr_dev_read | 从设备读取 |
mr_dev_write |
int main(void)
{
/* 打 开SPI1总线下 的 SPI10设备 */
int ds = mr_dev_open("spi1/spi10", MR_O_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);
}
msh
设备
MR
Kconfig
Kconfig
Python
描述 | |
---|---|
bsp | |
components | 组件 |
device | 设备 |
document | |
driver | 驱动 |
include | 库头 |
source | 库源 |
Kconfig | |
LICENSE | 许可证 |
kconfig.py | |
tool.py |
设备/组件 | 计划 | 预览 | 稳定 | |
---|---|---|---|---|
ADC |
[√] | [√] | ||
CAN |
[√] | |||
DAC |
[√] | [√] | ||
I2C |
[√] | [√] | ||
Soft-I2C |
[√] | [√] | ||
Pin |
[√] | [√] | ||
PWM |
[√] | [√] | ||
Serial |
[√] | [√] | ||
SPI |
[√] | [√] | ||
Timer |
[√] | [√] | ||
msh |
[√] | [√] | ||
LCD |
[√] | |||
Senser |
[√] |
验证python --version
检查PythonMR
3.11.7
-
从
Gitee
或 Github
仓库下 载最新版 本源 码到本地 。 -
将 源 码复制 到 您工程 所在 的 目 录。以MDK
工程 (CubeMX生成 的 标准工程 )为例: -
将 bsp
目 录中对应芯 片 的 驱动复制到 driver
(请仔细阅读bsp
中 的 文 档): -
移 除 不 需要 的 文 件 bsp
、document
目 录(如不需要 GIT
也可以移除 .git
文 件 )。完成 后 ,目 录结构如下 所 示 : -
使用 自 动构建 脚本 ,完成 自 动构建 。在 mr-library
路 径 下 ,打 开命令 行 工具 ,运行python tool.py -b
以
MDK
为例:注 :支持 MDK5
、Eclipse
。MDK
未 先 编译或 版本 过低可能 导致GNU
配置 失 败。
-
在 mr-library
目 录下打 开命令 行 工具 ,运行python tool.py -m
进行菜 单配置 。运行
失 败:- 检查
Python
版本 (暂不支持 3.11.7
以上 的 版本 ,重 新 安 装 并删除 已 安 装 的 模 块)。 命令 行 工具 不 支持 ,推荐使用 powershell(win10及以
、上 )git bash(较新
版本 )等 。
- 检查
-
选中
Device configure
回 车进入 菜 单,配置 功 能 。 -
配置 完成 后 ,按Q
退出 菜 单配置 界面 ,按Y
保存 配置 ,脚本 将 自 动生成 配置 文 件 。 -
工程 中 引入#include "include/mr_lib.h"
并在main
函数 中 添加 mr_auto_init();
自 动初始 化 函数 ,即 可 开始使用 。
python tool.py -h
查看。
#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_O_WRONLY);
/* 设置到 LED引脚 */
mr_dev_ioctl(ds, MR_IOC_PIN_SET_NUMBER, MR_MAKE_LOCAL(int, LED_PIN_NUMBER));
/* 设置LED引脚为推挽 输出模 式 */
mr_dev_ioctl(ds, MR_IOC_PIN_SET_MODE, MR_MAKE_LOCAL(int, MR_PIN_MODE_OUTPUT));
while(1)
{
/* 点 亮 LED */
mr_dev_write(ds, MR_MAKE_LOCAL(uint8_t, 1), sizeof(uint8_t));
mr_delay_ms(500);
mr_dev_write(ds, MR_MAKE_LOCAL(uint8_t, 0), sizeof(uint8_t));
mr_delay_ms(500);
}
}
#include "include/mr_lib.h"
int main(void)
{
/* 自 动初始 化 */
mr_auto_init();
/* 打 开Serial-1设备 */
int ds = mr_dev_open("serial1", MR_O_RDWR);
/* 输出Hello World */
mr_dev_write(ds, "Hello World\r\n", sizeof("Hello World\r\n"));
while(1);
}
参考 更 多 教程 。- 尝试
基 于某款芯片 开发驱动,练习设备驱动编程。 - 尝试编写
更 多 设备模 板 和 开发更 多功 能 。 - 欢迎您
提出 意 见和建 议。如果您对开发有 兴趣,诚邀您参与 到 MR
项目的 开发中 来 ,项目交流 群 :199915649(QQ)。