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/AWR1443BOOST: Unresolved symbols and linking error during compiling

Part Number: AWR1443BOOST
Other Parts Discussed in Thread: AWR1443

Tool/software: Code Composer Studio

Hi,

When i try and debug my AWR1443 BOOST i keep getting these errors:

'Invoking: ARM Linker'
"C:/ti/ccsv7/tools/compiler/ti-cgt-arm_17.6.0.STS/bin/armcl" -mv7R4 --code_state=32 --float_support=VFPv3D16 -me -g --diag_warning=225 --diag_wrap=off --display_error_number --enum_type=packed --abi=eabi -z -m"mmWave.map" --heap_size=0x800 --stack_size=0x800 -i"C:/ti/ccsv7/tools/compiler/ti-cgt-arm_17.6.0.STS/lib" -i"C:/ti/ccsv7/tools/compiler/ti-cgt-arm_17.6.0.STS/include" --reread_libs --diag_wrap=off --display_error_number --warn_sections --xml_link_info="mmWave_linkInfo.xml" --rom_model -o "mmWave.out" "./main.obj" "../xwr1443_r4f.cmd" -llibc.a
<Linking>

undefined first referenced
symbol in file
--------- ----------------
rlDevicePowerOn ./main.obj
rlSensorStart ./main.obj
rlSetAdcOutConfig ./main.obj
rlSetChannelConfig ./main.obj
rlSetChirpConfig ./main.obj
rlSetFrameConfig ./main.obj
rlSetProfileConfig ./main.obj

error #10234-D: unresolved symbols remain
error #10010: errors encountered during linking; "mmWave.out" not built

>> Compilation failure
makefile:141: recipe for target 'mmWave.out' failed

My code is:

#include <C:/ti/mmwave_sdk_01_00_00_05/packages/ti/control/mmwavelink/mmwavelink.h>

#include <stdint.h>
#include <stdlib.h>
#include <stddef.h>
#include <string.h>
#include <stdio.h>
#include <math.h>

void ADCInit();
void ProfileInit();
void ChirpInit();
void ChannelInit();
void FrameInit();

int main(void)
{
    rlClientCbs_t callBack;
    rlDevicePowerOn(RL_DEVICE_MAP_CASCADED_1,callBack);

    ProfileInit();
    FrameInit();
    ChirpInit();
    ChannelInit();
    ADCInit();
    rlSensorStart(RL_DEVICE_MAP_CASCADED_1);

}

void ChannelInit(){

    rlChanCfg_t ChanCfg = {0}; //channel configuration
    rlSetChannelConfig(RL_DEVICE_MAP_CASCADED_1, &ChanCfg);
    ChanCfg.rxChannelEn = 15; // Enabling 4 RX channels
    ChanCfg.txChannelEn = 7;  //Enabling 3 TX channels
    ChanCfg.cascading = 0; // cascading not needed

}

void ADCInit(){

    rlAdcOutCfg_t adcOutCfg = {0}; // ADC configuration
    rlSetAdcOutConfig(RL_DEVICE_MAP_CASCADED_1, &adcOutCfg);
    adcOutCfg.fmt.bitFormat.b2AdcBits = 0b10; // 16 bit ADC
    adcOutCfg.fmt.bitFormat.b2AdcOutFmt = 0b00; // use real output for ADC whereas using 01 will filter image band

}

void FrameInit(){

    rlFrameCfg_t frameCfg; // FMCW frame config
    rlSetFrameConfig(RL_DEVICE_MAP_CASCADED_1, &frameCfg);
    frameCfg.chirpStartIdx = 0;
    frameCfg.chirpEndIdx = 1;
    frameCfg.numLoops = 32;
    frameCfg.numFrames = 0; // infinite
    frameCfg.framePeriodicity = 4000000; // 20msec between each frame
    frameCfg.triggerSelect = 1; //SW API based triggering
    frameCfg.frameTriggerDelay = 0;

}

void ProfileInit(){

    rlProfileCfg_t profCfg = {0}; // configure one profile
    rlSetProfileConfig(RL_DEVICE_MAP_CASCADED_1,1U, &profCfg);
    //profCfg.profileId = 0;
    profCfg.startFreqConst = 0x558E38E3; //77GHz
    profCfg.idleTimeConst = 700; // time between two consecutive chirps
    profCfg.adcStartTimeConst = 300; // point of time in the chirps you want to sample the data to be processed by HWA
    profCfg.rampEndTime = 5800;
    profCfg.freqSlopeConst = 0x580; // 68Mhz/u sec
    profCfg.numAdcSamples = 225;
    profCfg.digOutSampleRate = 4500;
    profCfg.rxGain = 30; // 30dB
    //profCfg.txOutPowerBackoffCode = 0;
}

