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.

[参考译文] RM46L852:在运行时将数据从闪存复制到 RAM

Guru**** 2394295 points


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

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/632953/rm46l852-copying-data-from-flash-to-ram-at-runtime

器件型号:RM46L852

我们在链接器文件中定义了存储器部分、

部分

数据:palign = 8 load = FLASH0


LOAD_START (_DATA_START_ROM)、
LOAD_END (_DATA_END_ROM)、
load_size (__data_size_ROM)、
运行= RAM、页= 0
RUN_START (__DATA_START)、
RUN_END (__DATA_END)、
run_size (__data_size)、
表(BINIT)

我签入.map 文件、 CCS 链接器分配存储器。 但我想在运行时将数据从加载地址复制到其运行地址。 我尝试使用以下代码

在 main.c 文件中

extern unsigned int _data_start_rom;
extern unsigned int _data_size_rom;
extern unsigned int _data_start;

 memcpy (& data_start、&data_start_rom、(uint32_t)&data_size_rom);

但是、CCS 发出错误未定义符号。 如 DATA_SIZE、 DATA_START_ROM、DATA_START。 请指导我们。

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

    您好 Pramod、

    您能否尝试使用汇编代码复制段? 这是我的示例代码:

    .def _APIcopy2RAM_
    asmfunc

    copyAPI 2RAM_

    .ref API_load
    FLASH_LOAD .word API_LOAD
    .ref API_run
    FLASH_run .word API_run
    .ref API_size
    FLASH_SIZE .word API_SIZE

    LDR r0、FLASH_LOAD
    LDR R1、FLASH_RUN
    LDR R2、FLASH_SIZE
    添加 R2、R1、R2
    COPY_Loop1:
    LDR R3、[r0]、#4
    STR R3、[R1]、#4
    CMP R1、R2
    BLT COPY_LOOP1
    BX LR

    endasmfunc

    以及 cmd 文件中的段定义:

    部分

    .intvecs:{}>向量
    闪存 API:

    fapi_UserDefinedFunctions.obj (.text)
    bl_flash.obj (.text)
    --library=...\..\lib\F021_API_CortexR4_be.lib (.text)
    }load = flash_API、run = SRAM、load_start (api_load)、run_start (api_run)、size (api_size)

    .text > FLASH0
    .const > FLASH0
    .cinit > FLASH0
    .pinit > FLASH0
    .data > SRAM
    .bss > SRAM

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

    QJ、

    我尝试通过定义 load 和 Run 符号来实现汇编语言中的复制函数、但仍然面临相同的问题。 同时仍通过"非法助记符"错误编译 CCS。  

    您能不能评论一下、建议汇编编码的目的是什么?

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

    我用 C 语言尝试了一下、现在它正在工作。 这是我在代码中的错误。

    感谢你的帮助。