DSP如何把数据或程序分配至RAM中运行?(DATA_SECTION和CODE_SECTION)

以28335为例,主频150Mhz,在RAM中运行时频率还是150MHz,而放在flash中,频率会降到90-95MHz。所以对实时性要求高的函数一般放在RAM中运行。

(一)#pragma DATA_SECTION,只需要两步:

1,#pragma CODE_SECTION(函数名或全局变量名,"用户自定义在程序空间的段名");    //#pragma是为了防止被编译器优化

举例:

#pragma DATA_SECTION ( symbol , " ramdata         ");

在C语言中,这条代码的含义就是为symbol变量申请数据空间。将symbol变量的数据存储在ramdata         对应的地址。

2,

MEMORY
{
PAGE 0 :   /* Program Memory */
......

PAGE 1 :   /* Data Memory */
......
RAML_XXXCMD     : origin = 0x00BFF0, length = 0x000004     
}
......

SECTIONS
{
......
ramdata         : > RAML_XXXCMD,   PAGE = 1
......
}

(二)#pragma CODE_SECTION  需要三步:

1,

#pragma CODE_SECTION(函数名或全局变量名,"用户自定义在程序空间的段名");

举例:

#pragma CODE_SECTION (function, "section name ")

在C语言中,这条代码的含义就是为function函数申请程序空间。将symbol变量的数据存储在section name对应的地址。

当程序遇到function,就调到section name里面去执行。

上面两个函数一般出现在C文件的开头。与宏定义放在一起。

2,

上面虽然指定了section name段,但是没有分配空间,此时需要修改CMD文件如下:

SECTIONS
{
/* Allocate program areas: */
......
section name : LOAD = FLASHD, 
                        RUN = RAML0_1,                                    
                        LOAD_START(_RamfuncsLoadStart),
                        LOAD_END(_RamfuncsLoadEnd),
                        RUN_START(_RamfuncsRunStart),
                        PAGE = 0

}

上面代码中,
LOAD = FLASHD, //指定了要加载程序在Flash里的地址段
RUN = RAML0_1, //指定了在RAM里运行程序的RAM地址段
LOAD_START(_RamfuncsLoadStart), // 所要加载程序在Flash里的初始地址
LOAD_END(_RamfuncsLoadEnd), // 所要加载程序在Flash里的结束地址
RUN_START(_RamfuncsRunStart), // 程序运行的起始地址
 

3,

使用memcpy()函数把程序从FLASH搬移到RAM中去。

memCopy((uint16_t *)&RamfuncsLoadStart,(uint16_t *)&RamfuncsLoadEnd,(uint16_t *)&RamfuncsRunStart);

 


本文参考了如下链接:https://blog.csdn.net/Ronnie_Hu/article/details/74075090

  • 2
    点赞
  • 53
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值