工具/软件:Code Composer Studio
你好
我想将该函数从闪存复制到RAM中。为此,我使用以下代码
包括"MSP4S.h"
#include "string.h"
//定义代码在闪存和RAM中的位置
#define flash_start_add 0x8000 //闪存代码起始地址
#define flash_code_size 0x01ff //要复制的函数段大小
#define RAM_START_add 0x0200 // RAM代码起始地址
//函数原型
void write_SegC (字符值);
void copy_c2d (void);
字符值; //要写入到SEG C的8位值
//此功能在闪存中,可复制到RAM
//#pragma set_code_section (".FLASHcode")
#pragma code_section (write_SegC,".FLASHcode")
void write_SegC (字符值)
{
CHAR *Flash_PTR; //闪存指针
无符号int I;
P1OUT ^= 0x02;
Flash_PTR =(CHAR *) 0x1040; //初始化闪存指针
while (FCTL3&BUSY); //选中BUSY标志;如果从RAM运行此代码则重要
FCTL1 = FWKEY + ERASE; //设置Erase bit
FCTL3 = FWKEY; //清除锁定位
*Flash_PTR =0;// 虚拟写入以擦除闪存段
while (FCTL3&BUSY); //选中BUSY标志;如果从RAM运行此代码则重要
FCTL1 = FWKEY + WRT; //设置写入操作的WRT位
用于(i=0;i<64;i++)
{
while (FCTL3&BUSY); //选中BUSY标志;如果从RAM运行此代码则重要
*Flash_PTR++=值; //将值写入闪存
}
while (FCTL3&BUSY); //选中BUSY标志;如果从RAM运行此代码则重要
FCTL1 = FWKEY; //清除WRT位
FCTL3 = FWKEY + LOCK; //设置锁定位
}
//此功能在闪存中,可复制到RAM
#pragma code_section (copy_c2d,".FLASHcode")
void copy_c2d (void)
{
CHAR *Flash_PTRC; //段C指针
char *Flash_ptrD; //段D指针
无符号int I;
FLASH_PTRC =(CHAR *) 0x1040; //初始化闪存段C指针
flash_ptrD =(char *) 0x1000; //初始化闪存段D指针
while (FCTL3&BUSY); //选中BUSY标志;如果从RAM运行此代码则重要
FCTL1 = FWKEY + ERASE; //设置Erase bit
FCTL3 = FWKEY; //清除锁定位
*Flash_ptrD = 0; //虚拟写入以擦除闪存段D
while (FCTL3&BUSY); //选中BUSY标志;如果从RAM运行此代码则重要
FCTL1 = FWKEY + WRT; //设置写入操作的WRT位
用于(i=0;i<64;i++)
{
while (FCTL3&BUSY); //选中BUSY标志;如果从RAM运行此代码则重要
*Flash_ptrD++=*Flash_PTRC+;// 将值段C复制到段D
}
while (FCTL3&BUSY); //选中BUSY标志;如果从RAM运行此代码则重要
FCTL1 = FWKEY; //清除WRT位
FCTL3 = FWKEY + LOCK; //设置锁定位
}
//将功能从闪存复制到RAM
void copy_flash_to_RAM (void)
{
unsigned char *flash_start_ptr; //初始化指针
unsigned char *RAM_START_PTR;
flash_start_ptr =(unsigned char *) flash_start_add;
RAM_START_PTR =(无符号字符*) RAM_START_add;
//将闪存功能复制到RAM
memcpy (RAM_START_PTR,FLASH_START_PTR,FLASH_CODE_SIZE);
}
Void主(void)
{
WDTCTL = WDTPW + WDTHOLD; //停止看门狗计时器
//IF (CALC1_1MHz =0xFF || CALDCO_1MHz == 0xFF)
//{
// while (1); //如果校准常量被擦除
//不加载,捕获CPU!!
//}
//BCSCTL1 = CALC1_1MHz; //将DCO设置为1MHz
//DCOCTL = CALDCO_1MHz;
//FCTL2 = FWKEY + FSSEL_1 + FN1; // MCLK/3用于闪存定时发生器
P1DIR |= 0x03;
P1OUT |= 0x00;
值= 0;
copy_flash_to_RAM();// 调用函数从flash复制到RAM
// While循环的部分内容从闪存执行。 write_segC和copy_c2d
//从RAM执行。 程序基本上从闪存执行到
//调用write_SegC函数,该函数将跳转程序到RAM。
//在RAM中执行write_SegC后,它将跳回闪存以继续
//正在执行。 当调用COPY_C2D时,它将跳转到RAM,然后返回到Flash
//完成。
同时(1)
{
int i;
P1OUT ^= 0x01;
对于(i=0;i<2万;i++);// 此部分从闪存执行
write_segC (value++); //此部分代码从RAM执行
copy_c2d();// 这部分代码从RAM执行
__no_operation();// 跳回此处的闪存。 在此处设置断点
}
}
但我得到了警告
说明 资源 路径 位置 类型
#1.0247万-D正在创建不带书帖规范的输出书帖".FLASHcode" C/C++问题
请告诉我如何在MSP430F5529 Launchpad中纠正并成功下载