非常感谢晕哥的优惠活动,很便宜的价格就能拿到开发板。我工作、生活上都用实体的Linux系统Manjaro Linux,只在极少情况下才会开虚拟机跑下Windows. 那么MCU开发也必然要在Linux下进行。Linux环境下的开发工具都是开源的,成熟的工具链是:eclipse + GCC + OpenOCD/pyOCD,而且系统的官方软件仓库都收录有这些工具,所以只要求输入一条命令就可以将其安装下来,非常便利。
这里我选的工具链是:eclipse-embedcpp + arm-none-eabi-gcc + pyOCD。之所以选pyOCD而非openOCD是因为它支持keil的pack包,pack包包含flash烧录算法和外设寄存器信息。这样,只要MCU支持keil,pyOCD就都能跑起来,烧录、调试都没问题。
先在eclipse里新建一个模板工程:
然后进行移植,移植的工作量不大,主要分为:
* 外设驱动库添加GCC支持(只有__weak宏需要修改)、
* 中断向量表适配、
* 静态库的适配、
* pyOCD的配置。
把外设驱动源码的inc及src文件夹都复制到工程内,修改文件 ACM32Fxx_HAL.h内的宏__weak添加对GCC的支持:
中断向量表适配:
静态库的适配:有些外设的驱动没有源码只静态库,因为其所使用的编译是armcc v6,其实就是clang编译器;而clang是跟gcc兼容的,所以这些库文件可以直接使用。如果用file命令查看从库文件解压出来的.o文件,可以看出其ABI跟arm-none-eabi-gcc的是相同的:
那么我们把这些库文件放到lib文件夹进行统一管理,并按照gcc的惯例将库文件改名为libxxx.a的形式:
然后添加链接器选项:(目前做点灯测试,只用到这两个库)
然后写些测试代码,实现main函数:
就可以编译了:
eclipse编译还是一如既往地快,编译整个工程耗时半秒都不到!linux的IO快应该是一大助力。这就是生产力呀!
另外,吐槽下,外设驱动源码里的警告(unused variable)太多了。我只打开的-Wall选项而已呀就多到把用户代码的警告淹没了。像ST的源码基本怎么开警告选项都不会输出警告的,这就是差距呀。
最后就是调试配置了。首先复制一份keil的pack文件,将其后缀改为zip然后解压出来找得ACM32F4.svd文件保存好以备用:(还可以将svd文件压缩成zip文件)
然后进行pyOCD配置:
将之前得到的svd文件的路径填到“SVD Path”内:
保存好配置后,将开发板上的"Link CN"USB接到电脑上就可以调试了:
之前的SVD文件就是用来在调试时查看外设的寄存器用的:
好了,开发板的上USER LED成功地闪烁起来了。
我已经将本工程上传到gitee了,有兴趣同学可以直接clone: https://gitee.com/ufbycd/acm32f4test
离线
楼主你好,方便做个视频吗?我一直想搞Linux单片机开发,领导催了我好几次了,我一直不知道从哪里入手,文字教程又看不下去,总是感觉断片了一样,视频直观一些。用了楼主这一套,再也不担心律师函了。
要想在Linux上做开发,首先得熟悉Linux系统,只在虚拟机里捣鼓几下是不够的,要能应付日常使用才算基本熟悉。
熟悉了以后就能很容易打造开发环境了。
另外,本贴是假设大家对eclipse已有所了解,知道如何编译、调试。如果对ecipse尚不了解就可能看得不太明白,可以在网上找些教程多了解了解eclipse。
最近编辑记录 海石生风 (2022-07-03 08:46:25)
离线