随心~ 发表于 2026-7-4 09:06:18

STC32G C251编译器 keil error L256 :UNKOWN,大佬救命;

".\Objects\crc.obj",
".\Objects\formulas.obj",
".\Objects\pid.obj"
TO ".\Objects\project"
CODE(".\Listings\project.cod")
PRINT(".\Listings\project.map") CASE
CLASSES (EDATA (0x0-0xFFF),
HDATA (0x0-0xFFF))
*** ERROR L256: UNKNOWN
Target not created.
Build Time Elapsed:00:00:01

求助各位大佬,这个报错怎么解决呢。

狂热主宰 发表于 2026-7-4 09:23:57

CLASSES (EDATA (0x0-0xFFF)
HDATA (0x0-0xFFF))
地址重复

狂热主宰 发表于 2026-7-4 09:28:31

CLASSES (EDATA (0x0-0x3FF),
         HDATA (0x400-0xFFF))

尝试这样指定

soma 发表于 2026-7-4 17:24:55

如图

神农鼎 发表于 2026-7-7 16:28:32


神农鼎 发表于 2026-7-7 16:28:50

<p>好的,这个帖子的问题我已经看清楚了。下面我来为你分析这个 <strong>Keil C251 编译器 error L256: UNKNOWN</strong> 错误。</p>
<hr />
<h2>问题分析</h2>
<p>从你的链接帖子和报错信息来看,问题出在 <strong>Linker(链接器)的 CLASSES 配置</strong>上。</p>
<p>你的链接器配置中写了:</p>
<pre><code>CLASSES (EDATA (0x0-0xFFF),
         HDATA (0x0-0xFFF))
</code></pre>
<p><strong>EDATA</strong> 和 <strong>HDATA</strong> 的地址范围都指定为 <code>0x0-0xFFF</code>,<strong>地址完全重叠</strong>,链接器无法区分,因此报 <code>L256: UNKNOWN</code>。</p>
<hr />
<h2>解决方案</h2>
<p>如论坛中 <strong>狂热</strong>* 的回复所述,需要将 EDATA 和 HDATA 的地址范围<strong>错开</strong>,例如:</p>
<pre><code>CLASSES (EDATA (0x0-0x3FF),
         HDATA (0x400-0xFFF))
</code></pre>
<p>这样:</p>
<ul>
<li><strong>EDATA</strong>(内部直接寻址 RAM + 扩展 RAM 低端)占用 <code>0x000 ~ 0x3FF</code></li>
<li><strong>HDATA</strong>(扩展 RAM 高端)占用 <code>0x400 ~ 0xFFF</code></li>
</ul>
<p>两者不重叠,链接即可通过。</p>
<hr />
<h2>补充说明</h2>
<table>
<thead>
<tr>
<th>段名</th>
<th>含义</th>
<th>典型范围</th>
</tr>
</thead>
<tbody>
<tr>
<td><strong>EDATA</strong></td>
<td>内部可直接/间接寻址的 RAM(含 SFR 和 IDATA)</td>
<td>通常 <code>0x000~0x3FF</code>(1KB)</td>
</tr>
<tr>
<td><strong>HDATA</strong></td>
<td>扩展 RAM(XDATA 的一部分)</td>
<td>通常 <code>0x400~0xFFFF</code></td>
</tr>
</tbody>
</table>
<p>对于 <strong>STC32G 系列</strong>,内部 RAM 通常为 4KB(<code>0x0000~0x0FFF</code>),但 EDATA 一般只分配前 1KB(<code>0x000~0x3FF</code>),剩余的 <code>0x400~0xFFF</code> 给 HDATA 使用,这样既合理又不会冲突。</p>
<hr />
<h2>操作步骤</h2>
<ol>
<li>在 Keil C251 工程中,打开 <strong>Options for Target → Target</strong> 页面。</li>
<li>找到 <strong>Memory Model</strong> 或 <strong>Off-chip XDATA / HDATA</strong> 相关设置。</li>
<li>或者在 <strong>Linker → Misc controls</strong> 中手动写入正确的 CLASSES 语句:</li>
</ol>
<pre><code>CLASSES (EDATA (0x0-0x3FF), HDATA (0x400-0xFFF))
</code></pre>
<ol start="4">
<li>重新编译即可。</li>
</ol>
<hr />
<p>如果问题仍然存在,请检查你的工程中是否还有其他自定义的链接脚本(.lin 或 .sct 文件)覆盖了默认配置,或者贴出完整的链接器命令行参数,我可以进一步帮你排查。</p>
<hr />
<p><a href="https://www.stcaimcu.com/plugin.php?id=twpx_xunsearch&amp;mod=forum&amp;q=STC%20%E5%8D%95%E7%89%87%E6%9C%BA%20%E4%B8%8B%E8%BD%BD%20%E7%83%A7%E5%BD%95%20Keil&amp;f=_all&amp;m=yes&amp;syn=yes&amp;s=relevance&amp;fid=0">🔍 搜索 &quot;STC 单片机 下载 烧录 Keil&quot;</a></p>
<p>⏱️ 查找用时 3.3s | 总回答用时 10.6s</p>
页: [1]
查看完整版本: STC32G C251编译器 keil error L256 :UNKOWN,大佬救命;