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.

使用CCS测试外部函数时的问题



你好,

我用的G2553在CCS上测试调用外部函数,头文件:

#ifndef HID_H_
#define HID_H_

extern void B_led();


#endif /* HID_H_ */

另一个Hid.c:

#include "msp430g2553.h"

void B_led()
{
	P1OUT ^= 0x01;
}

在调用的时候,写在main.c中:

#include "Hid.h"

调用:

void ISR_TA0(void)
{
B_led();
}

此时报错:

 undefined first referenced
  symbol       in file     
 --------- ----------------
 B_led     ./main.obj      

error #10234-D: unresolved symbols remain
error #10010: errors encountered during linking; "SampleDemo.out" not built
gmake: *** [SampleDemo.out] Error 1
gmake: Target `all' not remade because of errors.
在上面的代码中,可以引入头文件,但不能执行B_led()。

另一个问题,用Grace生成的文件里,在CSL_init.c一类的文件内不能写#include "Hid.h"吗?象上段代码,如果将#include写入CSL_init.c中,会卡在这行代码上。

谢谢!

SampleDemo.rar
  • 建议楼主上传完整工程或代码。

    根据楼主提供的信息,我个人觉得可能代码组织的问题居多。

    比如说:void ISR_TA0(void)

    看函数名应该是TA0的中断服务程序,但楼主没提供该句前的__interrupt,以及语句#pragma vector = TIMERA0_VECTOR

    所以不清楚是否程序有问题,还是故意没复制过来

  • 经过多次分析,我发现我的问题越来越初级了,上面的问题换个问法吧:

    以CCS中,自己添加的C文件及H文件,为什么在Debug中没有生成obj?这个也需要自己手工设置?

    我用过VS一类的软件开发工具,刚刚开始学习430,但相关的系统资料并不好找,谢谢了。

  • 你为什么不这样写呢?

    1,在HID.h里面直接定义void B_led();

    2.然后HID.c里面引用hid.h

    3,在主程序里面在引用hid.h呢

  • 先谢谢回复!

    按您的建议进行修改是可以执行的。

    上面的语句是我写的一个测试,因为在与硬件交互时,需要引用厂家提供的两个文件,一个是C文件另一个是H文件,当时就是出现了这个问题。在不改动外部引用文件的前提下,还有没有什么解决办法?

  • 这的确是个中断,是Grace里自动生成后执行的一个方法:

    /*
     *  ======== Interrupt Function Definitions ========
     */
    
    /* Interrupt Function Prototypes */
    extern void ISR_TA0(void);
    
    
    
    
    
    /*
     *  ======== Timer0_A3 Interrupt Service Routine ======== 
     */
    #pragma vector=TIMER0_A0_VECTOR
    __interrupt void TIMER0_A0_ISR_HOOK(void)
    {
    
    	/* Capture Compare Register 0 ISR Hook Function Name */
    	ISR_TA0();
    
    	/* No change in operating mode on exit */
    }