如何简化嵌入式调试

开头

在嵌入式开发过程中难免需要频繁调试一些硬件,调试过程经常需要不停修改代码以测试不同的功能,这一步骤将消耗大量的时间。

一个强大的Shell(命令行界面)对于提高开发效率和系统管理的便捷性至关重要。

依赖 mr-library 项目统一的设备接口,配合命令行工具即可实现一个便捷的命令行调试工具。

本文内使用的是 mr-library 内置的 msh 命令行工具。

通过 help 查看内置的命令。本文主要关注命令行调试功能,主要为 dxxxx命令。

查看设备

通过 dlist 命令可以查看已经注册的设备。

前缀为设备支持的打开方式:-r--- 只读、--w--只写、-rw--可读可写、-rwn-可非阻塞读写。

中间为设备名,按树状结构拼成完整路径,以 i2c10 设备为例,完整路径为:/dev/i2c1/i2c10 , 可省略dev路径为 i2c1/i2c10

打开设备

使用 dopen 命令可以打开上面的设备,以 adc1 设备为例,r 为只读方式打开,如果使用了不支持的方式,将提示不支持的方式:

当正确打开命令后,msh 后将显示当前持有的设备路径 /dev/adc1/-1,最后的 -1 为当前的写入位置(对于adc设备而言即是写入通道)。

配置设备

通过 dioctl 先设置写入位置 pos ,设置为通道1,此时路径变更为 /dev/adc1/1。同时通过cfg -g获取配置,配置通道1使能。

配置参数较多的设备则需要查看对应的设备文档。

读取数据

dread 可以读取设备数据,10为读取数据个数,-4为单个数据为4字节,-d为数据类型。

通过-h可以查看命令的具体格式和参数。

关闭设备

由于adc设备不支持写入,所以我们可以先关闭他(当然这不是必须的,后面会讲到其他方法)。

要关闭当前的设备直接使用dclose,当需要关闭其他设备时可以添加一个desc描述符参数(可能你还不了解描述符概念,不过没有关系,下文会详细介绍)。

写入数据

先打开一个串口设备,为方便演示此处使用msh使用的串口1,通过dwrite写入数据,-c为数据类型,写入数据为hello直接打印在终端上。

整体使用方法和读取数据类似,只不过单个数据字节和数据类型前置。

切换设备

上文中我们做了一次adc切换到serial1设备,但是需要先关闭adc设备,这对于使用还是过于麻烦了,不过在此之前需要先介绍一下描述符。

描述符

可能用过文件系统的比较了解文件描述符,设备描述符也是类似的概念。

当打开设备(dopen)时,系统会自动分配一个描述符给用户使用,描述符记录了操作的设备、当前用户的读写权限、当前用户的操作位置等信息。持有当前的描述符即代表着一个设备的使用者,拥有使用者的一切信息。

一个设备可以有无限的使用者(描述符),而 msh 拥有着最高权限(坐在电脑面前的你),可以任意使用其他用户的描述符,可能是你刚刚打开的或者是代码中正在运行程序的描述符(没错,作为上帝的你可以切换到这个描述符然后关掉它,你甚至可以关掉msh所使用的描述符,然后你的设备就和你失联了)。

我们可以先dlist查看一下现在的设备,会发现和最初先比serial1后面的描述符多了[1],也就是我们现在所持有的描述符。

我们可以先打开一下pin设备,然后再dlist查看一下

可以看到pin设备后多了[2],就是我们刚打开分配的描述符。

通过 dselect 命令可以不关闭当前设备的情况下切换到之前使用的serial1设备,使用 -g 可以获取当前使用的描述符。

结尾

核心

可能你看到此处还一头雾水,不知道是如何实现的,其实命令行并不是这个工具的核心,只是核心的一种交互式应用,如果你想了解核心内容,点击 ---> 点我

适配

或许你觉得适配成本一定很高吧,其实适配非常快速,对于设备框架已经支持的设备,仅需适配驱动即可完成;对于不支持的设备,只需按照设备框架开发,就将自动支持msh交互(不需要任何针对msh的适配,0适配成本)。

更多

正因为核心不是命令行工具,所以你可以通过简单的移植,就可将核心内容整体搬移到你熟悉的命令行工具上,而无需使用自带的msh(其实功能也很不错,可以尝试一下)。

开源代码

开发不易,如果还觉得不错,可以点一下star

Gitee:gitee.com/MacRsh/mr-l... GitHub:github.com/Mac-Rsh/mr-...

结尾

我关闭了我自己

相关推荐
yutian06066 小时前
Keil MDK下载程序后MCU自动重启设置
单片机·嵌入式硬件·keil
析木不会编程9 小时前
【小白51单片机专用教程】protues仿真独立按键控制LED
单片机·嵌入式硬件·51单片机
pubuzhixing10 小时前
开源白板新方案:Plait 同时支持 Angular 和 React 啦!
前端·开源·github
忆源11 小时前
3.3.2.3 开源项目有锁队列实现--魔兽世界tinityCore
开源
鹏大师运维11 小时前
聊聊开源的虚拟化平台--PVE
linux·开源·虚拟化·虚拟机·pve·存储·nfs
枯无穷肉13 小时前
stm32制作CAN适配器4--WinUsb的使用
stm32·单片机·嵌入式硬件
不过四级不改名67713 小时前
基于HAL库的stm32的can收发实验
stm32·单片机·嵌入式硬件
嵌入式大圣13 小时前
单片机UDP数据透传
单片机·嵌入式硬件·udp
云山工作室14 小时前
基于单片机的视力保护及身姿矫正器设计(论文+源码)
stm32·单片机·嵌入式硬件·毕业设计·毕设
嵌入式-老费14 小时前
基于海思soc的智能产品开发(mcu读保护的设置)
单片机·嵌入式硬件