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.

DSP2833x_CodeStartBranch.asm文件疑问

DSP2833x_CodeStartBranch.asm文件中第一部分代码(如下)

WD_DISABLE .set 1 ;set to 1 to disable WD, else set to 0

.ref _c_int00
.global code_start

有什么作用啊,系统确定启动方式后不是跳转到入口0x33fff6处么,该地址存放的是codestart段吧,但是codestart段好像只有判断跳转指令,也没有执行到上面那部份代码处啊,那就是上面那部分代码是没用的?有用的话请问下是从哪部分代码执行过去的啊?

还有,DSP2833x_CodeStartBranch.asm文件分别有什么作用啊,关闭看门狗是在里面哪部分代码执行的,谁能介绍一下DSP2833x_CodeStartBranch.asm文件里面的执行流程啊。谢啦

  • codestart段放到0x33FFF6位置处,文件“DSP2833x_CodeStartBranch.asm”中有codestart段的定义,实际上codestart段只是包含了一个跳转指令,是程序跳转到_c_int00处,_c_int00在boot.asm in RTS library中有定义,_c_int00的代码最终会调用c的main函数,之后就是main函数的执行。

    总的就是:Reset(0x3fffc0)—>initBoot()—>判断启动方式—>codestart(0x33fff6)—>_c_int00—>main函数

  • 谢谢回答,我这边还是有疑问,该文件有三部分:
    1.WD_DISABLE .set 1 ;set to 1 to disable WD, else set to 0
    .ref _c_int00
    .global code_start

    2. .sect "codestart"

    code_start:
    .if WD_DISABLE == 1
    LB wd_disable ;Branch to watchdog disable code
    .else
    LB _c_int00 ;Branch to start of boot.asm in RTS library
    .endif

    3. .if WD_DISABLE == 1

    .text
    wd_disable:
    SETC OBJMODE ;Set OBJMODE for 28x object code
    EALLOW ;Enable EALLOW protected register access
    MOVZ DP, #7029h>>6 ;Set data page for WDCR register
    MOV @7029h, #0068h ;Set WDDIS bit in WDCR to disable WD
    EDIS ;Disable EALLOW protected register access
    LB _c_int00 ;Branch to start of boot.asm in RTS library

    请问codestart段的定义是不是只是第二部分,那第一部分那些代码有什么用呢,也没见那里有跳转和调用会用到第一部分吧?
    还有,最后不是跳转到main函数执行么,那如果我已经烧写过程序之后,flash里面不是有两个main函数了么,那是由什么决定的执行哪一个main函数?
    谢谢
  • “请问codestart段的定义是不是只是第二部分,那第一部分那些代码有什么用呢,也没见那里有跳转和调用会用到第一部分吧?
    还有,最后不是跳转到main函数执行么,那如果我已经烧写过程序之后,flash里面不是有两个main函数了么,那是由什么决定的执行哪一个main函数?”
    ERIC:
    这个代码就是看看门狗需要禁止和使能,如果看门狗使用默认的使能,那么就直接跳转到_C_int00。 如果看门狗要禁止,则先禁止,再跳转到_c_int00。
    c_int00执行完后,才跳转到main.
    flash只有一个main, 怎么可能有两个?如果有两个,那也是两个工程分别烧写才行。那跳转的main是和code start 在一起的那个。
  •  Hi Eric

    您这句话“如果有两个,那也是两个工程分别烧写才行。那跳转的main是和code start 在一起的那个。”怎么理解

    目前我们项目有两个工程一个bootloader工程,一个App工程。

    两个工程中的begin 和 codestart 映射位置都一样,但是扇区分配两个工程不冲突,先分配给Bootloader 再分配给APP。

    此时,上电跳转的_c_int00 是指向哪个工程的main?应该如何理解啊?我们实验是指向了bootloader,那该如何解释呢?

    期待您的回复。