你好,
我用的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 referencedsymbolin 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中,会卡在这行代码上。
谢谢!
灰小子:
建议楼主上传完整工程或代码。
根据楼主提供的信息,我个人觉得可能代码组织的问题居多。
比如说:void ISR_TA0(void)
看函数名应该是TA0的中断服务程序,但楼主没提供该句前的__interrupt,以及语句#pragma vector = TIMERA0_VECTOR
所以不清楚是否程序有问题,还是故意没复制过来
jx Wang1:
经过多次分析,我发现我的问题越来越初级了,上面的问题换个问法吧:
以CCS中,自己添加的C文件及H文件,为什么在Debug中没有生成obj?这个也需要自己手工设置?
我用过VS一类的软件开发工具,刚刚开始学习430,但相关的系统资料并不好找,谢谢了。
jx Wang1:
回复 Ken Wang:
先谢谢回复!
按您的建议进行修改是可以执行的。
上面的语句是我写的一个测试,因为在与硬件交互时,需要引用厂家提供的两个文件,一个是C文件另一个是H文件,当时就是出现了这个问题。在不改动外部引用文件的前提下,还有没有什么解决办法?
jx Wang1:
回复 灰小子:
这的确是个中断,是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 */ }