Hello NXP forum,
Getting some undefined reference linker errors. I'm receiving undefined reference errors for the daqSpiCh1_MasterState and daqSpiCh1_dmaTcd symbols. Bottom line is that these symbols are declared in daqSpiCh1.h, defined in daqSpiCh1.c. daqSpiCh1.c is being complied (object file is present). But I don't seem to be able to link against those particular symbols.
Linker log is attached also.
I don't mind admitting I'm a little embarrassed that can't seem to define a variable... I appreciate your help and will post more info if it is necessary.
////////////////////////////////////////////////////////////////////////////////////////////////////////
//daqSpiCh1.h
#ifndef __daqSpiCh1_H
#define __daqSpiCh1_H
/* MODULE daqSpiCh1. */
/* Include inherited beans */
#include "clockManager.h"
#include "dmaController.h"
#include "osa.h"
#include "Cpu.h"
/*! @brief Device instance number */
#define daqSpiCh1_IDX SPI0_IDX
/*! @brief Device instance number for backward compatibility */
#define FSL_DAQSPICH1 daqSpiCh1_IDX
/*! @brief daqSpiCh1 component mode, 0 for interrupt, 1 for DMA mode */
#define daqSpiCh1_DMA_MODE 1U
/*! @brief daqSpiCh1 component mode for backward compatibility */
#define DAQSPICH1_DMA_MODE daqSpiCh1_DMA_MODE
/*! @brief Driver calculated baudrate is returned from DSPI_DRV_MasterInit() call.*/
extern uint32_t daqSpi1_calculatedBaudRate;
/*! @brief Master bus state decl */
extern dspi_edma_master_state_t daqSpiCh1_MasterState;
/*! @brief eDMA TCD structure */
extern edma_software_tcd_t daqSpiCh1_dmaTcd __attribute__((aligned(32)));
/*! @brief Master bus configuration declaration */
extern const dspi_edma_device_t daqSpiCh1_BusConfig0;
/*! @brief Master configuration declaration */
extern const dspi_edma_master_user_config_t daqSpiCh1_MasterConfig0;
#endif
////////////////////////////////////////////////////////////////////////////////////////////////////////
//daqSpiCh1.c
#include "daqSpiCh1.h"
dspi_edma_master_state_t daqSpi1_MasterState;
edma_software_tcd_t daqSpi1_dmaTcd __attribute__((aligned(32)));
uint32_t daqSpi1_calculatedBaudRate = 0;
const dspi_edma_device_t daqSpiCh1_BusConfig0 = {
.bitsPerSec = 20000000U,
.dataBusConfig.bitsPerFrame = 16U,
.dataBusConfig.clkPolarity = kDspiClockPolarity_ActiveHigh,
.dataBusConfig.clkPhase = kDspiClockPhase_FirstEdge,
.dataBusConfig.direction = kDspiMsbFirst,
};
const dspi_edma_master_user_config_t daqSpiCh1_MasterConfig0 = {
.whichCtar = kDspiCtar0,
.isSckContinuous = false,
.isChipSelectContinuous = false,
.whichPcs = kDspiPcs0,
.pcsPolarity = kDspiPcs_ActiveLow,
};
////////////////////////////////////////////////////////////////////////////////////////////////////////
//daq.h
#ifndef SOURCES_DAQ_DAQ_H_
#define SOURCES_DAQ_DAQ_H_
#include "arm_math.h"
typedef struct {
enum edma_channel_assignments DMA_SPI_CH;
enum IRQn DMA_IRQn;
uint32_t PIT_CH;
pdb_trigger_src_t PDB_INPUT_TRIG;
} daq_ChannelConfigTable_t;
extern const daq_ChannelConfigTable_t daq_ChannelConfigTable[];
#define BUF_PP_U8_ELEM 512 // size of one of the ping pong buffers
#define BUF_PP_N 2 // Number of buffers
#define BUF_PP_BANK_SIZE BUF_PP_U8_ELEM >> 1
struct {
uint16_t* gen;
q15_t* ch1;
q15_t* ch2;
size_t bufSize;
uint16_t samplePeriod_nS;
} daq_buffers_public_struct;
void DAQ_Initialize(void(*analyzerCallback), uint32_t sampleFrequency_Hz);
#endif /* SOURCES_DAQ_DAQ_H_ */
////////////////////////////////////////////////////////////////////////////////////////////////////////
//daq_priv.h
#ifndef SOURCES_DAQ_DAQ_PRIV_H_
#define SOURCES_DAQ_DAQ_PRIV_H
#include "Cpu.h"
#include "Analyzer\analyzer.h"
#include "daqProgrammableDelay.h"
#include "daqSpiCh1.h"
#include "daqSpiCh2.h"
#include "daqTimerConversionStart.h"
#include "daqTimerSPIGate.h"
#include "dmaController.h"
#include "daq.h"
// =====PRIVATE VARIABLES======================================================
// -----GLOBALS----------------------------------------------------------------
extern SPI_Type* const g_dspiBase[SPI_INSTANCE_COUNT];
extern void* g_dspiStatePtr[SPI_INSTANCE_COUNT];
// -END-GLOBALS----------------------------------------------------------------
// -----Private State----------------------------------------------------------
void (*daq_callback)(void);
// -END-Private State----------------------------------------------------------
// -----CONFIGURATION----------------------------------------------------------
#define DAQ_CONFIG edmaChanneldaqSPI0CmdToTx
#define DAQ_CONV_START_FTM_CHANNEL 0
const daq_ChannelConfigTable_t daq_ChannelConfigTable[4] = {
{ kEDMAChannel0, DMA0_IRQn, 0, kPdbTrigger4 }, // When CMD to SPI uses DMA0
{ kEDMAChannel1, DMA1_IRQn, 1, kPdbTrigger5 }, // When CMD to SPI uses DMA1
{ kEDMAChannel2, DMA2_IRQn, 2, kPdbTrigger6 }, // When CMD to SPI uses DMA2
{ kEDMAChannel3, DMA3_IRQn, 3, kPdbTrigger7 }, // When CMD to SPI uses DMA3
};
// -END-CONFIGURATION----------------------------------------------------------
// -----BUFFERS----------------------------------------------------------------
/* size of the DMA transfer for a ping pong buffer */
#define BUF_PP_DMA_LEN BUF_PP_U8_ELEM
/* Resultant array length */
#define BUF_ELEMS_U16_SIZE BUF_PP_U8_ELEM
#define BUF_ELEMS_U8_SIZE (BUF_PP_U8_ELEM * BUF_PP_N)
enum uint32_t { BUF_BANK_A = 0, BUF_BANK_B };
uint32_t BUF_BANK[2] = { 0, BUF_PP_BANK_SIZE };
typedef struct {
union {
uint16_t u16[BUF_ELEMS_U16_SIZE];
uint8_t u8[BUF_ELEMS_U8_SIZE];
} gen;
union {
q15_t q15[BUF_ELEMS_U16_SIZE];
uint8_t u8[BUF_ELEMS_U8_SIZE];
} ch1;
union {
q15_t q15[BUF_ELEMS_U16_SIZE];
uint8_t u8[BUF_ELEMS_U8_SIZE];
} ch2;
union {
q15_t q15[BUF_ELEMS_U16_SIZE];
uint8_t u8[BUF_ELEMS_U8_SIZE];
} analysis_sin;
union {
q15_t q15[BUF_ELEMS_U16_SIZE];
uint8_t u8[BUF_ELEMS_U8_SIZE];
} analysis_cos;
} data_buffer
__attribute__((aligned(512))); // aligned against DMA modulo boundary
static data_buffer fra_buffers = {.gen.u8 = { 0 },
.ch1.u8 = { 0 },
.ch2.u8 = { 0 },
.analysis_sin.u8 = { 0 },
.analysis_cos.u8 = { 0 } };
// -END-BUFFERS----------------------------------------------------------------c
Error actually flagged here:
////////////////////////////////////////////////////////////////////////////////////////////////////////
//daq.c
#include "daq_priv.h"
static void daq_spiInit(void)
{
// clang-format off
DSPI_DRV_EdmaMasterInit(daqSpiCh1_IDX, &daqSpiCh1_MasterState, &daqSpiCh1_MasterConfig0, &daqSpiCh1_dmaTcd);
DSPI_DRV_EdmaMasterConfigureBus(daqSpiCh1_IDX, &daqSpiCh1_BusConfig0, &daqSpi1_calculatedBaudRate);
// ----SPI Ch2
DSPI_DRV_EdmaSlaveInit(daqSpiCh2_IDX, &daqSpi2_SlaveState, &daqSpiCh2_SlaveConfig0);
// ----DAQ DMA Controller
// Correct the channel assignments
EDMA_DRV_ReleaseChannel(&daqSpiCh1_MasterState.dmaCmdData2Fifo);
EDMA_DRV_ReleaseChannel(&daqSpiCh1_MasterState.dmaFifo2Receive);
EDMA_DRV_ReleaseChannel(&daqSpiCh1_MasterState.dmaSrc2CmdData);
EDMA_DRV_ReleaseChannel(&daqSpi2_SlaveState.edmaRxChannel);
EDMA_DRV_ReleaseChannel(&daqSpi2_SlaveState.edmaTxChannel);
// Get correct DMA channels according to DMA config.
EDMA_DRV_RequestChannel(edmaChanneldaqSPI0CmdToTx, edmaSignaldaqSPI0CmdToTx,&daqSpiCh1_MasterState.dmaCmdData2Fifo);
EDMA_DRV_RequestChannel(edmaChanneldaqSPI0RxToBuf, edmaSignaldaqSPI0Rx,&daqSpiCh1_MasterState.dmaFifo2Receive);
EDMA_DRV_RequestChannel(edmaChanneldaqSPI0DatToCmd, edmaSignaldaqSPI0Cmd, &daqSpiCh1_MasterState.dmaSrc2CmdData);
EDMA_DRV_RequestChannel(edmaChanneldaqSPI1RxToBuf, edmaSignaldaqSPI1Rx, &daqSpi2_SlaveState.edmaRxChannel);
// clang-format on
}
...
And the verbose linker log:
'Invoking: Cross ARM C++ Linker'
arm-none-eabi-g++ -mcpu=cortex-m4 -mthumb -mfloat-abi=hard -mfpu=fpv4-sp-d16 -O0 -fmessage-length=0 -fsigned-char -ffunction-sections -fdata-sections -Wall -g3 -T "C:/Users/pgvoorhees/OneDrive/Documents/Projects/KDS/881/Project_Settings/ProcessorExpert.ld" -Xlinker --gc-sections -L"C:\Freescale\KSDK_1.3.0\platform\CMSIS/Lib/GCC" -L"C:/Users/pgvoorhees/OneDrive/Documents/Projects/KDS/881/Project_Settings/Linker_Files" -Wl,-Map,"881.map" --specs=nano.specs -v -specs=nosys.specs -Xlinker -z -Xlinker muldefs -o "881.elf" ./Sources/Sys/ringbuffer.o ./Sources/Sys/system.o ./Sources/Parse/parse.o ./Sources/DAQ/daq.o ./Sources/Comm/comm.o ./Sources/Comm/rs485.o ./Sources/Comm/usb_ser.o ./Sources/Analyzer/analyzer.o ./Sources/Events.o ./Sources/PE_low_level_init.o ./Sources/main.o ./Sources/os_tasks.o ./SDK/platform/utilities/src/fsl_debug_console.o ./SDK/platform/utilities/src/fsl_misc_utilities.o ./SDK/platform/utilities/src/print_scan.o ./SDK/platform/system/src/interrupt/fsl_interrupt_manager.o ./SDK/platform/system/src/clock/MK22FA12/fsl_clock_MK22FA12.o ./SDK/platform/system/src/clock/fsl_clock_manager.o ./SDK/platform/system/src/clock/fsl_clock_manager_common.o ./SDK/platform/osa/src/fsl_os_abstraction_bm.o ./SDK/platform/hal/src/wdog/fsl_wdog_hal.o ./SDK/platform/hal/src/uart/fsl_uart_hal.o ./SDK/platform/hal/src/sim/MK22FA12/fsl_sim_hal_MK22FA12.o ./SDK/platform/hal/src/rtc/fsl_rtc_hal.o ./SDK/platform/hal/src/port/fsl_port_hal.o ./SDK/platform/hal/src/pit/fsl_pit_hal.o ./SDK/platform/hal/src/pdb/fsl_pdb_hal.o ./SDK/platform/hal/src/osc/fsl_osc_hal.o ./SDK/platform/hal/src/mcg/fsl_mcg_hal.o ./SDK/platform/hal/src/mcg/fsl_mcg_hal_modes.o ./SDK/platform/hal/src/gpio/fsl_gpio_hal.o ./SDK/platform/hal/src/ftm/fsl_ftm_hal.o ./SDK/platform/hal/src/edma/fsl_edma_hal.o ./SDK/platform/hal/src/dspi/fsl_dspi_hal.o ./SDK/platform/hal/src/dmamux/fsl_dmamux_hal.o ./SDK/platform/drivers/src/wdog/fsl_wdog_common.o ./SDK/platform/drivers/src/wdog/fsl_wdog_driver.o ./SDK/platform/drivers/src/uart/fsl_uart_common.o ./SDK/platform/drivers/src/uart/fsl_uart_edma_driver.o ./SDK/platform/drivers/src/rtc/fsl_rtc_common.o ./SDK/platform/drivers/src/pit/fsl_pit_common.o ./SDK/platform/drivers/src/pit/fsl_pit_driver.o ./SDK/platform/drivers/src/pdb/fsl_pdb_common.o ./SDK/platform/drivers/src/pdb/fsl_pdb_driver.o ./SDK/platform/drivers/src/gpio/fsl_gpio_common.o ./SDK/platform/drivers/src/gpio/fsl_gpio_driver.o ./SDK/platform/drivers/src/ftm/fsl_ftm_common.o ./SDK/platform/drivers/src/ftm/fsl_ftm_driver.o ./SDK/platform/drivers/src/edma/fsl_edma_common.o ./SDK/platform/drivers/src/edma/fsl_edma_driver.o ./SDK/platform/drivers/src/dspi/fsl_dspi_common.o ./SDK/platform/drivers/src/dspi/fsl_dspi_edma_master_driver.o ./SDK/platform/drivers/src/dspi/fsl_dspi_edma_shared_function.o ./SDK/platform/drivers/src/dspi/fsl_dspi_edma_slave_driver.o ./SDK/platform/devices/MK22FA12/startup/gcc/startup_MK22FA12.o ./SDK/platform/devices/MK22FA12/startup/system_MK22FA12.o ./SDK/platform/devices/startup.o ./PEx/src/Cpu.o ./PEx/src/FRAManagementTask.o ./PEx/src/WatchdogTask.o ./PEx/src/clockManager.o ./PEx/src/communicationRS485.o ./PEx/src/daqProgrammableDelay.o ./PEx/src/daqSpiCh1.o ./PEx/src/daqSpiCh2.o ./PEx/src/daqTimerConversionStart.o ./PEx/src/daqTimerSPIGate.o ./PEx/src/dmaController.o ./PEx/src/gpio.o ./PEx/src/hardware_init.o ./PEx/src/osa.o ./PEx/src/pinMux.o ./PEx/src/watchdog.o -larm_cortexM4lf_math
Using built-in specs.
Reading specs from c:/freescale/kds_3.0.0/toolchain/bin/../lib/gcc/arm-none-eabi/4.9.3/../../../../arm-none-eabi/lib/nano.specs
rename spec link to nano_link
rename spec link_gcc_c_sequence to nano_link_gcc_c_sequence
rename spec cpp to nano_cpp
Reading specs from c:/freescale/kds_3.0.0/toolchain/bin/../lib/gcc/arm-none-eabi/4.9.3/../../../../arm-none-eabi/lib/nosys.specs
rename spec link_gcc_c_sequence to nosys_link_gcc_c_sequence
COLLECT_GCC=arm-none-eabi-g++
COLLECT_LTO_WRAPPER=c:/freescale/kds_3.0.0/toolchain/bin/../lib/gcc/arm-none-eabi/4.9.3/lto-wrapper.exe
Target: arm-none-eabi
Configured with: /home/build/work/GCC-4-9-build/src/gcc/configure --build=i686-linux-gnu --host=i686-w64-mingw32 --target=arm-none-eabi --prefix=/home/build/work/GCC-4-9-build/install-mingw --libexecdir=/home/build/work/GCC-4-9-build/install-mingw/lib --infodir=/home/build/work/GCC-4-9-build/install-mingw/share/doc/gcc-arm-none-eabi/info --mandir=/home/build/work/GCC-4-9-build/install-mingw/share/doc/gcc-arm-none-eabi/man --htmldir=/home/build/work/GCC-4-9-build/install-mingw/share/doc/gcc-arm-none-eabi/html --pdfdir=/home/build/work/GCC-4-9-build/install-mingw/share/doc/gcc-arm-none-eabi/pdf --enable-languages=c,c++ --disable-decimal-float --disable-libffi --disable-libgomp --disable-libmudflap --disable-libquadmath --disable-libssp --disable-libstdcxx-pch --disable-nls --disable-shared --disable-threads --disable-tls --with-gnu-as --with-gnu-ld --with-headers=yes --with-newlib --with-python-dir=share/gcc-arm-none-eabi --with-sysroot=/home/build/work/GCC-4-9-build/install-mingw/arm-none-eabi --with-libiconv-prefix=/home/build/work/GCC-4-9-build/build-mingw/host-libs/usr --with-gmp=/home/build/work/GCC-4-9-build/build-mingw/host-libs/usr --with-mpfr=/home/build/work/GCC-4-9-build/build-mingw/host-libs/usr --with-mpc=/home/build/work/GCC-4-9-build/build-mingw/host-libs/usr --with-isl=/home/build/work/GCC-4-9-build/build-mingw/host-libs/usr --with-cloog=/home/build/work/GCC-4-9-build/build-mingw/host-libs/usr --with-libelf=/home/build/work/GCC-4-9-build/build-mingw/host-libs/usr --with-host-libstdcxx='-static-libgcc -Wl,-Bstatic,-lstdc++,-Bdynamic -lm' --with-pkgversion='GNU Tools for ARM Embedded Processors' --with-multilib-list=armv6-m,armv7-m,armv7e-m,cortex-m7,armv7-r
Thread model: single
gcc version 4.9.3 20150529 (release) [ARM/embedded-4_9-branch revision 227977] (GNU Tools for ARM Embedded Processors)
COMPILER_PATH=c:/freescale/kds_3.0.0/toolchain/bin/../lib/gcc/arm-none-eabi/4.9.3/;c:/freescale/kds_3.0.0/toolchain/bin/../lib/gcc/;c:/freescale/kds_3.0.0/toolchain/bin/../lib/gcc/arm-none-eabi/4.9.3/../../../../arm-none-eabi/bin/
LIBRARY_PATH=c:/freescale/kds_3.0.0/toolchain/bin/../lib/gcc/arm-none-eabi/4.9.3/armv7e-m/fpu/;c:/freescale/kds_3.0.0/toolchain/bin/../lib/gcc/arm-none-eabi/4.9.3/../../../../arm-none-eabi/lib/armv7e-m/fpu/;c:/freescale/kds_3.0.0/toolchain/bin/../arm-none-eabi/lib/armv7e-m/fpu/;c:/freescale/kds_3.0.0/toolchain/bin/../lib/gcc/arm-none-eabi/4.9.3/;c:/freescale/kds_3.0.0/toolchain/bin/../lib/gcc/;c:/freescale/kds_3.0.0/toolchain/bin/../lib/gcc/arm-none-eabi/4.9.3/../../../../arm-none-eabi/lib/;c:/freescale/kds_3.0.0/toolchain/bin/../arm-none-eabi/lib/
COLLECT_GCC_OPTIONS='-mcpu=cortex-m4' '-mthumb' '-mfloat-abi=hard' '-mfpu=fpv4-sp-d16' '-O0' '-fmessage-length=0' '-fsigned-char' '-ffunction-sections' '-fdata-sections' '-Wall' '-g3' '-T' 'C:/Users/pgvoorhees/OneDrive/Documents/Projects/KDS/881/Project_Settings/ProcessorExpert.ld' '-LC:\Freescale\KSDK_1.3.0\platform\CMSIS/Lib/GCC' '-LC:/Users/pgvoorhees/OneDrive/Documents/Projects/KDS/881/Project_Settings/Linker_Files' '-specs=nano.specs' '-v' '-specs=nosys.specs' '-o' '881.elf'
c:/freescale/kds_3.0.0/toolchain/bin/../lib/gcc/arm-none-eabi/4.9.3/collect2.exe -plugin c:/freescale/kds_3.0.0/toolchain/bin/../lib/gcc/arm-none-eabi/4.9.3/liblto_plugin-0.dll -plugin-opt=c:/freescale/kds_3.0.0/toolchain/bin/../lib/gcc/arm-none-eabi/4.9.3/lto-wrapper.exe -plugin-opt=-fresolution=C:\Users\PGVOOR~1\AppData\Local\Temp\ccte6Qsk.res -plugin-opt=-pass-through=-lgcc -plugin-opt=-pass-through=-lg_nano -plugin-opt=-pass-through=-lc_nano -plugin-opt=-pass-through=-lgcc -plugin-opt=-pass-through=-lc_nano -plugin-opt=-pass-through=-lnosys -plugin-opt=-pass-through=-lgcc -plugin-opt=-pass-through=-lc_nano -plugin-opt=-pass-through=-lnosys --sysroot=c:\freescale\kds_3.0.0\toolchain\bin\../arm-none-eabi -X -o 881.elf c:/freescale/kds_3.0.0/toolchain/bin/../lib/gcc/arm-none-eabi/4.9.3/armv7e-m/fpu/crti.o c:/freescale/kds_3.0.0/toolchain/bin/../lib/gcc/arm-none-eabi/4.9.3/armv7e-m/fpu/crtbegin.o c:/freescale/kds_3.0.0/toolchain/bin/../lib/gcc/arm-none-eabi/4.9.3/../../../../arm-none-eabi/lib/armv7e-m/fpu/crt0.o -LC:\Freescale\KSDK_1.3.0\platform\CMSIS/Lib/GCC -LC:/Users/pgvoorhees/OneDrive/Documents/Projects/KDS/881/Project_Settings/Linker_Files -Lc:/freescale/kds_3.0.0/toolchain/bin/../lib/gcc/arm-none-eabi/4.9.3/armv7e-m/fpu -Lc:/freescale/kds_3.0.0/toolchain/bin/../lib/gcc/arm-none-eabi/4.9.3/../../../../arm-none-eabi/lib/armv7e-m/fpu -Lc:/freescale/kds_3.0.0/toolchain/bin/../arm-none-eabi/lib/armv7e-m/fpu -Lc:/freescale/kds_3.0.0/toolchain/bin/../lib/gcc/arm-none-eabi/4.9.3 -Lc:/freescale/kds_3.0.0/toolchain/bin/../lib/gcc -Lc:/freescale/kds_3.0.0/toolchain/bin/../lib/gcc/arm-none-eabi/4.9.3/../../../../arm-none-eabi/lib -Lc:/freescale/kds_3.0.0/toolchain/bin/../arm-none-eabi/lib --gc-sections -Map 881.map -z muldefs ./Sources/Sys/ringbuffer.o ./Sources/Sys/system.o ./Sources/Parse/parse.o ./Sources/DAQ/daq.o ./Sources/Comm/comm.o ./Sources/Comm/rs485.o ./Sources/Comm/usb_ser.o ./Sources/Analyzer/analyzer.o ./Sources/Events.o ./Sources/PE_low_level_init.o ./Sources/main.o ./Sources/os_tasks.o ./SDK/platform/utilities/src/fsl_debug_console.o ./SDK/platform/utilities/src/fsl_misc_utilities.o ./SDK/platform/utilities/src/print_scan.o ./SDK/platform/system/src/interrupt/fsl_interrupt_manager.o ./SDK/platform/system/src/clock/MK22FA12/fsl_clock_MK22FA12.o ./SDK/platform/system/src/clock/fsl_clock_manager.o ./SDK/platform/system/src/clock/fsl_clock_manager_common.o ./SDK/platform/osa/src/fsl_os_abstraction_bm.o ./SDK/platform/hal/src/wdog/fsl_wdog_hal.o ./SDK/platform/hal/src/uart/fsl_uart_hal.o ./SDK/platform/hal/src/sim/MK22FA12/fsl_sim_hal_MK22FA12.o ./SDK/platform/hal/src/rtc/fsl_rtc_hal.o ./SDK/platform/hal/src/port/fsl_port_hal.o ./SDK/platform/hal/src/pit/fsl_pit_hal.o ./SDK/platform/hal/src/pdb/fsl_pdb_hal.o ./SDK/platform/hal/src/osc/fsl_osc_hal.o ./SDK/platform/hal/src/mcg/fsl_mcg_hal.o ./SDK/platform/hal/src/mcg/fsl_mcg_hal_modes.o ./SDK/platform/hal/src/gpio/fsl_gpio_hal.o ./SDK/platform/hal/src/ftm/fsl_ftm_hal.o ./SDK/platform/hal/src/edma/fsl_edma_hal.o ./SDK/platform/hal/src/dspi/fsl_dspi_hal.o ./SDK/platform/hal/src/dmamux/fsl_dmamux_hal.o ./SDK/platform/drivers/src/wdog/fsl_wdog_common.o ./SDK/platform/drivers/src/wdog/fsl_wdog_driver.o ./SDK/platform/drivers/src/uart/fsl_uart_common.o ./SDK/platform/drivers/src/uart/fsl_uart_edma_driver.o ./SDK/platform/drivers/src/rtc/fsl_rtc_common.o ./SDK/platform/drivers/src/pit/fsl_pit_common.o ./SDK/platform/drivers/src/pit/fsl_pit_driver.o ./SDK/platform/drivers/src/pdb/fsl_pdb_common.o ./SDK/platform/drivers/src/pdb/fsl_pdb_driver.o ./SDK/platform/drivers/src/gpio/fsl_gpio_common.o ./SDK/platform/drivers/src/gpio/fsl_gpio_driver.o ./SDK/platform/drivers/src/ftm/fsl_ftm_common.o ./SDK/platform/drivers/src/ftm/fsl_ftm_driver.o ./SDK/platform/drivers/src/edma/fsl_edma_common.o ./SDK/platform/drivers/src/edma/fsl_edma_driver.o ./SDK/platform/drivers/src/dspi/fsl_dspi_common.o ./SDK/platform/drivers/src/dspi/fsl_dspi_edma_master_driver.o ./SDK/platform/drivers/src/dspi/fsl_dspi_edma_shared_function.o ./SDK/platform/drivers/src/dspi/fsl_dspi_edma_slave_driver.o ./SDK/platform/devices/MK22FA12/startup/gcc/startup_MK22FA12.o ./SDK/platform/devices/MK22FA12/startup/system_MK22FA12.o ./SDK/platform/devices/startup.o ./PEx/src/Cpu.o ./PEx/src/FRAManagementTask.o ./PEx/src/WatchdogTask.o ./PEx/src/clockManager.o ./PEx/src/communicationRS485.o ./PEx/src/daqProgrammableDelay.o ./PEx/src/daqSpiCh1.o ./PEx/src/daqSpiCh2.o ./PEx/src/daqTimerConversionStart.o ./PEx/src/daqTimerSPIGate.o ./PEx/src/dmaController.o ./PEx/src/gpio.o ./PEx/src/hardware_init.o ./PEx/src/osa.o ./PEx/src/pinMux.o ./PEx/src/watchdog.o -larm_cortexM4lf_math -lstdc++_nano -lm --start-group -lgcc -lg_nano -lc_nano --end-group --start-group -lgcc -lc_nano -lnosys --end-group --start-group -lgcc -lc_nano -lnosys --end-group c:/freescale/kds_3.0.0/toolchain/bin/../lib/gcc/arm-none-eabi/4.9.3/armv7e-m/fpu/crtend.o c:/freescale/kds_3.0.0/toolchain/bin/../lib/gcc/arm-none-eabi/4.9.3/armv7e-m/fpu/crtn.o -T C:/Users/pgvoorhees/OneDrive/Documents/Projects/KDS/881/Project_Settings/ProcessorExpert.ld
./Sources/DAQ/daq.o: In function `daq_spiInit':
C:\Users\pgvoorhees\OneDrive\Documents\Projects\KDS\881\Debug/../Sources/DAQ/daq.c:31: undefined reference to `daqSpiCh1_MasterState'
C:\Users\pgvoorhees\OneDrive\Documents\Projects\KDS\881\Debug/../Sources/DAQ/daq.c:31: undefined reference to `daqSpiCh1_dmaTcd'
C:\Users\pgvoorhees\OneDrive\Documents\Projects\KDS\881\Debug/../Sources/DAQ/daq.c:31: undefined reference to `daqSpiCh1_MasterState'
C:\Users\pgvoorhees\OneDrive\Documents\Projects\KDS\881\Debug/../Sources/DAQ/daq.c:31: undefined reference to `daqSpiCh1_MasterState'
C:\Users\pgvoorhees\OneDrive\Documents\Projects\KDS\881\Debug/../Sources/DAQ/daq.c:31: undefined reference to `daqSpiCh1_MasterState'
collect2.exe: error: ld returned 1 exit status
make: *** [881.elf] Error 1
已解决! 转到解答。