1、STC 单片机 Keil 中 C 语言函数定位的方法下面以演示程序进行说明演示程序中有 ReadIAP、ProgramIAP 和 EraseIAP 三个函数最终目的是将这三个函数都定位到 0x8000 之后第一步:新建一个项目“Demo” ,并将源文件“Demo.C”添加到项目中第二步:直接编译,并打开编译后生成的“Demo.M51 ”文件从 M51 文件的“CODE MEMORY”信息中,可以看到 3 个函数的链接名称、链接地址和函数长度ReadIAP 的链接名称为“?PR?_READIAP?DEMO” ,链接地址为“0003H ”,长度为 16H 字节ProgramIAP 的链接名称为 “
2、?PR?_PROGRAMIAP?DEMO”,链接地址为“0019H” ,长度为 16H 字节EraseIAP 的链接名称为“?PR?_ERASEIAP?DEMO ”,链接地址为“0044H ”,长度为 14H 字节第三步:根据 M51 中函数的长度信息计算出各个函数重定位的地址,ReadIAP 的重定位的地址为 0x8000ProgramIAP 的重定位的地址为 0x8016EraseIAP 的重定位的地址为 0x802C第四步:打开项目选项中的“BL51 Locate”属性页在上图的“Code”域中输入下列语句“?PR?_READIAP?DEMO(0x8000), ?PR?_PROGRAMIAP?DEMO(0x8016), ?PR?_ERASEIAP?DEMO(0x802C)”第五步:点击确定按钮,并重新编译即可,此时可以重新打开“Demo.M51”文件,便可发现 3 个函数已被重定位到我们所指定的地址了,如下图