找回密码
 立即注册
查看: 58|回复: 2

STC32G12K128

[复制链接]
已绑定手机

1

主题

0

回帖

5

积分

新手上路

积分
5
发表于 昨天 17:04 | 显示全部楼层 |阅读模式
STC32G12K128使用STC网页版的IDE编译 报错是什么问题
656e5c01-9724-4914-ac10-ba760b813177.png
回复

使用道具 举报 送花

14

主题

1442

回帖

8016

积分

论坛元老

积分
8016
发表于 昨天 17:33 | 显示全部楼层

一、报错本质

HEX 段重叠: 0xFF7A22 (flashseg:auto__str6) 与 0xFF7A22 (flashseg:auto__str0) 重叠

这两条都是链接器(C251 的 LX51)在最后生成 hex 阶段报出的段地址冲突:

  • flashseg:auto__strN 是编译器为每个 .c 文件里的字符串常量自动生成的常量段(编号 N 按文件顺序分配)。
  • 两个不同的段被分配到同一个绝对地址 0xFF7A22,因此互相覆盖。

请注意地址 0xFF7A22——它已经超出 16 位(0x10000)范围,是 24 位地址。STC32G12K128 的 Flash 只有 128K,最大合法线性地址是 0x01FFFF。链接器跑到 0xFF7A22,说明它把一个超出芯片真实容量的地址空间当作可用 ROM 来分配了。

二、最可能的原因(按可能性排序)

原因1:ROM 范围设置超出芯片实际容量(最常见)

这是网页版 IDE 最容易出问题的地方。网页 IDE 如果沿用某个模板工程,Code Rom Size 或 ROM 起止地址可能设成 16M(0x000000–0xFFFFFF)范围,链接器便按 16M 来铺段,出现 0xFF7A22 这类地址,而两个段恰好撞在一起。

STC32G12K128 的 Flash 是 128K,ROM 范围必须限制在 0x000000–0x01FFFF。

原因2:代码+常量真的超过了 128K

如果工程确实塞满了 string 常量、大 code 表格,实际占用接近或超过 128K,链接器在越界后地址计算会乱,表现为段重叠。

原因3:网页 IDE 的器件/编译模式选错

网页版 IDE 若器件选了 **STC32G144K246(256K)**或别的更大 Flash 型号,而实际烧的是 12K128(128K),链接器按 256K 布局,也会产生 0xFFxxxx 地址。

原因4:工程里重复加入源文件或重复字符串段

Project 里同一个 .c 被加两次(或同时加了 .c 与 .obj),同一批字符串常量段被链接两次,极易出现 auto__str6 与 auto__str0 同址。

三、排查与解决步骤

  1. 核对器件型号:确认工程里选的芯片就是 STC32G12K128,不是 144K246 或其他大容量型号。
  2. 核对 ROM 范围:把 CODE 范围限制在 0x000000–0x01FFFF(128K)。网页 IDE 里通常在“器件/编译选项”或“链接设置”处,若无法直接改,检查是否用的是 STC 官方针对 STC32G12K128 的模板工程。
  3. 看编译输出 Program Size:code 行数值若接近 131072(128K),说明真的超容量,需要精简代码/字符串,或换更大 Flash 的型号。
  4. 检查工程文件列表:确认没有重复添加的 .c / .obj / .lib。
  5. 清理重建:网页 IDE 一般有“清理/重新编译”按钮,先清全部中间产物再编译,排除旧的 .obj 残留。

四、需要您补充的信息

要精确定位,请提供:

  1. 网页 IDE 里选择的器件型号;
  2. 编译输出中的 Program Size 各行(code / const / data / xdata);
  3. 工程是否用了 STC 官方 STC32G12K128 模板,还是自建/沿用其他工程;
  4. 报错是在改代码之后才出现,还是一开始就有。

五、说明

这段报错属于 Keil C251 链接器(LX51)的段分配问题,STC 手册未涉及链接器段布局的说明。上面关于“地址超 128K 说明 ROM 范围设置过大”的判断,是基于报错地址 0xFF7A22 超出 STC32G12K128 的 128K Flash 容量这一事实推出的;芯片 Flash 容量请以 STC32G 系列选型表为准。若您能提供上面四项信息,我可以进一步确认是设置问题还是容量真超。


🔍 搜索 "STC32G12K128 STC网页版IDE HEX段重叠 编译报错"

📌 相关论坛讨论

  1. STC32G12K128
  2. IAP_04_移植过程中关于中断向量表的问题
  3. 自研C语言编译器发布,STC IDE —— 面向 STC32系列及 AI8051U的C语言编译器,11/7更新

⏱️ 查找用时 0.4s | 总回答用时 6.2s

回复

使用道具 举报 送花

已绑定手机
已实名认证

148

主题

4104

回帖

1万

积分

超级版主

积分
11138
发表于 昨天 22:15 | 显示全部楼层

这个问题我们已复现并修复:报错里的 flashseg:auto__strN 是本网页版 IDE 自己生成的段名,不是 Keil 链接器的报错,也不是工程超出 128K。实际原因是编译器的一个缺陷——没有被调用的 static 函数里的字符串常量会残留在共享常量表里,导致后续仍在使用的字符串常量被分到同一个地址,于是编译时误报「HEX 段重叠」。修复会随下个版本更新;在更新之前,把工程里那个没有被调用的 static 函数删掉、或者调用它一次,就可以正常编译通过。感谢反馈!

回复

使用道具 举报 送花

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|手机版|深圳国芯人工智能有限公司 ( 粤ICP备2022108929号-2 )

GMT+8, 2026-11-14 09:00 , Processed in 0.072301 second(s), 60 queries .

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

快速回复 返回顶部 返回列表