Trouble with the Multiband Graphic Equalizer SDK, Linker Error

Hello Comunity,

i'm trying to use the Multiband Graphic Equalizer SDK from the Analog Devices website for a university project.

The SDK comes with  an example project (fileio) and i want to use it in my dual core project on the ADSZ-BF561-EZLITE board, on core A whitch does the signal processing.

Like described in the SDKs documentary i'm trying to use the SDK like in the example, but i get a linker error when i  try to  generate an equalizer instance.

What i do in my main file (core a):

outside the main routine i do this:

#include "adi_eq_audpp.h"

// Memory for graphic equalizer instance

char instance_memory[1764]; // eq-spec s. 3

// Memory for input and output buffers

int input_buffer[440];

int output_buffer[440];

in my main routinge (outside while(1)) i do this:

//equalizer

adi_eq_audpp_mem_t memory_blocks;

adi_eq_audpp_instance_t* instance = 0;

adi_eq_audpp_config_t configuration = {};

 

adi_eq_audpp_audio_data_t *input_pcm_data[1] = {input_buffer};

adi_eq_audpp_audio_data_t *output_pcm_data[1] = {output_buffer};

// use same equalizer configuration for all channels

configuration.num_channels = 2;

configuration.sample_rate = 44100;

 

configuration.num_bands = 3;

 

int gains = 1; //evtl. 1200

configuration.gains = &gains;

 

//single graphic equalizer instance

memory_blocks.state.fast.prio0 = instance_memory;

//here i get the error!!

instance = adi_eq_audpp_create(&memory_blocks);

In the last line i get the linker error listed below:

[Error li1021]  The following symbols referenced in processor 'p0' could not be resolved:

        'adi_eq_audpp_create_2_0 [_adi_eq_audpp_create_2_0]' referenced from 'corea.dlb[main_core_A.doj]'

I already tryed to include the "libadi_eq_audpp_bf.dlb" library file delivered with the SDK into my project. I'm not sure if i did this in the right way, i just added the file to the project and it was listed automatically in the linker files of core A. With this i get the linker error listed below:

[Warning li2060]  The following input section(s) that contain program code

        and/or data have not been placed into the executable for processor 'p0'

        as there are no relevant commands specified in the LDF:

        .\libadi_eq_audpp_bf.dlb[adi_eq_audpp.doj](adi_fast_prio0_code)

        .\libadi_eq_audpp_bf.dlb[adi_eq_audpp.doj](adi_slow_noprio_r)

[Error li1060]  The following symbols are referenced, but not mapped:

        '_adi_eq_audpp_create_2_0' referenced from corea.dlb[main_core_A.doj](program)

I'm a little overextended with this at the moment. Does someone of You see what i'm making wrong? Have i added the library to the project right like this?

Thank's in advance,

Chris

  • 0
    •  Analog Employees 
    on Jul 22, 2013 1:29 PM

    Hi Chris,

    The initial li1021 error was probably caused by not including the library in your project. With the library included you are getting those li2060/li1060 warnings/errors.

    The warning indicates that the library has code that cannot be mapped by the linker because that code has been marked with an input section "adi_fast_prio0_code" and "adi_slow_noprio_r" (see the li2060 warning output above), but there are no matching INPUT_SECTIONS commands in the LDF.

    If you open the LDF in the editor you will see it is full of INPUT_SECTIONS commands - typically relating to default section names like "program" and "data". These are used to map data from the objects and libraries in the build that have been marked as 'program' and 'data'. The Linker needs similar commands to map data marked as "adi_fast_prio0_code" and "adi_slow_noprio_r" from the Module Library.

    If you take a look at the example(s) that come with the module, open the LDF file in a text editor or the IDDE's Source Window and search for these strings. You will find INPUT_SECTIONS commands for these. You need to have similar commands in your LDF. Ensure that you only make changes within your project's LDF in the generated $VDSG sections, so that they will be preserved when the LDF is regenerated by the tools.

    Regards,

    Craig.

  • 0
    •  Analog Employees 
    on Jul 23, 2013 9:06 AM

    Hi Chris,

    Unfortunately the software modules require fairly specific placement of high performance code, so are a bit beyond the scope of the New Project Wizard.

    Where possible, use the project options to configure things like heap/stack placement, external memory partitioning, etc. However, when it comes to adding customizations like adding INPUT_SECTIONS commands the only option is to do it manually, and make sure you do it within a generated $VDSG section. The tools that refresh/regenerate the LDF and Startup Code (based on changes to the project options) leave the $VDSG sections intact, including any customizations you make.

    Regards,

    Craig.

  • 0
    •  Analog Employees 
    on Jul 23, 2013 9:25 AM

    Hi Chris,

    I don't want to answer too quickly and set unrealistic expectations... but you're fine with just adding the command(s) as you have. As each line of the VDSG blocks is encapsulated in the comment delimiters, your additions are outside of the scope these comment delimiters, and it will be processed by the Linker.

    Regards,

    Craig.

  • Hi Craig,

    thanks a lot, you solved my problem!

    Like you described i found the strings in the example and i found the strings missing in my project.

    Do you know if there is a way to include a library like this with some projects wizzard?

    The header of the LDF says that i should prefer making changes in the projects wizzard more than changing the file.

    Thanks a lot!

    Chris

  • WOW! Answered in less than 5 minutes!!

    I have one more rookie-question left:

    I placed the missing commands in the LDF between the VDSG like listed below and i'm able to compile/link without warnings or error now. Do i have to uncomment the VDSG block in some way? For me this looks like a comment and not program code...

    /*$VDSG<insert-input-sections-at-the-start-of-l1_code>  */

    /* Text inserted between these $VDSG comments will be preserved */

    INPUT_SECTIONS($OBJECTS(adi_fast_prio0_code)) // missing comment

    /*$VDSG<insert-input-sections-at-the-start-of-l1_code>  */

    Regards,

    chris