OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 5245|回复: 9

单片机命令行交互调试 十年一剑

[复制链接]

17

主题

587

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
4467
金钱
4467
注册时间
2013-6-27
在线时间
565 小时
发表于 2021-10-3 10:35:27 | 显示全部楼层 |阅读模式
本帖最后由 DongInker 于 2021-10-7 21:32 编辑

演示工程
  • 安装keil5
  • 安装stm32f103支持包
  • 编译工程(F7)
  • 进入仿真模式(Ctrl + F5)
  • 运行仿真调试(F5)
  • 打开串口1串口命令交互(View > Serial Windows > Uart #1)
  • 在Uart #1窗口输入help<回车>,输出模块列表
  • 输入.norlfs<回车>,输出对littlefs文件系统的相关操作命令(文件系统信息,文件列表,创建文件,创建目录,读写文件等)
串口命令行进化论
  • 升级下载
  • 设备通信(鱼)
  • 打印信息(熊)
  • 单个字符控制命令
    • 容易干扰
    • 命令数量很多后,不方便记忆
  • 字符串控制命令
    • 给每个命令取个名字,便于记忆
    • 调试改变参数,避免不了修改,编译,下载,查看
  • 命令名称+参数命令
    • 参数自由化
  • MCU十进制与十六进制平分天下
    • 没有十六进制参数是没有色彩的
    • 添加十六进制命令参数
    • 命令名称 [H]参数(十六进制) ...(回车)
  • 熊和鱼
    • 对于只有一个串口资源的mcu只拿来调试,谁都不同意
    • 创造登录口令进而复用串口
      • 设备运行时串口是处理设备通信任务
      • 需要调试监控时,登录调试模式

  • 局部与全局关闭编译
    • 局部
      • 添加模块命令只有2个函数,一个是初始化注册函数,一个是命令行函数
      • 要模块这2个函数添加预编译,而预编译DBG_CMD_EN定义在命令行.h文件中
      • 模块屏蔽*include "dbg_cmd.h",则关闭相应模块命令行编译代码
    • 全局
      • 要在命令行.h文件中屏蔽命令行DBG_CMD_EN定义,则关闭整个工程命令编译


调试信息打印进化论
  • 常规
    • 遇到问题需要调试
    • 代码修改编译选项,编译,下载,查看调试信息
    • 分析调试信息,发现调试信息不全,进一步开启更高一级调试信息打印,编译,下载
    • 海量调试信息找问题
  • 结合命令行,可灵活设置各模块调试信息打印等级
    • 为每个模块定制不同打印等级信息
    • 过命令行可用根据实际需求配置不通打印信息等级
    • 遇到问题,直接登录调试平台,根据实际问题及开启相应打印信息,逐渐靠近问题定位问题
  • 局部与全局关闭编译
    • 局部
      • 屏蔽模块中MODULE_PRINT_INFO_EN定义,关闭信息打印等级编译
    • 全局
      • 要在myprint.h文件中屏蔽PRINTF_INFO_EN定义,则关闭整个工程信息打印等级


驱动模块
  • 驱动.c.h文件
  • 调试等级打印(可屏蔽)
  • 命令行调试交互(可屏蔽)
  • 在没有调试及命令行环境下,只要屏蔽局部调试等级及调试命令
  • 最小的移植代价,只要复制.c.h文件就可用任意平台编译使用驱动代码
抛砖引玉,欢迎大家提宝贵建议!

捕获.PNG

stm32f1_cmd_demo.rar

522.71 KB, 下载次数: 6

让我们的思维驾驭在电的速度之上!
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

0

主题

7

帖子

0

精华

新手入门

积分
16
金钱
16
注册时间
2021-9-29
在线时间
4 小时
发表于 2021-10-7 10:01:03 | 显示全部楼层
本帖最后由 huntbao 于 2021-10-7 11:40 编辑

做一个动图演示:

打开 Keil 目录的 ST32F1.uvprojx;
全编译->调试->运行->打开虚拟串口;
在虚拟串口中直接敲回车,会默认输入help的信息;
输入命令.appdemo,可以查看到.appdemo模块支持的所有命令;
输入命令demoprf 1 ,打印appdemo模块的1级打印信息,此处为:10秒间隔打印信息“prn 1 msg”;
输入命令demoprf 0 ,关闭appdemo模块的1级打印信息;
输入命令teststr,用于测试输入两个字符串参数并显示处理。

dmg_cmd_hello_world.gif

注意:这次有做修改,已经有提交到gitee了  https://gitee.com/donginker/dbg_cmd
     1.忽略编译文件;
     2.demo改为app_demo;

下载最新的代码有两种方式:
     1.用git命令的方式;
     2.直接在gitee上直接下载压缩包;(如下图,先点击上面红框,再点击下面红框下载源码的zip压缩包)




回复 支持 反对

使用道具 举报

17

主题

97

帖子

0

精华

高级会员

Rank: 4

积分
822
金钱
822
注册时间
2020-7-21
在线时间
85 小时
发表于 2021-10-3 10:59:52 | 显示全部楼层
顶!!!
回复 支持 反对

使用道具 举报

17

主题

97

帖子

0

精华

高级会员

Rank: 4

积分
822
金钱
822
注册时间
2020-7-21
在线时间
85 小时
发表于 2021-10-3 11:00:39 | 显示全部楼层
但是那些链接都打不开
回复 支持 反对

使用道具 举报

17

主题

587

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
4467
金钱
4467
注册时间
2013-6-27
在线时间
565 小时
 楼主| 发表于 2021-10-3 11:30:37 | 显示全部楼层
16424740 发表于 2021-10-3 11:00
但是那些链接都打不开

github国外网站就是慢,说明连接添加了码云速度会快点,之前压缩包没有上传成功,现在补上传了
让我们的思维驾驭在电的速度之上!
回复 支持 反对

使用道具 举报

70

主题

6761

帖子

0

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
13118
金钱
13118
注册时间
2012-11-26
在线时间
3813 小时
发表于 2021-10-7 14:47:16 | 显示全部楼层
支持一下  类似shell
学无止境
回复 支持 反对

使用道具 举报

0

主题

7

帖子

0

精华

新手入门

积分
16
金钱
16
注册时间
2021-9-29
在线时间
4 小时
发表于 2021-10-8 09:40:43 | 显示全部楼层
jermy_z 发表于 2021-10-7 14:47
支持一下  类似shell

是的,可以下载体验下,也欢迎提提建议来改进这个程序框架。
回复 支持 反对

使用道具 举报

0

主题

7

帖子

0

精华

新手入门

积分
16
金钱
16
注册时间
2021-9-29
在线时间
4 小时
发表于 2021-10-8 09:44:38 | 显示全部楼层
16424740 发表于 2021-10-3 11:00
但是那些链接都打不开

根据您的建议,@DongInker 已经上传zip压缩包到论坛
回复 支持 反对

使用道具 举报

0

主题

7

帖子

0

精华

新手入门

积分
16
金钱
16
注册时间
2021-9-29
在线时间
4 小时
发表于 2021-10-8 11:27:51 | 显示全部楼层
应用场景:可以直接用命名行的方式去调试 驱动,应用各个子模块。 如pwm驱动参数(入口参数:频率,占空比)写好后,用命令(命令带频率,占空比参数)进行测试各个频率和占空比是否符合设计预期,提高开发和验证的效率。
回复 支持 反对

使用道具 举报

17

主题

587

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
4467
金钱
4467
注册时间
2013-6-27
在线时间
565 小时
 楼主| 发表于 2021-10-21 21:52:35 | 显示全部楼层
自己顶一下
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-6-9 05:34

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表