首页 » 科学 » 若何将函数或变量存储到特定区域?一分钟从菜鸟到大年夜师_区域_函数

若何将函数或变量存储到特定区域?一分钟从菜鸟到大年夜师_区域_函数

雨夜梧桐 2025-01-05 19:41:35 0

扫一扫用手机浏览

文章目录 [+]

在嵌入式系统开拓过程中,常常须要把一些变量、函数放到特定地址或代码区域。
比如,写bootloader固件时,就须要把Flash的读写函数放到RAM中,这样才有可能对Bootloader本身固件进行更新。
再比如,有些单片机内部有多块RAM,分布在不同地址段,这种情形下,我们可以将部分程序或数据放置在特定RAM,在单片机不断电复位之后,这些数据仍旧保持,这种情形我往后再细讲。

下面我先容几种常用的指定变量或函数到特定存储位置的方法。

若何将函数或变量存储到特定区域?一分钟从菜鸟到大年夜师_区域_函数 若何将函数或变量存储到特定区域?一分钟从菜鸟到大年夜师_区域_函数 科学

1.利用section域

要用section,须要按下面的方法定义变量和函数,并且利用自定义存储分布文件scatter file.实在不须要自己重新写,在默认的文件上改动即可。
以Keil及STM303VTX芯片为例(由于我手头有这个开拓板,方便测试~~)。

若何将函数或变量存储到特定区域?一分钟从菜鸟到大年夜师_区域_函数 若何将函数或变量存储到特定区域?一分钟从菜鸟到大年夜师_区域_函数 科学
(图片来自网络侵删)

借助CubeMAX建立一个基于STM303VTX的工程,用Keil打开。
定义一个函数和变量到特自定义区域mySection。

int func(void) __attribute__((section(\"大众mySection\"大众)));int var __attribute__((section(\"大众mySection\公众)));

点开配置工具。
这个电影有两块内存区,默认只选中了一块。
在Linker页面下,取消勾选Use Memory Layout from Target Dialog,就可以打开默认的分布文件了。

打开默认scatter file

按图操作后,打开的默认的分布文件如下:

;只读存储区域LR_IROM1 0x08000000 0x00040000 { ER_IROM1 0x08000000 0x00040000 { .o (RESET, +First) (InRoot$$Sections) .ANY (+RO);所有的只读代码 };RAM区域 RW_IRAM1 0x20000000 0x0000A000 { .ANY (+RW +ZI) (mySection);自定义代码区域 }}

把mySection区域加到RAM地址空间后,经由编译后我们定义的var、func函数就会在内存之中。

2.利用at来指定详细位置

(1)将变量放到指定位置,可如下定义(这个不须要利用自定义scatter file)

int var __attribute__((at(0x0x20009000)));

(2)将函数放到特定位置,要轻微繁芜一点,须要利用自定义scatter file。
首先定义函数,并指定一区域名。

__attribute__((section(\公众MyFunc\"大众)))void MyCode(void) {SystemClock_Config();}

如果让函数MyCode()的起始地址位于0x20009000的RAM区域,须要修正分布文件如下:

;只读存储区域LR_IROM1 0x08000000 0x00040000 { ER_IROM1 0x08000000 0x00040000 { .o (RESET, +First) (InRoot$$Sections) .ANY (+RO);所有的只读代码 };RAM区域1 RW_IRAM1 0x20000000 0x00009000 { .ANY (+RW +ZI) };分割出来的区域要不同名称 RW_IRAM2 0x20009000 0x0000A000 { (MyFunc);自定义代码区域 }}

正由于要分割区域,为了简化设置过程,一样平常把自定义区域放到RAM的末了位置。

3.设置文件到特定存储区域

这个方法最大略!
把以是要放到RAM中的变量函数全部放在同一个c文件中,在该文件上点右键。
选择第一个Options for xxx.c,在弹出的对话框里,选择目标区域即可。

存放文件代码到特定区域

关于Scatter file的详细解释,请参考 《如何将函数或变量存储到特定区域?大师前传--细说Scatter file

一些文件的收藏量达到了500以上,解释对大家有些帮助,花这么多韶光整理写作也值了!

所有文章都是自己实践履历的总结,欢迎批评示正,感激关注。

标签:

相关文章

好未来,教育科技领军者的未来之路

在当今教育行业,好未来(TAL Education Group)无疑是一家备受瞩目的领军企业。自成立以来,好未来始终秉持着“让每个...

科学 2025-01-07 阅读0 评论0

奶妈源代码,介绍亲子关系中的智能陪伴

在当今社会,随着科技的发展,人工智能逐渐渗透到生活的方方面面。其中,亲子关系中的智能陪伴成为了越来越多人关注的焦点。奶妈源代码作为...

科学 2025-01-07 阅读0 评论0