头图

1 AC6 之于 CLion

2 配置 progen

  • 1)progen(project generator)的基本安装使用可以参考上一篇文章《project generator 简单使用》,这里我们来快速完成准备工作。
  • 2)将 STM32F407VET6 的相关配置提供给 progen:

    • (1)使用 STM32CubeMX 随便生成一个名为 stm32f407,但主芯片要选择 STM32F407VET6
    • (2)找到 stm32f407 项目的 stm32f407.uvprojx 文件所在目录,打开命令行,输入以下命令:

      progendef create -m stm32f407vetx -t uvision5 -f stm32f407.uvprojx
    • (3)上述命令将在当前目录生成一个 stm32f407vetx.yaml 文件。打开该文件,将其中的 “Manually add core (cortex-mX) instead of this text” 内容替换成 STM32F407VET6 的 “cortex-m4”
    • (4)将 stm32f407vetx.yaml 文件复制到 <font color="red">%PYTHON\_HOME%\Lib\site-packages\project\_generator\_definitions\mcu\st\</font> 目录下
    • (5)对于其它厂商的芯片,只要他们提供基于 Keil 的 SDK,都可以通过这种方式来生成 progen 的 yaml 配置文件
  • 3)生成项目的模板配置:

    • (1)在上述提供的 demo-jlc_stm32f407_cic 和 demo-jlc_stm32f407_oop 两个项目的 /records/tools 目录下,有这些模板文件:

      • cmakelist_armclang.tmpl 模板文件:用于生成在 CLion 中使用 AC6 编译器的项目;
      • cmakelist_gccarm.tmpl 模板文件:用于生成在 CLion 中使用 arm GCC 编译器的项目。
      • uvision5_armc6.uvoptx.tmpl 模板文件:用于修改默认的 Keil5 uVision 项目配置(修改自上述的 stm32f407.uvprojx 文件)。
    • (2)选择自己所需的模板文件,这里为 cmakelist_armclang.tmpl,复制到 <font color="red">%PYTHON\_HOME%\Lib\site-packages\project\_generator\templates</font> 目录。(复制前记得备份,否则一旦出问题就需要重新安装 progen 了)
  • 4)AC6 之于 cmake 配置:

    • (1)AC6 之于 cmake 在 progen 中的工具名为 cmake_armclang,则:

        1. 生成项目时,-t 选项指定的工具名 cmake_armclang
        1. 配置代码的编译、汇编、链接选项时,要在 tool_specific.cmake_armclang.misc.xxx_flags 下
        1. 以上可参考代码的 /records/tools/armclang.yaml
    • (2)添加环境变量

3 可执行文件 size 显示优化

  • 1)AC6 的编译结果只提供了代码各个域的大小(如下),不够直观,所以由于 CMake 灵活的可定制化,这里将对结果进行优化显示(源码见上述第三个仓库),可配置展示为百分比或进度条(本来还想实现扇形,然而控制台效果不理想,可能需要用到图形库,遂放弃)。

    • 代码参考:OpenOCD 的参数解析与日志部分
    Program Size: Code=24796 RO-data=7524 RW-data=4 ZI-data=12404  
  • 2)使用说明:

    calcelf.exe -h
    
    calcelf(Calculate Executable file)
    Licensed under GNU GPL v2
          --help       | -h       display this help
          --version    | -v       display program version
          --debug      | -d       set debug level. available options:(-d3)
          --format     | -f       set format to print. available options:(percent, progbar)
          --map        | -m       set Keil5 uVision .map file <name>
          --scatter    | -s       set Keil5 uVision .sct file <name>
  • 3)配置:以在 CMake 中使用为例

    • 首先需要将 /KEIL_HOME/ARM/ARMCLANG/bin 目录添加到环境变量
    • 然后将 calcelf.exe 复制到上述目录,确保其可以在命令行访问到
    • 配置完成后,通过在命令行输入 “calcelf.exe -h” 来测试
    • 当然,如果不进行环境变量配置,也可以使用绝对路径
    • CMake 中的配置已经集成到 /records/tools/cmakelist_armclang.tmpl 文件末尾:

      # 8 Calculate Executable file
      add_custom_command(TARGET ${PROJECT_NAME} POST_BUILD
      COMMAND ${ARMCC_CALCELF} --format=progbar --map="${PROJECT_NAME}.elf.map" 
      --scatter="{{linker_file}}"
      )
  • 4)calcelf.exe 结果展示:

    // 默认输出为百分比
    calcelf.exe -m jlcsky031_blink.elf.map -s stm32f407.sct 
    
    Memory Region      Used Size    Region Size     %age Used
           RAM:         1640 B         128 KB         1.25%
         FLASH:         2976 B         512 KB         0.57%
    
    
    // 也可以输出进度条
    calcelf.exe -d0 -m jlcsky031_blink.elf.map -s stm32f407.sct -f progbar
    
    Total RW  Size (       RW Data + ZI Data)            1640 (   1.60 KB)
    Total ROM Size (Code + RW Data + RO Data)            2976 (   2.91 KB)
    
    [==--------------------------------------------------------------------------------------------------]   1.25%  RAM USED
    
    [=---------------------------------------------------------------------------------------------------]   0.57%  ROM USED

4 测试

  • 1)生成项目:

    progen generate -t cmake          -v -p jlcsky031_blink # 生成 CMake 项目
    progen generate -t cmake_armclang -v -p jlcsky031_blink # 生成 uVision5 项目
    progen generate -t uvision5_armc6 -v -p jlcsky031_blink # 生成 CMake AC6 项目

送南阳马生序
7 声望3 粉丝

余之业有不精、德有不成,非天质之卑,则心不若他之专耳,岂他人之过哉!