MacOS下通过GDB开发嵌入式程序

最近换了MacOS平台,之前常用的IAR除了用虚拟机似乎是没有什么办法可以在MAC中使用了,而我又算是一名嵌入式程序开发着,所以还是有在MAC中开发嵌入式程序的需求。

因为不能用IAR,所以首先要将编译平台换到GCC上面,这里可以直接在ARM官网下载相应的安装包,安装包下载完成之后,只需要设置好相应的PATH环境变量就可以直接使用了。工程的建立也不能在IAR中进行,而是需要编写相应的MakeFile通过GCC进行编译,MakeFile是make命令的输入文件,相当于一个工程配置文件,它可以对我们的源文件进行监控,只在需要的时候增量编译C程序,得到的结果可以用于调试或者直接下载到芯片内部运行。有关于MakeFile的语法,因为比较复杂,这里就不做赘述了。

其实MAC中问题的关键在于调试,而不是程序的编译,对于调试,我现在探索到了以下几种方法:

Ozone调试

这个是从IAR切换之后最为方便的,也是上手最快的调试方式,Ozone调试必须使用Jlink调试器,软件本身是免费的,并且支持三大平台,软件用起来比较方便,但是就是硬件有点贵,并且每次都要带个调试器,也不是很方便。

Ozone

Ozone调试界面和IAR,Ozone调试的时候,偶尔会碰到指令乱跳的情况,这个可能是和编译优化等有关系,具体的原因我也没有细究。其实,这个软件功能真的是挺齐全的,比如可以查看变量,程序执行计数,堆栈分析,Jlink接口,内存查看等等,也就是一般调试该有的功能它都有。并且添加相应寄存器的svd文件之后,可以直接查看模块的寄存器配置信息,十分方便。

这个软件唯一让我不爽的是必须使用Jlink调试软件,或者用Seggeropensda,对于一些比较新的芯片,SEGGER的opensda可能并不支持,或者并没有板载调试器的固件,而用Jlink工具,每次调试的时候都要带一个大个的Jlink debugger,这个确实十分影响使用体验。

Jlink自带的GDB软件

其实既然用到了ARM的GCC工具,就不可避免的需要了解一下arm的gdb工具,gdb是Linux下常用的调试软件,其实很多调试软件都是基于GDB这个工具实现调试的,比如我们之前常用的Eclipse就是通过GDB下载调试的,这个工具是基于命令行的,上手稍微有点复杂,不过用多了,其实也挺方便,基本的功能也都是支持的。不过用Jlink自带的GDB服务器调试,依然摆脱不了大大的调试器,并且方便性还不如Ozone,所以这条调试方法也并不靠谱。

在这里插入图片描述

CMSIS-DAP调试

ARM其实还是很靠谱的,要出东西就出全套,比如针对嵌入式调试,ARM就推出了一个CMSIS-DAP的调试方案,并且是完全开源的,用户可以根据需要将这个调试工具porting到自己的debugger芯片上,不过一般厂家也会提供修改好的下载固件。IAR本身就可以通过CMSIS-DAP进行调试。

CMSIS-DAP调试是一个比较好的解决方案,因为它通过一条USB线就可以实现软件调试,串口收发和电源供电,使用起来特别方便。

不过在MACOS中,因为不能用IAR软件,所以要想使用CMSIS-DAP调试,我们还需要借助一个pyocd的软件,这个可以直接在pip源中进行安装:

sudo -H pip3 install pyocd

安装完成之后,连接上我们的开发板之后就以通过如下命令查看固件支持芯片了:

$ pyocd list --targets
  Name    Vendor    Part Number    Families   Source
-----------------------------------------------------
  k22f    NXP        K22F                     builtin
  k22fa12 NXP        K22FA12                  builtin
  k28f15  NXP        K28F15                   builtin
  ....

上面的列表中可以看出固件支持的芯片,里面如果有我们的芯片,那么就可以通过如下的命令开启一个GDB的服务:

─$ pyocd gdbserver -t mimxrt1050 --allow-remote --persist
0000533:WARNING:common:STLink and CMSIS-DAPv2 probes are not supported because no libusb library was found.
0000541:INFO:board:Target type is mimxrt1050
0000599:INFO:dap:DP IDR = 0x6ba02477 (v2 rev6)
0000630:INFO:ap:AP#0 IDR = 0x84770001 (AHB-AP var0 rev8)
0000657:INFO:ap:AP#1 IDR = 0x24770011 (AHB-AP var1 rev2)
0000683:INFO:ap:AP#2 IDR = 0x54770002 (APB-AP var0 rev5)
0000752:INFO:rom_table:AP#0 ROM table #0 @ 0xe00fd000 (designer=00e part=88c)
0000772:INFO:rom_table:[0]<e00fe000:ROM class=1 designer=43b part=4c8>
0000772:INFO:rom_table:  AP#0 ROM table #1 @ 0xe00fe000 (designer=43b part=4c8)
0000788:INFO:rom_table:  [0]<e00ff000:ROM class=1 designer=43b part=4c7>
0000795:INFO:rom_table:    AP#0 ROM table #2 @ 0xe00ff000 (designer=43b part=4c7)
0000807:INFO:rom_table:    [0]<e000e000:SCS-M4 class=14 designer=43b part=00c>
0000820:INFO:rom_table:    [1]<e0001000:DWT class=14 designer=43b part=002>
0000834:INFO:rom_table:    [2]<e0002000:FPB class=14 designer=43b part=00e>
0000848:INFO:rom_table:    [3]<e0000000:ITM class=14 designer=43b part=001>
0000861:INFO:rom_table:  [1]<e0041000:ETM-M7 class=9 designer=43b part=975 devtype=13 archid=4a13 devid=0:0:0>
0000928:INFO:rom_table:  [2]<e0042000:CTI class=9 designer=43b part=906 devtype=14 archid=0000 devid=0:0:40800>
0000944:INFO:rom_table:[1]<e0043000:CSTF class=9 designer=43b part=908 devtype=12 archid=0000 devid=0:0:28>
0000965:ERROR:ap:Transfer error while reading AP#1 ROM table:
0000980:INFO:cortex_m:CPU core #0 is Cortex-M7 r1p2
0001023:INFO:cortex_m:FPU present: FPv5
0001051:INFO:dwt:4 hardware watchpoints
0001066:INFO:fpb:8 hardware breakpoints, 1 literal comparators
0001176:INFO:server:Semihost server started on port 4444
0001177:INFO:gdbserver:GDB server started on port 3333

上述就是开启了一个IMXRT1050的调试,这样我们就可以通过arm gdb连接我们的服务器进行调试了,虽然只能是命令行调试,但是聊胜于无,习惯了之后也是非常方便的,并且,现在IAR越来越臃肿,而这个命令行的小工具运行很快,比起IAR动不动就死机,也能节省不少时间的。

总结

这里列出了几种MAC下面的嵌入式软件调试方式,分析了各种调试的优缺点,最终我还是选择了命令行下GDB+CMSIS-DAP的调试方式,习惯之后用起来感觉还不错,至于GUI界面,其实可以尝试配置VScode实现,这个后面有需求在研究吧。

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 218,546评论 6 507
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 93,224评论 3 395
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 164,911评论 0 354
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,737评论 1 294
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,753评论 6 392
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,598评论 1 305
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,338评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,249评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,696评论 1 314
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,888评论 3 336
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 40,013评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,731评论 5 346
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,348评论 3 330
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,929评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 33,048评论 1 270
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,203评论 3 370
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,960评论 2 355

推荐阅读更多精彩内容