0
点赞
收藏
分享

微信扫一扫

不同方法编译STM32跑马灯程序的横向对比

落拓尘嚣 2022-03-31 阅读 95

文章目录


前言

最近尝试了两种不同的方法都能够VScode编译生成STM32代码,有点好奇不同的编译方式的区别。文章从编译方式、编译速度、编译结果分别进行对比


一、工程简介

我使用STM32CUBEmx生成了一段代码,芯片选择STM32F108ZET6,初始化了GPIOB5、GPIOE5作为LDE控制引脚,其余外设配置保持默认。

在这里插入图片描述
主函数实现了一段跑马灯测试程序,内容如下:

  while (1)
  {
    /* USER CODE END WHILE */
    HAL_GPIO_TogglePin(GPIOB, GPIO_PIN_5);//LED0翻转
    HAL_GPIO_TogglePin(GPIOE, GPIO_PIN_5);//LED1翻转
    HAL_Delay(2000);//延时2000ms
    /* USER CODE BEGIN 3 */
  }

二、MDK表现

1.编译方式

首先使用MDK进行编译,对MDK进行如下设置:
1、需要能够生成DEBUG信息、需要输出HEX文件、需要生成引用信息
在这里插入图片描述
2、系统优化等级为3级
在这里插入图片描述
另外,测试过程发现一个奇怪的情况,MDK打开Options for Target 的Utilities标签页的时候会卡死,等一会儿自己就恢复了,不知道大家遇见过没有。

2.编译结果

编译输出如下:

linking...
Program Size: Code=2860 RO-data=352 RW-data=16 ZI-data=1632  
FromELF: creating hex file...
"LED\LED.axf" - 0 Error(s), 0 Warning(s).
Build Time Elapsed:  00:00:22

编译输出文件大小如下:
在这里插入图片描述


三、VScode+OPENocd表现

1.编译方式

该方法为我初次尝试,具体参考B站视频 BV1Gt4y1D74k

2.编译结果

此处采用直接终端输入make的方法进行编译,编译器输出如下:

arm-none-eabi-size build/LED.elf
   text    data     bss     dec     hex filename
   3692      20    1572    5284    14a4 build/LED.elf
arm-none-eabi-objcopy -O ihex build/LED.elf build/LED.hex
arm-none-eabi-objcopy -O binary -S build/LED.elf build/LED.bin

这种方式同时输出了elf、hex、bin文件,算是小优点,编译器没有输出编译时间,不知道是不是我没设置好的问题,后面再研究一下。
编译输出文件大小如下:
在这里插入图片描述

三、VScode+扩展市场的Keil Assistant插件表现

1.编译方式

该方法为我初次尝试,具体参考B站视频 BV1xU4y1G7Xz

2.编译结果

VScode编译器输出如下:

> D:\MDK5\UV4\UV4.exe -b c:\Users\PC\Desktop\LED\MDK-ARM\LED.uvprojx -j0 -t LED -o c:\Users\PC\Desktop\LED\MDK-ARM\.vscode\uv4.log

Build target 'LED'
compiling main.c...
linking...
Program Size: Code=2860 RO-data=352 RW-data=16 ZI-data=1632  
FromELF: creating hex file...
"LED\LED.axf" - 0 Error(s), 0 Warning(s).

这种方式直接调用了MDK原有的编译器,输出结果也完全一致,其次无法通过VScode调试有点不方便,但是这个方法是去使用VScode是最简单最快捷的一种方法,初学者建议此方法。

编译输出文件大小如下:
在这里插入图片描述

四、总结

测试使用三种方法编译同一段流水灯代码,横向对比结果如下:

方法产生文件编译速度
MDK.hex/.afx较快
VScode+OPENocd.hex/.bin/.elf一般(但是编译工具环境配置非常复杂)
VScode+Keil Assistant/hex/.afx较快

新手入门建议使用MDK进行学习、编译,扎扎实实学基础,MDK资料一抓一大把,各种问题前辈都出现过,抄一抄就能用。

第二种方法适用于版权问题以及大佬搞活,第二种方法建立于开源编译器之上,能够绕过MDK版权纠纷,但是工程配置繁琐,对编译器原理有基础要求,且产生代码优化较差。

入门后希望简单配置更换编译器推荐第三种方法就能快速体验上手VScode,体验生产力升级的快感。这种方法的缺点是还是需要使用MDK进行DEBUG,但是MDK和VScode是可以同时编译同一个工程的,可以无缝切换,非常的NICE。

举报

相关推荐

0 条评论