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/TMS320F28388D: No longer able to link after adding 32 bit float DSP library to C2000 project

Part Number: TMS320F28388D
Other Parts Discussed in Thread: C2000WARE,

Tool/software: Code Composer Studio

I have a CCS project using a C2000 core on the F28388 processor. I had included a C2000Ware DSP library (c28x_fixedpoint_dsp_library_fpu32_eabi.lib) to evaluate the fixed-point real FFT functions. That didn't quite meet my needs so I started testing the F32 complex  FFT (in c28x_fpu_dsp_library_eabi.lib) in a separate project. It meets me needs very well, so I tried to incorporate it into my main project.

Now, when I try to link my main project I get this error:

undefined      first referenced 

 symbol            in file
---------      ----------------
__c28xabi_ftod ./Terminal/terminal.obj

error #10234-D: unresolved symbols remain

I have several points in my program that print out single precision floats using sprintf() and an SCI. These all worked before I added the F32 library. Now they cause the link error. If I remove them the error no longer occurs.

I've compared the properties of both projects as best I can and don't see any significant differences other than the fact that the test project did not use the fixedpoint library. When I look at the map files for both projects I see that the test project is linking the rts2800_fpu32_eabi.lib run time support library, while my main project is linking the rts2800_fpu64_eabi.lib library.

Can you suggest a way to get my main project to not try to use the missing function? I think I can work around it by avoiding printf() with a %f format but it disturbs me that this used to work correctly, but now it doesn't.

  • The __c28xabi_ftod function is a compiler run time library to convert from a 32-bit float to a 64 bit double.

    The rts2800_fpu64_eabi.lib library doesn't contain the __c28xabi_ftod function.

    Looking at how the C2000 v20.2.1.LTS compiler handles a float to double conversion in the source code:

    • When --float_support=fpu32 is used the compiler inserts a call to the __c28xabi_ftod function to perform the conversion.
    • When --float_support=fpu64 is used the compiler use the F32TOF64 instruction to perform the conversion.

    What I think is causing the error is that your project for the TMS320F28388D, which contains a FPU64, has the project properties under CCS Build -> C2000 Compiler -> Processor Options with "Specify floating point support (--float_support)" set to fpu32 but then links a library which requires FPU64 support.

    If you change the project properties to set "Specify floating point support (--float_support)" to fpu64 does that allow the project to link and run without error?

    If not, can you perform a re-build of the project and post the complete build output?

  • Chester Gillon said:

    If you change the project properties to set "Specify floating point support (--float_support)" to fpu64 does that allow the project to link and run without error?

    That fixed it. Thank you!

    I had to change the floating point support to fpu64 for both my project and the DSP library, but now it works correctly. I didn't realize the micro had a 64 bit FPU.

    Thanks again!

    Dave