This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

[参考译文] CCS:如何在CCS代码中指定章节

Guru**** 2536600 points
Other Parts Discussed in Thread: MSP430F5529

请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/tools/code-composer-studio-group/ccs/f/code-composer-studio-forum/570388/ccs-how-to-specify-sections-in-ccs-code

主题中讨论的其他部件:MSP430F5529

工具/软件: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中纠正并成功下载

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    Pavan Chopade 说:
    我要将闪存中的功能复制到RAM[/QUOT]

    编译器具有执行此操作的内置功能。  请参阅标题为 “将函数置于RAM中 ”的Wiki文章。

    谢谢,此致,

    -George

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好George

    根据您的回复,我已经使用Code Composer Studio尝试了它,但它仍然给我下面的警告

    请告诉我如何纠正

    谢谢,此致

    Pavan

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    警告为
    说明 资源 路径 位置 类型
    #1.0247万-D正在创建输出节".TI.ramfunc"而不使用节规范 Version10_OTA更新 C/C++问题
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您使用的链接程序命令文件必须是较旧的文件。  因此,它不具有使用较新的编译器的ramfunc属性功能所需的更改。  上述 Wiki文章的这一小节中已解决了此问题。  此时将显示需要对链接程序命令文件进行的更改。  如果这种情况令人困惑,如果您从Wiki文章 链接器命令文件入门中获得链接器命令文件的一些一般背景信息,可能会有所帮助。  

    谢谢,此致,

    -George