ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

[Nimmake04] nimmake 高级用法及例子

[Nimmake04] nimmake 高级用法及例子 高级用法本文档介绍 Nimmake 在各种场景下的构建示例涵盖 PC 程序、ARM32 MCU、RISC-V MCU 等不同平台和工具链。1. 构建 PC 程序Nimmake 不仅可以用于嵌入式 MCU 开发也可以构建普通的 PC 端可执行程序。示例请参考samples\02_win_exe目录。在该目录下执行nimmake将生成test.exe文件。Nimmake.py 核心示例fromnimmake.HelperimportHelper hlpHelper()hlp.Refresh()srcs[main.c]thlp.Program(test,sourcessrcs)hlp.DefaultTarget(t)PC 程序构建时工具链默认使用系统 PATH 中的gcc无需额外配置工具链路径和芯片参数。2. 使用 arm-none-eabi-gcc 构建 ARM32 MCU 程序2.1 下载工具链从 xpack arm gcc 下载 arm-none-eabi-gcc 工具链。2.2 示例目录示例目录说明samples\03_stm32_led_regSTM32 寄存器级编程最简 MCU 构建示例samples\04_arm32_led_cmsis基于 CMSIS 的 ARM32 构建示例samples\05_arm32ARM32 通用构建包含完整工程结构samples\06_arm32_libARM32 静态库构建示例在每个示例目录下执行nimmake将生成test.elf文件。2.3 核心配置fromnimmake.datasetsimportCORTEX_M4_CFGfromnimmake.HelperimportHelper hlpHelper()toolpath_armgccrD:\LLVM\arm-none-eabi-gcc14\bintoolgccprefixarm-none-eabi-CFGCORTEX_M4_CFG.clone()hlp.Config(CFG)hlp.Update({TOOLPATH:toolpath_armgcc,TOOL:tool,TOOL_PREFIX:prefix,})hlp.Refresh()srcs[main.c]thlp.Program(test,sourcessrcs)hlp.DefaultTarget(t)3. 使用 clang 构建 ARM32 MCU 程序3.1 下载工具链从 arm llvm toolchain 下载 ARM LLVM 嵌入式工具链。3.2 示例请参考samples\09_arm_llvm目录。3.3 核心配置fromnimmake.datasetsimportCORTEX_M4_CFGfromnimmake.HelperimportHelper hlpHelper()toolpath_clangrD:\LLVM\arm-llvm\bintoolclangprefixCFGCORTEX_M4_CFG.clone()hlp.Config(CFG)hlp.Update({TOOLPATH:toolpath_clang,TOOL:tool,TOOL_PREFIX:prefix,})hlp.Refresh()srcs[main.c]thlp.Program(test,sourcessrcs)hlp.DefaultTarget(t)与 GCC 工具链的主要区别在于TOOL设置为clang且TOOL_PREFIX为空字符串。4. 使用 arm-none-eabi-gcc 构建 RISC-V MCU 程序4.1 下载工具链从 xpack riscv 下载 RISC-V 工具链。4.2 示例目录示例目录说明samples\07_riscv32RISC-V 32 位 MCU 构建示例samples\08_riscv64RISC-V 64 位 MCU 构建示例4.3 核心配置fromnimmake.datasetsimportRV32_CFGfromnimmake.HelperimportHelper hlpHelper()toolpath_riscvrD:\LLVM\riscv-gcc\bintoolgccprefixriscv32-unknown-elf-CFGRV32_CFG.clone()hlp.Config(CFG)hlp.Update({TOOLPATH:toolpath_riscv,TOOL:tool,TOOL_PREFIX:prefix,})hlp.Refresh()srcs[main.c]thlp.Program(test,sourcessrcs)hlp.DefaultTarget(t)RISC-V 64 位构建时将RV32_CFG替换为RV64_CFG并将TOOL_PREFIX改为riscv64-unknown-elf-即可。5. 多工具链快速切换在实际开发中可能需要在不同工具链之间切换。建议将所有工具链配置集中管理fromnimmake.datasetsimportCORTEX_M4_CFG,RV32_CFGfromnimmake.HelperimportHelper# 工具链配置字典TOOLCHAINS{armgcc:{TOOLPATH:rD:\LLVM\arm-none-eabi-gcc14\bin,TOOL:gcc,TOOL_PREFIX:arm-none-eabi-,},clang:{TOOLPATH:rD:\LLVM\arm-llvm\bin,TOOL:clang,TOOL_PREFIX:,},riscv32:{TOOLPATH:rD:\LLVM\riscv-gcc\bin,TOOL:gcc,TOOL_PREFIX:riscv32-unknown-elf-,},}# 芯片配置字典CHIPS{arm32:CORTEX_M4_CFG.clone(),riscv32:RV32_CFG.clone(),}hlpHelper()# 选择芯片和工具链hlp.Config(CHIPS[arm32])hlp.Update(TOOLCHAINS[armgcc])hlp.Refresh()通过这种方式只需修改hlp.Config()和hlp.Update()的参数即可快速切换芯片和工具链组合。
返回列表