STC单片机Keil C51中C函数ROM定位教程:实现绝对地址设置

5星 · 超过95%的资源 需积分: 45 102 下载量 93 浏览量 更新于2024-09-26 收藏 245KB DOC 举报
在Keil C51中进行C语言编程时,特别是在STC单片机开发环境下,将特定函数定位到ROM(只读存储器)的特定地址是一项关键任务,这对于优化代码空间和提高程序效率至关重要。以下是一步步详细介绍如何实现这一功能: 1. **项目设置与源文件管理**: 首先,创建一个新的项目“Demo”,并将源文件“Demo.C”添加到项目中。这一步是基础,确保代码结构清晰,便于后续操作。 2. **编译与函数分析**: 编译项目并查看生成的“Demo.M51”文件。在这个过程中,会看到编译器已经自动生成了函数的链接名称(如“?PR?_READIAP?DEMO”)、链接地址和长度。例如,ReadIAP函数位于0x0003H,长度为16字节,这些信息是函数定位的基础数据。 3. **函数地址计算**: 根据每个函数的长度和目标地址范围,计算每个函数应该被重定位到的新地址。在这个例子中,ReadIAP被定位到0x8000,ProgramIAP到0x8016,EraseIAP到0x802C。 4. **使用BL51Locate属性页**: 在Keil的项目设置中,打开“BL51Locate”属性页,这是处理函数地址重定位的关键步骤。在“Code”域中,输入预定义的函数名及其对应的重定位地址,如`?PR?_READIAP?DEMO(0x8000)`等,这是告诉编译器按照这些地址来放置函数。 5. **重新编译与验证**: 点击确定后,重新编译项目。此时,Keil C51的编译器会根据指定的地址对函数进行调整。验证方法是再次打开“Demo.M51”文件,确认函数已成功定位到我们设定的地址,如图所示。 通过以上步骤,您就能有效地在Keil C51的C语言编程环境中,将函数以绝对地址的形式精确地定位到目标内存区域,从而更好地控制程序的空间布局和性能优化。务必注意,在使用这个方法时,要确保项目的配置正确,避免与其它代码冲突,并遵循Keil的官方指导和建议。