第3篇-DSP28069初始化-内存分配

接上一篇内容,为加快程序执行运行,调用MemCopy(&RamfuncsLoadStart, &RamfuncsLoadEnd, &RamfuncsRunStart)函数将执行代码从FLASH移到RAM运行,现对RAM进行初步分配,后期程序越大,视情况进行调整。

一、内存分配

创建工程默认采用TI提供的28069.cmd文件,存储空间分为2部分:PAGE 0(程序存储)和FAGE 1(数据存储)

修改后

- 考虑后期需要在RAM运行的程序会比较大,因此将PAGE 1中的ARML2 - ARML4的内存全部移到ARML0,用于存储和运行FLASH转移过来的代码 ;

- FLASH仅分为2部分,FLASHH专门用来存储需要转换至RAM运行的程序,在编程时需要调用#pragma CODE_SECTION(Function name, "ramfuncs")函数;

- ARMM1重新进行定义,分配空间不变,用来存储系统的参数,编程时需要调用#pragma DATA_SECTION(para name,"Servo_Para");

SECTIONS部分修改如下

- ramfuncs 用于在FLASHH中开辟空间,存放需要复制到RAML0中运行代码;

- Servo_Para用来存储系统参数

说明

ramfuncs            : LOAD = FLASHH,
                         RUN = RAML0,
                         LOAD_START(_RamfuncsLoadStart),
                         LOAD_END(_RamfuncsLoadEnd),
                         RUN_START(_RamfuncsRunStart),
						 LOAD_SIZE(_RamfuncsLoadSize),
                         PAGE = 0

ramfuncs           : LOAD = FLASHH,//把ramfuncs段(编程决定)装载到FLASHH
                         RUN = RAML0,//ramfuncs段将在RAML0中运行
                         LOAD_START(_RamfuncsLoadStart),//定义_RamfuncsLoadStart变量
                         LOAD_END(_RamfuncsLoadEnd),//定义_RamfuncsLoadEnd变量
                         RUN_START(_RamfuncsRunStart),//定义_RamfuncsRunStart变量
                         LOAD_SIZE(_RamfuncsLoadSize),
                         PAGE = 0

程序中调用MemCopy(&RamfuncsLoadStart, &RamfuncsLoadEnd, &RamfuncsRunStart)即可完成从FLASHH复制到ARML0

二、变量区初始化(清零)

由上可知,内存块RAM_PARA和RAML5用于存储全局变量、静态变量,赋值之前将之清零,清零程序如下

void DataClear(int StarAddr,int DataLen)
{
	int16	i,*Addr;
	Addr = (int*)StarAddr;

	for (i = 0; i < DataLen; i++)			
	{									
		*Addr = 0x0;
		Addr ++;
	}
}

本次根本CMD文件需要清零RAM_PARA和RAML5块,可宏定义如下,

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

软件攻城狮阿三

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值