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.

二级bootload的copyTable问题



各位工程师,你们好!DSP6713的二级bootload中有一个copyTable(见下面)。现在的copyTable是将所有的程序(这些是连续烧写到Flash的)都一次性拷贝到IRAM,因此copyTable中其实只有一个Table(只有一个起始地址和运行地址)。 如果程序太大,可能还要用到外部空间的RAM,比如我在CE3空间接了一块SDRAM,这时可能需要将程序拷贝到多个运行地址,可能就要建多个Table,不知道这个怎么实现?

我曾尝试将所有在IRAM运行的程序都改在SDRAM,但是也没有成功,不知道是有什么问题?

copyTable:

; count
; flash start (load) address
; ram start (run) address

;; .text
.word user_size
.word user_ld_start
.word user_rn_start

;; end of table
.word 0
.word 0
.word 0

  • 工程师请回答啊,是不是我的思路错了?大程序怎么办?

  • 在搬移前,有没有对SDRAM进行初始化?

  • 我用的是例程的二级bootload代码,下面应该就是搬移前的初始化,具体的值我在c6713_emif.s62中进行了更改。在从FLASH搬移完成后,会跳到c_int00,不知道如果我所有的代码都分配到CE3的SDRAM,会不会有长跳转的问题?我对汇编不熟,不太了解这。

    ;************************************************************************
    ;* CONFIGURE EMIF
    ;************************************************************************

    ;****************************************************************
    ; *EMIF_GCTL = EMIF_GCTL_V;
    ;****************************************************************

    mvkl EMIF_GCTL,A4
    || mvkl EMIF_GCTL_V,B4

    mvkh EMIF_GCTL,A4
    || mvkh EMIF_GCTL_V,B4

    stw B4,*A4

    ;****************************************************************
    ; *EMIF_CE0 = EMIF_CE0_V
    ;****************************************************************

    mvkl EMIF_CE0,A4
    || mvkl EMIF_CE0_V,B4

    mvkh EMIF_CE0,A4
    || mvkh EMIF_CE0_V,B4

    stw B4,*A4

    ;****************************************************************
    ; *EMIF_CE1 = EMIF_CE1_V (setup for 8-bit async)
    ;****************************************************************

    mvkl EMIF_CE1,A4
    || mvkl EMIF_CE1_V,B4

    mvkh EMIF_CE1,A4
    || mvkh EMIF_CE1_V,B4

    stw B4,*A4

    ;****************************************************************
    ; *EMIF_CE2 = EMIF_CE2_V (setup for 32-bit async)
    ;****************************************************************

    mvkl EMIF_CE2,A4
    || mvkl EMIF_CE2_V,B4

    mvkh EMIF_CE2,A4
    || mvkh EMIF_CE2_V,B4

    stw B4,*A4

    ;****************************************************************
    ; *EMIF_CE3 = EMIF_CE3_V (setup for 32-bit async)
    ;****************************************************************

    || mvkl EMIF_CE3,A4
    || mvkl EMIF_CE3_V,B4 ;

    mvkh EMIF_CE3,A4
    || mvkh EMIF_CE3_V,B4

    stw B4,*A4

    ;****************************************************************
    ; *EMIF_SDRAMCTL = EMIF_SDRAMCTL_V
    ;****************************************************************
    || mvkl EMIF_SDRAMCTL,A4
    || mvkl EMIF_SDRAMCTL_V,B4 ;

    mvkh EMIF_SDRAMCTL,A4
    || mvkh EMIF_SDRAMCTL_V,B4

    stw B4,*A4

    ;****************************************************************
    ; *EMIF_SDRAMTIM = EMIF_SDRAMTIM_V
    ;****************************************************************
    || mvkl EMIF_SDRAMTIM,A4
    || mvkl EMIF_SDRAMTIM_V,B4 ;

    mvkh EMIF_SDRAMTIM,A4
    || mvkh EMIF_SDRAMTIM_V,B4

    stw B4,*A4

    ;****************************************************************
    ; *EMIF_SDRAMEXT = EMIF_SDRAMEXT_V
    ;****************************************************************
    || mvkl EMIF_SDRAMEXT,A4
    || mvkl EMIF_SDRAMEXT_V,B4 ;

    mvkh EMIF_SDRAMEXT,A4
    || mvkh EMIF_SDRAMEXT_V,B4

    stw B4,*A4