请选择 进入手机版 | 继续访问电脑版
查看: 1579|回复: 0

[原创] MCUXpresso IDE: 如何将数据、函数与文件存入指定位置

[复制链接]

该用户从未签到

648

主题

6301

帖子

0

超级版主

Rank: 8Rank: 8

积分
19553
最后登录
2024-3-29
发表于 2021-6-20 17:05:07 | 显示全部楼层 |阅读模式
       在进行MCU开发时,根据实际需要,将数据、函数与文件存入指定位置,对合理使用存储器的十分重要。经常有客户问如何将某一数据、函数或文件存入指定的地址空间,结合客户的问题,本文主要对此进行讲解。
1.    构建工程后代码与数据的默认存放位置
以LPC54628中helloworld例程为例,开发环境:MCUXpresso IDE。
build后,内存分配如以下console窗口所示:
      1.PNG
其中.text,.data,.bss,.dec与Flash,RAM的关系如下所示:
      2.PNG
2.    自定义Flash与RAM分区
为了将某一数据、函数或文件存入指定的地址空间,我们先要自定义分区。
打开工程属性设置界面,在MCUsettings选项中分区出MY_FLASH与MY_RAM两个区用于测试,可以自定义这两个区的大小,如下所示:
       3.png
配置完Flash与RAM之后,点击Apply and Close后会在工程栏看到我们分区出来的Flash2和RAM2,如下所示:
      4.PNG
3.    数据存入指定位置
1) 变量与常量默认存放位置
我们先查看变量和数组的默认位置。 例如:
初始化过的变量:uint16_t value1 = 1;
未初始化的数组:chardata_buffer1[1024];
常量数组:          const chardata_buffer2[1024] = "hello nxp";
使用MCUXpressoIDE自带的Image Info窗口来查看数组存放位置:
      5.png
       可读写变量和数组默认存放在名为“SRAM_UPPER”的RAM(0x20000000-0x20014000)中,const类型的数组存放在名为“PROGRAM_FLASH”的Flash(0x0-0x40000)中。
2) 将指定的变量与常量存入指定位置
将数组存入自定义的Flash与RAM中,需要调用C语言中的
__attribute__ ((section(#type#bank)))
例如 将数据放入Flash2的 .text中
__attribute__ ((section("text_Flash2" ".$Flash2"))) + 数据声明
官方已封装并定义到cr_section_macros.h中,__DATA(RAM2)将可读写数组放入RAM2的.data段,__RODATA(Flash2)指将只读数组放入Flash2的 .rodata段,即:
__DATA(RAM2) chardata_buffer3[1024];
__RODATA(Flash2) const chardata_buffer4[1024] = "hello nxp";
注意使用时要先#include "cr_section_macros.h".
      6.PNG
       全局变量和数组存放在名为“MY_RAM”的自定义RAM2(0x20014000-0x20028000)中,只读的const类型数组存放在名为“MY_FLASH”的自定义Flash2(0x40000-0x80000)中。
4.    function存入指定位置
1) function默认放置位置
代码默认会放置在名为“PROGRAM_FLASH”的Flash(0x0-0x40000)中,定义函数
int hello1(void)
{
        return 1;
}
2) function存入指定位置
将函数存入指定Flash,需要调用C语言中的
__attribute__ ((section(#type#bank)))
如函数存入Flash2中,可以写作:
__attribute__ ((section("text_Flash2" ".$Flash2")))+函数声明
同样官方进行了封装,使用__TEXT(Flash2)+函数声明即可。更改代码放置位置的方法如下所示,将代码存入名为“MY_FLASH”的自定义Flash(0x40000-0x80000)中,定义函数:
__TEXT(Flash2) int hello2(void)
{
               return 2;
}
       7.PNG
5.    指定文件存放到指定位置
当存在大量函数需要存入指定Flash时,使用__TEXT(Flash)的方法设置每一个函数就略显笨拙。如需要c文件中的所有函数放入指定Flash,只需将编译完成的.o文件放入指定Flash即可。我们新分区出名为“MY_FLASH_O”的Flash3,在source文件夹下新建hello.c,编译生成hello.o,并配置Linker Script将hello.o放入新分区出的Flash中,如下:
       8.png

lpcxpresso54628_hello_world.zip

562.1 KB, 下载次数: 15, 下载积分: 威望 1

回复

使用道具 举报

您需要登录后才可以回帖 注册/登录

本版积分规则

关闭

站长推荐上一条 /4 下一条

Archiver|手机版|小黑屋|恩智浦技术社区

GMT+8, 2024-3-29 12:36 , Processed in 0.112413 second(s), 19 queries , MemCache On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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