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.

CC2530 ZNP SBL中变量mainAppCommand相关问题

在BootLoade的 sb_main.c文件main函数内使用的mainAppCommand变量在使用之前没有找到初始化或赋值的地方,整个工程也没有发现,

这里的值从哪里获取的?

直接更改变量值或是从地址(_sblCmdAddr)来更改变量值,这两种方法都没发现;

__no_init volatile uint32 mainAppCommand;

#pragma location="SBL_CMD"
const CODE uint16 _sblCmdAddr = (uint16)&mainAppCommand;
#pragma required=_sblCmdAddr

void main(void)
{
    uint8 time_spent_validating;
    uint8 bootloaderForcedByMainApp = FALSE;
    uint32 mainAppCommandLocal = mainAppCommand;

    mainAppCommand = MAIN_APP_CMD_NONE;

    if (mainAppCommandLocal == MAIN_APP_CMD_FORCE_BOOTLOADER)
    {
        bootloaderForcedByMainApp = TRUE;
    }

.................

}

  • 请查看在linker的sb-boot.xcl.xcl里面你可以看到:

    // Setup "bit" segments (only for '__no_init bool' variables).
    -Z(BIT)BREG=_BREG_START
    -Z(BIT)BIT_N=0-7F
    可以参照我之前回复的帖子:
    e2echina.ti.com/.../444791
  • __no_init
    正常情况下,应用程序启动时,IAR运行时环境将全部全局和静态变量初始化为0。IAR C编译器支持声明不初始化的变量,使用__no_init类型限定符。声明__no_init的变量不需初始化。一些关键数据在系统复位(如看门狗复位或其他原因造成的复位)时的数值是不能改变的!在这种情况下可用__no_init限定。
  • 您好,
    在整个工程里面只找到"mainAppCommand = MAIN_APP_CMD_NONE;"这一个地方修改mainAppCommand ,
    那下面这个分支什么情况才会处理:
    if (mainAppCommandLocal == MAIN_APP_CMD_FORCE_BOOTLOADER)

    想知道mainAppCommandLocal如何通过mainAppCommand 获取的值等于MAIN_APP_CMD_FORCE_BOOTLOADER或MAIN_APP_CMD_PASS_THROUGH;在代码中有这两种情况处理,谢谢!