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.

28337变量表中缺少变量

Other Parts Discussed in Thread: TMS320F28377D

TI专家,你们好

我们在使用28377芯片时,编译后生成的变量表中有一个变量没有,不知道是什么原因,请帮忙解答。

使用的芯片是TMS320F28377D,连接的指令如下:

LDFLAGS = -z \
--heap_size=0x400 \
--stack_size=0x100 \
--warn_sections\
--rom_model \
--reread_libs\
--display_error_number\
-m"$(DIST_DIR)/$(PROJ_NAME).map" \
--xml_link_info="$(DIST_DIR)/$(PROJ_NAME).xml" \
-o"$(DIST_DIR)/$(PROJ_NAME).out"

"$(CGTOOL_DIR)\bin\cl2000" $(LDFLAGS) $(LD_INC) $(BULID_DIR)\*.obj $(LIBS)

在源代码中,有如下代码。编译到了,因为同文件内其他变量都可以在变量表中找到,唯独_DIS_DiagInit这个变量在变量表中找不到。

#define Q_DIS_DIAG_INIT \
const T_DIS_VAR_INIT __CONST_DATA_MODEL__ _DIS_DiagInit[] = { \

Q_DIS_DIAG_INIT

这个全局变量用于维护,因而没有被其他代码调用,只有如下一处获取数组大小:

const I16 __CONST_DATA_MODEL__ _DIS_NAdrDiag    = SIZEOF_ARRAY(_DIS_DiagInit);

类似代码我们在28335中使用过,没有遇到这个问题,请各位帮忙看一些,谢谢。

LDFLAGS = -z \
--heap_size=0x400 \
--stack_size=0x100 \
--warn_sections\
--rom_model \
--reread_libs\
--display_error_number\
-m"$(DIST_DIR)/$(PROJ_NAME).map" \
--xml_link_info="$(DIST_DIR)/$(PROJ_NAME).xml" \
-o"$(DIST_DIR)/$(PROJ_NAME).out"
  • 使用#pragma retain强制编译器不删除数组。在定义数组之前,请确保编译器看到这一行:

    #pragma RETAIN(_DIS_DiagInit)

    可以在C28x compiler manual中搜索这个pragma。

    不确定为什么会发生F28335可以,而在F28377D中出现问题的情况。但一般情况下,使用#pragma RETAIN都可以修复这个问题。

  • 多谢,邓工,
    增加RETAIN后,问题得以解决。
    关于F28335可以,我还需要补充一下原来的芯片我们使用的是CCS5.1,在使用新的处理器才升级CCS到8.0的,问题可能是新版本的编译器造成的。至于为什么会有这个差异,还希望能给一个答复。

    谢谢