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.

CCS6.1导入导入CCS3.3工程后原工程中汇编变量无法编入Map

    原CCS3.3工程采用的是汇编和C语言混合编程,汇编变量按规划好的地址在一个头文件中进行定义,汇编程序中调用这些变量,对于一些C语言也需要用到的汇编变量,即其中一些在汇编头文件中定义的C语言和汇编共用变量部分,在汇编头文件中采用.global声明为全局变量,并且在C语言头文件中extern+变量加下划线的形式声明为全局变量,以此实现C语言调用。

    目前用CCS6.1导入后,经过通用的导入处理流程后,编译已经通过,C语言对外通信接口部分可正常运行,但是汇编部分运行不正常,经排查发现汇编定义变量中,采用.global声明同时在C语言头文件中external声明的全局变量的部分,在Map文件中可以找到声明的变量及对应的地址;但是仅在汇编头文件中定义,仅在汇编程序文件中调用,未.global声明为全局变量,也未在C语言中调用的变量,在Map文件中无法找到相关变量及地址,也就是说这些变量在编译的时候被丢弃了。

    该工程在原CCS3.3编译环境下,汇编定义变量无论是否声明为C语言可调用变量,均可在Map文件编译进去,可以找到相关变量和对应地址,可以正常运行。

    现在的问题是:

    1)CCS6.1是否支持上述形式原CCS3.3支持的汇编和C混合编译的工程形式。

    2)出现上述CCS6.1中,仅在汇编头文件中声明的变量,未能正常编译进入Map文件内的现象,是CCS6.1环境升级后不支持CCS3.3的部分设定,还是说需要在普通导入流程后,修改相关的设置。

    3)目前出现上述问题,要想让该汇编和C语言混合编译的工程在CCS6.1的环境下正常运行,有什么样的解决方法。

    烦请有经验的大神不吝赐教,谢谢!

  • CCS6是支持混合编程的。若是可以的话,请您私信一下您的工程,我们来具体看一下,谢谢
  • Susan Yang,

    您好,混合编程的工程已经私信发送给您。

    附件中的例程中,汇编文件中定义了TEST_1~TEST_16共16个变量,实际用到的是TEST1~TEST7,其中TEST1~TEST4,被声明未全局变量,在C语言中调用,并在C语言头文件中声明。

    TEST5~TEST17变量,仅在汇编程序中调用执行。

    但当前Map文件中,仅TEST1~TEST4编译了相关地址,TEST5~TEST16均未编译相关地址。

    问题是:1)为什么这些变量没有被编译进去;2)在没有被编译进去的情况下,TEST5~TEST7涉及的相关函数还能否正常执行。

    如何才能够实现汇编模式下的变量和程序的正常编译和执行。

    烦请指导,谢谢!
  • 我会在测试后给您回复,谢谢
  • 我看了一下您的程序:

    _TEST_1 --_TEST_16   之类的定义是 absolute symbols。Absolute symbols 的话是不是显示在map 文件中。尽管您可以通过utility nm2000(e2e.ti.com/.../519269 table可以看到:

    % nm2000 BasicAndCProgramTest.out | findstr _TEST_
    00008800 T B_TEST_FUN
    00000140 A _TEST_1
    00000149 a _TEST_10
    00000149 a _TEST_10
    0000014a a _TEST_11
    ...

    如果您要在map文件内显示 absolute symbol ,则必须使用global,就像您之前定义的

    .global _TEST_1
    .global _TEST_2
    .global _TEST_3
    .global _TEST_4

  • Susan Yang:

            您好,我确认了一下,的确仅在汇编中声明和调用的变量不会在Map文件中显示,目前程序已调通,十分感谢您的指导!

            另外,您提到的utility nm2000显示部分:

    ===============================================================================================

    _TEST_1 --_TEST_16   之类的定义是 absolute symbols。Absolute symbols 的话是不是显示在map 文件中。尽管您可以通过utility nm2000(e2e.ti.com/.../519269 table可以看到:

    % nm2000 BasicAndCProgramTest.out | findstr _TEST_
    00008800 T B_TEST_FUN
    00000140 A _TEST_1
    00000149 a _TEST_10
    00000149 a _TEST_10
    0000014a a _TEST_11
    ...
    ============================================================================================

    这个不知是不是我这边显示的问题,您推荐的(e2e.ti.com/.../519269 链接部分我打不开,这个网页链接能否方便再发送学习一下。

    还有对于CCS6.1工程中各子部分参数设置和编译器优化方面的说明,目前网上没有找到太多资料,多为如何新建工程等,深入讲解的资料不多,
    不知您这边是否有相关的说明指导文档或者链接,可否方便推荐一下,谢谢!


  • 这个不知是不是我这边显示的问题,您推荐的(<a>e2e.ti.com/.../519269 链接部分我打不开,这个网页链接能否方便再发送学习一下。</a>还有对于CCS6.1工程中各子部分参数设置和编译器优化方面的说明,目前网上没有找到太多资料,多为如何新建工程等,深入讲解的资料不多,不知您这边是否有相关的说明指导文档或者链接,可否方便推荐一下,谢谢!
  • 很高兴您能解决问题!

    1 链接:e2e.ti.com/.../519269

    2 您可以看一下下面的Wiki页面:

    查看 Pages in category "Code Composer Studio v6"

    processors.wiki.ti.com/.../Category:Code_Composer_Studio_v6