打印
[方案相关]

使用 GCC 编译器

[复制链接]
214|14
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
yutingwei|  楼主 | 2024-12-31 00:41 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
在使用 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。

使用特权

评论回复
5
yutingwei|  楼主 | 2024-12-31 00:41 | 只看该作者
GitHub 或开源社区:搜索相关的 GitHub 仓库,尤其是针对 HC32L196 这种 MCU 的开源项目。很多开源项目已经为 GCC 准备了适配的启动文件。你可以搜索例如 startup_hc32l196_gcc.s 或者 gcc startup hc32l196 等关键词。

使用特权

评论回复
6
yutingwei|  楼主 | 2024-12-31 00:42 | 只看该作者
手动修改现有的启动文件: 如果没有现成的 GCC 启动文件,你可以将 Keil 的启动文件修改为 GCC 兼容的格式。你需要将文件中的非 GCC 指令(如 dcd、extern、public 等)替换为 GCC 识别的指令。

使用特权

评论回复
7
yutingwei|  楼主 | 2024-12-31 00:42 | 只看该作者
举个例子:

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

使用特权

评论回复
8
yutingwei|  楼主 | 2024-12-31 00:42 | 只看该作者
示例修改:

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

使用特权

评论回复
9
yutingwei|  楼主 | 2024-12-31 00:43 | 只看该作者
使用 STM32 或其他类似架构的启动文件: 由于 HC32L196 和其他 ARM Cortex-M 系列芯片在启动过程中的要求类似,你也可以参考 STM32 或其他类似芯片的 GCC 启动文件。这些文件已经针对 GCC 进行了适配,可以作为一个参考模板。

使用特权

评论回复
10
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
// 其他中断向量

使用特权

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

使用特权

评论回复
12
yutingwei|  楼主 | 2024-12-31 00:43 | 只看该作者
可以手动修改启动文件,使其符合 GCC 的要求,或者使用适合 GCC 的启动文件。最好的方法是从 HC32L196 的官方支持库中找到适用于 GCC 的启动文件,或者修改现有文件,使其能够兼容 GCC 编译器。

使用特权

评论回复
13
yutingwei|  楼主 | 2024-12-31 00:43 | 只看该作者
总结
首选方案:尝试从官方或社区中找到适用于 GCC 的启动文件。
备选方案:手动修改现有的 Keil 启动文件,使其兼容 GCC 的语法和指令。

使用特权

评论回复
14
Amazingxixixi| | 2024-12-31 14:08 | 只看该作者
学习一下,

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

49

主题

408

帖子

0

粉丝