美文网首页优秀文章收录
如何在 Keil 中将函数或变量编译到指定地址 2021-10-

如何在 Keil 中将函数或变量编译到指定地址 2021-10-

作者: 宜居远控 | 来源:发表于2021-10-28 08:38 被阅读0次

方式一: attribute 属性

1,将函数加载到指定位置

示例将 main.c 中的 delay 函数指定到 0x08020000 地址,可以在 c 文件中函数的定义处指定 delay 函数。

void delay(void) __attribute__ ((section(".ARM.__at_0x08020000")));

2,将数组加载到指定位置

int Temp[] __attribute__ ((section(".ARM.__at_0x08020000"))) = {0x1, 0x2};

3,将变量加载到指定位置

示例可以直接将 c 代码修改如下:

const int Temp __attribute__ ((section(".ARM.__at_0x08020000"))) = 10; // RO

int Temp __attribute__ ((section(".ARM.__at_0x20000000"))) = 10; // RW

方式二: 修改.sct 文件

将目标文件加载到指定位置,在 Keil 中使用修改.sct 文件进行分散加载需要对工程配置进行如下修改,修

改.sct 方法的详细使用请参考.sct 的语法规则,如下图 Keil 下 sct 文件编辑

其中 Use Memory Layout from Target Dialog 选项是默认勾选,应取消选择。点击 Scatter File 栏后的 Edit

对.sct 文件进行编辑。

示例将 core_main.c 的目标文件进行分散加载。


; *************************************************************

; *** Scatter-Loading Description File generated by uVision ***

; *************************************************************

LR_IROM1 0x08000000 0x00020000 { ; load region size_region

ER_IROM1 0x08000000 0x00020000 { ; load address = execution address

*.o (RESET, +First)

*(InRoot$$Sections)

.ANY (+RO)

}

RW_IRAM1 0x20000000 0x00038000 { ; RW data

.ANY (+RW +ZI)

}

}

LR_IROM2 0x08020000 0x00020000 { ; load region size_region

ER_IROM2 0x08020000 0x00020000 { ; load address = execution address

core_main.o (+RO)

}

}

红色区域表示将以上.c 文件加载到 0x08020000 地址,大小为 0x00020000。在这里,其目的通俗来说就是将以

上.c 文件编译生成的目标文件链接到 MCU 芯片内部 flash 的 128KB 区域之后,区域大小为 128KB。

类型:开发工具

适用型号:适用所有 MCU 型号

相关文章

  • 如何在 Keil 中将函数或变量编译到指定地址 2021-10-

    方式一: attribute 属性 1,将函数加载到指定位置 示例将 main.c 中的 delay 函数指定到 ...

  • 2020-05-09OS

    逻辑地址的建立--逻辑地址到物理地址的转换 建立:c程序里的函数、变量名(逻辑地址)-(编译)-.s文件-(汇编)...

  • Function pointers

    用函数指针变量调用函数 指针变量可以指向一个函数。一个函数在编译时被分配一个入口地址。这个函数入口地址就成为函数的...

  • bugku web8

    extract() 函数从数组中将变量导入到当前的符号表。 empty()函数是用来测试变量是否已经配置。若变量已...

  • (三十六)函数指针与回调机制

    函数指针 不只变量有地址,函数也有地址 每个函数在编译后都对应一串指令,这些指令在内存中的位置就是函数的地址 我们...

  • 命名空间

    防止函数名或变量名相同而导致编译器无法知道要编译哪个的时候,使用命名空间来增加相同函数名或变量名的标识。 使用关键...

  • OC中遇到的关键字

    extern :可置于变量或者函数前,以表示变量或者函数的定义在别的文件中。提示编译器遇到此变量或函数时,在其它模...

  • 智能合约语言 Solidity基本类型介绍

    类型 Solidity是一种静态类型语言,意味着每个变量(本地或状态变量)需要在编译时指定变量的类型(或至少可以推...

  • Kotlin 开发Android (三):基本语法

    变量 1.常量 2.变量 3.可为空的变量 4.可以不指定类型 5.静态变量 函数 1.定义函数(或方法) 2.定...

  • C语言格式输入函数scanf()详解

    scanf函数称为格式输入函数,即按用户指定的格式从键盘上把数据输入到指定的变量之中。 scanf函数的一般形式 ...

网友评论

    本文标题:如何在 Keil 中将函数或变量编译到指定地址 2021-10-

    本文链接:https://www.haomeiwen.com/subject/lmwmaltx.html