找回密码
 立即注册
查看: 95|回复: 3

STC32G144K246, 程序空间超过64K字节,KEIL C251 编译器如何设置

[复制链接]
  • 打卡等级:以坛为家II
  • 打卡总天数:467
  • 最近打卡:2026-07-21 09:31:46

851

主题

1万

回帖

2万

积分

管理员

积分
24394
发表于 2026-7-8 10:34:06 | 显示全部楼层 |阅读模式
STC32G144K246, 程序空间超过64K字节,KEIL C251 编译器如何设置


截图202607081035004362.jpg
回复

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:467
  • 最近打卡:2026-07-21 09:31:46

851

主题

1万

回帖

2万

积分

管理员

积分
24394
发表于 2026-7-8 10:35:29 | 显示全部楼层

根据 STC32G144K246 手册(第12章 "i-Cache,存储器")以及 Keil C251 编译器的特性,以下是完整的设置说明。


STC32G144K246 程序空间超过64KB的 Keil C251 设置方法

1. 芯片存储器概况

STC32G144K246 的 Flash 程序存储器为 246K 字节,地址范围从 FC:2800HFF:FFFFH,其中:

区域 地址范围 说明
代码区(code) FF:0000H ~ FF:FFFFH 64KB,复位入口在 FF:0000H
扩展代码区(ecode) FC:2800H ~ FE:FFFFH 超过64KB的扩展代码空间

(来源:STC32G144K246 手册第12章 "i-Cache,存储器")

2. Keil C251 编译器设置步骤

Keil C251 编译器支持 Huge 存储器模式,可以生成超过64KB地址空间的代码。具体设置如下:

步骤一:选择正确的芯片型号

在 Keil 工程中,Device 选择 STC32G144K246 系列(或对应的 STC32G 系列型号),Keil C251 会自动识别其存储器映射。

步骤二:设置 Memory Model 为 Huge

在 Keil 中操作:

  1. 点击菜单栏 Project → Options for Target 'Target 1'...(或直接点击工具栏的魔术棒图标)
  2. 切换到 Target 选项卡
  3. Memory Model 下拉框中,选择 Huge
  4. Code Rom Size 下拉框中,选择 Huge: 64K program or less(注意:这里虽然写"64K program or less",但配合 Huge Memory Model 后,编译器会使用 3 字节/4 字节指针访问超过 64KB 的代码空间)

说明:Huge 模式下,函数调用默认使用 24 位(3字节)或 32 位地址,可以访问整个 246KB 程序空间。

步骤三:代码分区(可选,用于精细控制)

如果希望将特定函数或变量放在指定地址区域,可以使用 _at_ 关键字或修改链接脚本(L51_BANK.A51 或类似的分区文件)。但对于大多数应用,直接使用 Huge 模式即可自动管理超过 64KB 的代码。

步骤四:使用 far 关键字(必要时)

对于某些需要显式指定为远地址访问的变量或函数指针,可以使用 C251 的扩展关键字:

char far code_array[100];   // 放在扩展代码区
void far func(void);        // 远函数

3. 编译器命令行等效设置

如果通过命令行或 Makefile 构建,对应的编译选项为:

C251.exe 源文件.c  MODE HUGE  ROM HUGE

4. 注意事项

  • STC32G 系列是 32 位 8051 内核,必须使用 Keil C251 编译器(不是 Keil C51)。C51 只能生成 64KB 以内的代码。
  • 在 Huge 模式下,代码执行效率会略有降低(因为地址计算更复杂),但这是访问超过 64KB 程序空间的必要代价。
  • STC32G144K246 带有 i-Cache(指令缓存),可以有效缓解大容量 Flash 的读取延迟,手册第12章有详细说明。
  • 官方例程包(如实验箱演示程序)中已经默认配置为 Huge 模式,可以直接参考其工程设置。

5. 快速检查清单

项目 正确设置
编译器 Keil C251(不是 C51)
Device 型号 STC32G144K246 或对应型号
Memory Model Huge
Code Rom Size Huge: 64K program or less
操作系统 无特殊要求

如果按照上述设置后仍然遇到编译错误(如 OUT OF MEMORYSEGMENT TOO LARGE),请检查是否有个别模块未正确设置为 Huge 模式,或需要进一步使用代码分区(banking)技术。欢迎提供具体的编译错误信息,我可以进一步协助排查。


🔍 搜索 "STC32G144K246 程序空间超过64K字节 KEIL C251 编译器如何设置"

📌 相关论坛讨论

  1. 17-USB-CDC-简单的收发测试,STC32G144K246实验箱演示程序
  2. #打卡学习贴 记录32g12k的学习研究过程
  3. STC32G144K246-128K-RAM使用注意使用far关键字

⏱️ 查找用时 23.5s | 总回答用时 34.4s

回复

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:467
  • 最近打卡:2026-07-21 09:31:46

851

主题

1万

回帖

2万

积分

管理员

积分
24394
发表于 2026-7-8 10:36:54 | 显示全部楼层
截图202607081037558801.jpg

截图202607081036347198.jpg
回复

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:467
  • 最近打卡:2026-07-21 09:31:46

851

主题

1万

回帖

2万

积分

管理员

积分
24394
发表于 2026-7-8 10:39:08 | 显示全部楼层
截图202607081038445767.jpg


截图202607081039056984.jpg
回复

使用道具 举报 送花

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

本版积分规则

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

GMT+8, 2026-7-22 09:19 , Processed in 0.070465 second(s), 56 queries .

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

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