This discussion has been locked.
You can no longer post new replies to this discussion. If you have a question you can start a new discussion

error 47 in debug function when using vector on project

When including and implementing a vector from the STL located at C:\Keil\ARM\ARMCC\include\ the following error occurs when compiling a debug function. What is the link between using a vector and the printf in the debug function? Test is the class DebugSamples is located in.
Removing the vector implementation removes the error

*** error 47, line 22: sizeof returns zero

source code

static vector<float> testVector;

void Test_C::Init(void)
{
 testVector.push_back(1.0f);
}

void Test_C::DebugLog(void)
{
        DebugSamples[0][sampleCount] = amples[0];
        DebugSamples[1][sampleCount] = Samples[1];
        DebugSamples[2][sampleCount] = samples[2];
        DebugSamples[3][sampleCount] = samples[3];
        DebugSamples[4][sampleCount] = samples[4];
        DebugSamples[5][sampleCount] = sampleCount;
        sampleCount++;
        sampleCount %= DEBUG_SAMPLE_LIMIT;
}

debug function

FUNC void log_debug_samples( void )
{
  int num_samples_idx;

  // The >> concatenates to the file and > will create a new file.
  // No data will be logged if > is used and the file already exists.
  // The directory must already exist, also.
  exec("log >> c:/uvdata/mhsmpls.log");

  printf( "\n\ndebug Samples" );

     for ( num_samples_idx = 0; num_samples_idx < 1000; num_samples_idx++ )
     {
        // This prints the values from a private element of a global scope C++ object.
    printf( "\n%f\t%f\t%f\t%f\t%f\t%f",
                Test.DebugSamples[ 0 ][ num_samples_idx ],
                Test.DebugSamples[ 1 ][ num_samples_idx ],
                Test.DebugSamples[ 2 ][ num_samples_idx ],
                Test.DebugSamples[ 3 ][ num_samples_idx ],
                Test.DebugSamples[ 4 ][ num_samples_idx ],
                Test.DebugSamples[ 5 ][ num_samples_idx ]
                         );
     }

  exec("log off");
}

Parents
  • First off, you don't seem to have any source code line doing any "sizeof".

    Second - this does not seem like code that can be compiled - three different names for what seems to be intended to be the same array:

            DebugSamples[0][sampleCount] = amples[0];
            DebugSamples[1][sampleCount] = Samples[1];
            DebugSamples[2][sampleCount] = samples[2];
    


    Is it "amples", "samples" or "Samples" that is correct? Or something completely different?

    Third: Is this really your embedded Keil program that executes a different command like if you had access to an underlying operating system:

    exec("log >> c:/uvdata/mhsmpls.log");
    

    So a big question here - are you mixing up writing C++ code for running in your microcontroller, and writing debug functions for use in the simulator? Note that the simulator functions are neither C nor C++ so you can't expect C/C++ code to function.

Reply
  • First off, you don't seem to have any source code line doing any "sizeof".

    Second - this does not seem like code that can be compiled - three different names for what seems to be intended to be the same array:

            DebugSamples[0][sampleCount] = amples[0];
            DebugSamples[1][sampleCount] = Samples[1];
            DebugSamples[2][sampleCount] = samples[2];
    


    Is it "amples", "samples" or "Samples" that is correct? Or something completely different?

    Third: Is this really your embedded Keil program that executes a different command like if you had access to an underlying operating system:

    exec("log >> c:/uvdata/mhsmpls.log");
    

    So a big question here - are you mixing up writing C++ code for running in your microcontroller, and writing debug functions for use in the simulator? Note that the simulator functions are neither C nor C++ so you can't expect C/C++ code to function.

Children
  • 1.) I do not know what sizeof is referencing, but there is none in the code
    2.) The code is an example that takes samples and puts it into a larger debug array that can be streamed out once a break point has been hit.
    3.)The first code example is a debug function that is executed by the debugger using debug menu -> Function Editor to compile. The second is the code executed on the target to get the data into the debug array

    I am executing on an Infineon XMC4504-512 target.
    Any ARM core that has vectors implemented should have the same issue with using the functionality of executing debug scripts in uVision to get variable data out of a target.