void ChirpInit(){

    rlChirpCfg_t chirpCfg[2U]; // initialise and use 2 chirps
    rlSetChirpConfig(RL_DEVICE_MAP_CASCADED_1, 2U, chirpCfg);
    chirpCfg[0].chirpStartIdx = 0;
    chirpCfg[0].chirpEndIdx = 0;
    chirpCfg[0].profileId = 0;
    chirpCfg[0].txEnable = 0; // transmit on channel TX0

    chirpCfg[1].chirpStartIdx = 1;
    chirpCfg[1].chirpEndIdx = 1;
    chirpCfg[1].profileId = 0;
    chirpCfg[1].txEnable = 4; // transmit on channel TX2

}

Any help on this issue would be appreciated.

Thanks

  • Hi Saad,

    The rlxxxx functions are part of the mmWave api and are available in libmmwave_xwr14xx.aer4f. I don't see this library being linked in the linker output you provided. You need to have the library as well as it's search path (C:\ti\mmwave_sdk_01_00_00_05\packages\ti\control\mmwave\lib) included in the linker options for your project. 

    You'll also need to include other libraries e.g. for the drivers (SPI, Pinmux, mailbox, adcbuf etc) and other required components. Please refer to the 1443 OOB Demo makefile to get the complete list of libraries and search paths you need to include in your project. Here's the complete list of libraries and corresponding search paths from mmw.mak in C:\ti\mmwave_sdk_01_00_00_05\packages\ti\demo\xwr14xx\mmw

    ##################################################################################
    # Additional libraries which are required to build the DEMO:
    ###################################################################################
    MMW_DEMO_STD_LIBS = $(R4F_COMMON_STD_LIB) \
    -llibpinmux_$(MMWAVE_SDK_DEVICE_TYPE).$(R4F_LIB_EXT) \
    -llibcrc_$(MMWAVE_SDK_DEVICE_TYPE).$(R4F_LIB_EXT) \
    -llibuart_$(MMWAVE_SDK_DEVICE_TYPE).$(R4F_LIB_EXT) \
    -llibmailbox_$(MMWAVE_SDK_DEVICE_TYPE).$(R4F_LIB_EXT) \
    -llibmmwavelink_$(MMWAVE_SDK_DEVICE_TYPE).$(R4F_LIB_EXT) \
    -llibmmwave_$(MMWAVE_SDK_DEVICE_TYPE).$(R4F_LIB_EXT) \
    -llibadcbuf_$(MMWAVE_SDK_DEVICE_TYPE).$(R4F_LIB_EXT) \
    -llibdma_$(MMWAVE_SDK_DEVICE_TYPE).$(R4F_LIB_EXT) \
    -llibgpio_$(MMWAVE_SDK_DEVICE_TYPE).$(R4F_LIB_EXT) \
    -llibedma_$(MMWAVE_SDK_DEVICE_TYPE).$(R4F_LIB_EXT) \
    -llibcli_$(MMWAVE_SDK_DEVICE_TYPE).$(R4F_LIB_EXT) \
    -llibhwa_$(MMWAVE_SDK_DEVICE_TYPE).$(R4F_LIB_EXT)

    MMW_DEMO_LOC_LIBS = $(R4F_COMMON_LOC_LIB) \
    -i$(MMWAVE_SDK_INSTALL_PATH)/ti/drivers/pinmux/lib \
    -i$(MMWAVE_SDK_INSTALL_PATH)/ti/drivers/uart/lib \
    -i$(MMWAVE_SDK_INSTALL_PATH)/ti/drivers/crc/lib \
    -i$(MMWAVE_SDK_INSTALL_PATH)/ti/drivers/mailbox/lib \
    -i$(MMWAVE_SDK_INSTALL_PATH)/ti/drivers/adcbuf/lib \
    -i$(MMWAVE_SDK_INSTALL_PATH)/ti/drivers/dma/lib \
    -i$(MMWAVE_SDK_INSTALL_PATH)/ti/drivers/gpio/lib \
    -i$(MMWAVE_SDK_INSTALL_PATH)/ti/drivers/edma/lib \
    -i$(MMWAVE_SDK_INSTALL_PATH)/ti/drivers/hwa/lib \
    -i$(MMWAVE_SDK_INSTALL_PATH)/ti/control/mmwavelink/lib \
    -i$(MMWAVE_SDK_INSTALL_PATH)/ti/utils/cli/lib \
    -i$(MMWAVE_SDK_INSTALL_PATH)/ti/control/mmwave/lib

    Alternatively, if yours is a CCS project, you can look at the 1443 OOB Demo CCS Project available on TI Resource Explorer at http://dev.ti.com/tirex/#/?link=Software%2FmmWave%20Training%2FDemos%2FmmWave%20SDK%20Demo%20-%2014xx. Please refer to the setup guide provided with the project for instructions on how to download and import the project in CCS.

    Thanks

    -Nitin

  • Thanks that solved the issue!