您好,使用的开发板为AM5728,CCS版本为6.1.3。
我创建了一个DSP平台的BIOS工程,想进行点亮LED灯的实验,所以我先进行了使能工作,在调用Board_init()时出现了现在的问题。我的代码如下:
/* XDCtools Header files */
#include <xdc/std.h>
#include <xdc/cfg/global.h>
#include <xdc/runtime/Error.h>
#include <xdc/runtime/System.h>
/* BIOS Header files */
#include <ti/sysbios/BIOS.h>
#include <ti/sysbios/knl/Task.h>
#include <stdio.h>
/* TI-RTOS Header files */
#include <ti/drv/gpio/GPIO.h>
#include <ti/drv/gpio/soc/GPIO_soc.h>
#include "GPIO_board.h"
#include <ti/board/board.h>
/*
* ======== Board_initI2C ========
*/
static void Board_initGPIO(void) {
Board_initCfg boardCfg;
boardCfg = BOARD_INIT_PINMUX_CONFIG | BOARD_INIT_MODULE_CLOCK
| BOARD_INIT_UART_STDIO;
Board_init(boardCfg);
}
/*
* ======== taskFxn ========
*/
Void taskFxn(UArg a0, UArg a1)
{
System_printf("enter taskFxn()\n");
Task_sleep(10);
System_printf("exit taskFxn()\n");
System_flush(); /* force SysMin output to console */
}
/*
* ======== main ========
*/
Int main()
{ Task_Handle task;
Error_Block eb;
System_printf("enter main()\n");
/* Call board init functions */
Board_initGPIO();
Error_init(&eb);
task = Task_create(taskFxn, NULL, &eb);
if (task == NULL) {
System_printf("Task_create() failed!\n");
BIOS_exit(0);
}
BIOS_start(); /* does not return */
return(0);
}
然后再编译过程中出现了如下信息:
'Building target: test_led1.out'
'Invoking: C6000 Linker'
"E:/CCS/ccsv6/tools/compiler/ti-cgt-c6000_8.1.0/bin/cl6x" -mv6600 -g –define=am5728 –define=SOC_AM572x –define=EVM_AM572x –define=USE_BIOS –define=C66X –define=NSS_GEN2 –define=core1 –diag_warning=225 –diag_wrap=off –display_error_number -z -m"test_led1.map" –heap_size=0x800 –stack_size=0x800 -i"E:/CCS/ccsv6/tools/compiler/ti-cgt-c6000_8.1.0/lib" -i"E:/CCS/ccsv6/tools/compiler/ti-cgt-c6000_8.1.0/include" –reread_libs –define=CORE1=1 –diag_wrap=off –display_error_number –warn_sections –xml_link_info="test_led1_linkInfo.xml" –rom_model -o "test_led1.out" "./GPIO_board.obj" "./main.obj" -l"configPkg/linker.cmd" -llibc.a<Linking>
undefined first referenced
symbol in file ——— —————-
Board_init ./main.obj
error #10234-D: unresolved symbols remain
error #10010: errors encountered during linking; "test_led1.out" not built
>> Compilation failure
makefile:140: recipe for target 'test_led1.out' failed
gmake: *** [test_led1.out] Error 1
gmake: Target 'all' not remade because of errors.
**** Build Finished ****
可以确定的是头文件board.h是正确包含的,并且Board_init()在里面是有声明的。找到一些信息是说要关联相关的.c文件,但是我不清楚具体该怎么办。请问这种问题是怎么造成的,该怎么解决呢?非常感谢!
Tony Tang:
是Board_init这个函数没找到,不是头文件的问题,如果是头文件没找到,会有相应提示的。
你看一下Board_init这个函数是哪个库里的,把相应的库加到工程里来。
yongqing wang:
直接搜这个函数的实现,将源码一起加进去
Dinan Liang:
回复 Shine:
您好,很抱歉现在才回复您,由于我的CCS突然出现了“An internal error occurred during: "CrashTrackerJob"”这个错误,耽误了时间。
按照您的信息,我的pdk版本为pdk_am57xx_1_0_4,然后在pdk_am57xx_1_0_4\packages\ti\board\lib\evmAM572x里面有如下三个文件:
因为我创建的是DSP文件,所以选择的c66文件夹。在文件夹pdk_am57xx_1_0_4\packages\ti\board\lib\evmAM572x\c66\release中有着“ti.board.ae66”和“ti.board.ae66e”两个文件。然后我在properties->File Search Path->Include library file or command file as input中加入ti.board.ae66,运行后原错误仍然存在。随后删除ti.board.ae66,再加入ti.board.ae66e,运行后出现如下错误:
fatal error #16001: object files have incompatible byte orderings ("E:/am5728/learnam5728/pdk_am57xx_1_0_4/pdk_am57xx_1_0_4/packages/ti/board/lib/evmAM572x/c66/release/ti.board.ae66e<evmAM572x.oe66e>" = big endian, "./GPIO_board.obj" = little endian)
从错误中可以看出,ti.board.ae66e是big endian,而我的.obj为little endian,格式不符合,查询到第一次添加的ti.board.ae66为little endian,所以符合格式要求的为该文件。现在的结果是添加后原错误仍然存在。
Dinan Liang:
回复 Shine:
您好,Shine!很抱歉是我疏忽了,在添加了ti.board.ae66后,原错误已经解决了,出现的是新的错误:
undefined first referenced symbol in file ——— —————- UART_stdioInit E:/am5728/learnam5728/pdk_am57xx_1_0_4/pdk_am57xx_1_0_4/packages/ti/board/lib/evmAM572x/c66/release/ti.board.ae66<evmAM572x_lld_init.oe66>
现在已经不是Board_init的问题了,我会按照现有思路去解决,非常感谢您的帮助,同时也对我之前的疏忽表示抱歉
Dinan Liang:
回复 Tony Tang:
您好,Tony!非常感谢您的帮助,的确如您所说,这不是头文件的问题。按照您的指点我去寻找了Board_init函数在哪个库中,不过因为不熟悉的原因导致进度缓慢。一直未回复您,很抱歉!