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.

AM335x Data Abort Exception on Startup

Other Parts Discussed in Thread: SYSBIOS, AM3358

Hi!


I'm using:

CCS v6.1.3,

c:\ti\bios_6_45_01_29, 

C:\ti\pdk_am335x_1_0_3,

C:\ti\xdctools_3_32_00_06_core, and

C:\ti\uia_2_00_05_50

I had a TI-RTOS project that was blinking an LED under Task control that was running well, so I copied it and started using it to migrate to a custom development board I have, which involved making copies of certain board-specific files (migrating from the EVM-AM335x board) from the PDK\packages\ti\board  library.

That seemed to be going well, when I started running into this odd error (I apologize, I didn't record it -- something about an error compiling <bios_dir>\packages\ti\sysbios\rts\gnu\ReentSupport.c).  But I felt like it was far too complex to sort out.  Instead, I created a brand-new TI-RTOS project:

File > New > CCS Projects > (New CCS Project Dialog) > Project templates and examples > SYS/BIOS > Typical

And then item by item, manually added in the features I needed via APP.CFG User Interface and sometimes manually editing the APP.CFG file (e.g. for the MMU and FirstFunctions[] I needed to get my Clock frequency set up correctly).

Now I am running into something I have never seen before, and I am having difficulty determining what I have done wrong (obviously I am missing something in the APP.CFG, but don't know what it is).  Here is where the CPU Data Abort exception is occurring:

In   C:\ti\bios_6_45_01_29\packages\gnu\targets\arm\rtsv7A\startup.c

void gnu_targets_arm_rtsv7A_startupC(void)
{
    ...

    /* run Startup_exec */
    xdc_runtime_Startup_exec__E();   // <---  This executes just fine

    /* run any constructors */
    count = __init_array_end - __init_array_start;
    for (i = 0; i < count; i++) {
        __init_array_start[i]();     // <--- This is where the data abort exception occurs (count == 1)
    }

    /* call main() */
    extern int main(void);
    retVal = main();

    ...
}

What am I missing in my config???  (Help!)

At this point, I'm just trying to get the LED to blink again and will take it from there to develop the rest of my application.  It's got a timer running with a 24MHz input that drives an "RTOS Clock" set up to "tick" at 2 Hz (just to do a "give" on a semaphore that the task is waiting on).  Since I don't have any particular Intellectual Property embedded in it yet, I have attached the project in case it helps identify what's missing (or in error).

4370.01_MCC_DEBUG_2.zip

Kind regards,
Vic

  • P.S. The GEL file is not in the project, but merely takes the Beaglebone GEL file and adds a couple of lines to turn off an external Watchdog Timer (reset) chip on my custom board here so it doesn't reset the AM3358.
  • Okay -- on a hunch, I started looking around the APP.CFG GUI for anything that didn't look right, and I found

    BIOS.heapSize = 65536
    BIOS > Runtime > Heap size [65536] (textbox)

    and

    Program > Heap size [0 ] (textbox)

    I changed the 0 to 65536 and hit ENTER and Ctrl-S to save, and then the TEXTBOX flipped back to displaying '0' again, but this line showed up (and stayed) in the APP.CFG file:

    Program.heap = 65536

    NOW I am no longer getting that exception and my program is proceeding into the main() function. This issue seems to be solved.


    =-=-=-= BUG ALERT =-=-=-=-=
    Program > Heap size (Heading is >SYS/BIOS > System > Program - Runtime Sizes still displays "0" despite the above line being there.
  • Hi Victor,

    Based on your application it looks like the culprit is in the DMTimer initialization function. Could you step through this and let me know if it fails on the first register write?

    Best,

    Alexander

  • Just saw your message, glad you were able to get it working. I'll look into the heap size issue.

    Thanks.

    Best,
    Alexander