yutingwei 发表于 2024-12-31 00:41

使用 GCC 编译器

在使用 GCC 编译 HC32L196 时遇到的错误,主要是因为你正在使用的是 Keil 格式的启动文件(startup_hc32l19x.s),而这个文件使用了 IAR 或 Keil 风格的汇编指令和语法,GCC 无法正确识别这些指令。你提到的错误提示表明 GCC 无法识别文件中的某些指令,如版权声明和特定的汇编语法。

yutingwei 发表于 2024-12-31 00:41

问题分析
Keil 和 IAR 编译器使用了不同的汇编语法,与 GCC (GNU Assembler) 不兼容。你提到的启动文件包含了一些特定于 IAR 或 Keil 的指令,如:

dcd(用于定义数据)
module、extern、public等与 GCC 不兼容的关键字

yutingwei 发表于 2024-12-31 00:41

解决方法
为了使用 GCC 编译器,你需要一个适合 GCC 的启动文件。可以采取以下几种方法:

寻找合适的 GCC 启动文件: 最直接的做法是寻找适用于 GCC 的启动文件。这类文件通常包含针对 GCC 的汇编语法,能够正确初始化中断向量表、堆栈等硬件相关设置。

yutingwei 发表于 2024-12-31 00:41

你可以尝试以下途径来获取 GCC 版本的启动文件:

HC32L196 官方资源:访问华大半导体(HDSC)提供的资源或者开发者文档,查看是否有针对 GCC 编译器的启动文件。通常,芯片厂商会提供多种工具链的支持,包括 GCC。

yutingwei 发表于 2024-12-31 00:41

GitHub 或开源社区:搜索相关的 GitHub 仓库,尤其是针对 HC32L196 这种 MCU 的开源项目。很多开源项目已经为 GCC 准备了适配的启动文件。你可以搜索例如 startup_hc32l196_gcc.s 或者 gcc startup hc32l196 等关键词。

yutingwei 发表于 2024-12-31 00:42

手动修改现有的启动文件: 如果没有现成的 GCC 启动文件,你可以将 Keil 的启动文件修改为 GCC 兼容的格式。你需要将文件中的非 GCC 指令(如 dcd、extern、public 等)替换为 GCC 识别的指令。

yutingwei 发表于 2024-12-31 00:42

举个例子:

dcd -> .word:GCC 使用 .word 来定义一个 32 位的数据项。
section -> .section:GCC 使用 .section 来定义节(section)。
extern 和 public 需要改成 GCC 对应的声明方式。

yutingwei 发表于 2024-12-31 00:42

示例修改:

asm
复制代码
.section .intvec, "a"
.long Reset_Handler
.long NMI_Handler
.long HardFault_Handler
// 其他中断向量
你可以参考现有的 GCC 启动文件(如 startup_stm32.s)的格式来修改这个文件。

yutingwei 发表于 2024-12-31 00:43

使用 STM32 或其他类似架构的启动文件: 由于 HC32L196 和其他 ARM Cortex-M 系列芯片在启动过程中的要求类似,你也可以参考 STM32 或其他类似芯片的 GCC 启动文件。这些文件已经针对 GCC 进行了适配,可以作为一个参考模板。

yutingwei 发表于 2024-12-31 00:43

例如,STM32 的启动文件通常包含以下结构:

asm
复制代码
.global __main
.global __stack_end
.global Reset_Handler
.section .isr_vector, "a", %progbits
.long __stack_end
.long Reset_Handler
.long NMI_Handler
.long HardFault_Handler
// 其他中断向量

yutingwei 发表于 2024-12-31 00:43

使用标准的 GCC 启动文件: 如果你能够访问到 GNU 工具链,可以查看 /lib/gcc/arm-none-eabi/<version>/ 目录下是否有针对你的 MCU 相关的启动文件。在某些情况下,GCC 会为特定架构提供标准的启动文件,适用于大多数 Cortex-M 系列芯片。

yutingwei 发表于 2024-12-31 00:43

可以手动修改启动文件,使其符合 GCC 的要求,或者使用适合 GCC 的启动文件。最好的方法是从 HC32L196 的官方支持库中找到适用于 GCC 的启动文件,或者修改现有文件,使其能够兼容 GCC 编译器。

yutingwei 发表于 2024-12-31 00:43

总结
首选方案:尝试从官方或社区中找到适用于 GCC 的启动文件。
备选方案:手动修改现有的 Keil 启动文件,使其兼容 GCC 的语法和指令。

Amazingxixixi 发表于 2024-12-31 14:08

学习一下,
页: [1]
查看完整版本: 使用 GCC 编译器