TI中文支持网
TI专业的中文技术问题搜集分享网站

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;
    }

……………..

}

Alvin Chen:

请查看在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

Susan Yang:

__no_init
正常情况下,应用程序启动时,IAR运行时环境将全部全局和静态变量初始化为0。IAR C编译器支持声明不初始化的变量,使用__no_init类型限定符。声明__no_init的变量不需初始化。一些关键数据在系统复位(如看门狗复位或其他原因造成的复位)时的数值是不能改变的!在这种情况下可用__no_init限定。

user5342508:

回复 Susan Yang:

您好,
在整个工程里面只找到"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;在代码中有这两种情况处理,谢谢!

赞(0)
未经允许不得转载:TI中文支持网 » CC2530 ZNP SBL中变量mainAppCommand相关问题
分享到: 更多 (0)