0%

使用aardio写一个基于pyocd的单片机下载器

为了方便使用pyocd进行下载操作,于是写了一个下载器GUI,开发工具选择了aardio,因此只支持Windows平台。

1 新建工程

最开始本来是打算调用pyocd 的python api的,但是一方面是内嵌包一直安装出问题,另一方面是考虑到本地pack不想重复安装和管理,于是就转做pyocd的前端了,也就是直接调用pyocd,根据返回数据解析,然后执行要做的命令。

所以新建一个普通工程就可以。

2 基本功能

主要功能:

  • 下载

  • 擦除

  • 复位 然后要能选择对应的仿真器和单片机型号,从支持的列表从选择,就要用一下pyocd list和pyocd list -t命令查询,根据返回的结果解析已经可以支持的单片机。

    p.s 其实直接用pyocd json 命令返回json会很容易解析,但是我一开始没看到这个命令,就算了,正好生成命令pyocd list的执行结果也可以给人看。

其中pyocd list会返回仿真器的列表,我是通过head也就是第一行的标题的位置来得到下面每行内容的分割位置,得到正确的结果。这里发现是每隔一行为一个仿真器信息。 而pyocd list -t 返回可用器件型号,分割方法类似,不过这里不是每隔一行而是连续的每行都是对应结果,一开始这里没看到导致少了一半。

另外这里在使用aardio遇到一个bug就是结构体的值发生了变换(aardio实际上没有结构体而是表),不知道为什么,类似的方法直接赋值给数组就不会出问题。

3 基本实现

基本就是添加几个框框,根据填入的参数生成命令然后通过调用命令行并获取执行结果显示出来,对于有进度条的执行命令我不知道怎么实时获取,没有看到aardio这样的例子,遂作罢。

基本界面

除了基本界面,调整了一下布局,让他能缩放合适,内嵌了字体(其实也就俩按键用了这个字体,得意黑,软件凭空大了1M多,本来只有几百kb,主要是好不容易调整好了不想改 )。 添加了一个菜单栏,把一些生成命令的语句例如pyocd gdbserver收纳到了菜单栏,方便配合其他软件使用。 例如如果要开启gdb server,例如使用segger embedded studio或者其他软件的时候,启动时候执行的命令就可以用这个GUI来生成,稍微省心一点。

仿真器连接后可以通过刷新来获取,当然,打开软件的时候也会自动获取一次,通过指定uid来保证一次能执行对命令,避免二次选择。

基本就这样。

这里有我上传的: 分享一个基于pyocd的单片机GUI下载器 - Cortex M3 M0 M4开发 (51hei.com)

4 总结

aardio确实挺好用的,很能缝合,布局上也是自动缩放,要求不高的话很容易调整到还不错的效果。写起来很快,高分屏的问题也自动处理了,第一次用观感不错。不过有部分问题横竖找不到根源,倒是能换个方法解决。

其实pyocd本身就有python api,但是我不想用python的gui的一些库然后打包什么的。其实用这些api有些功能会做出来更好用。