Hello,
I'm able to use bootloader to run both ARM and DSP binary in stand-alone mode in a very simple way where uartEcho for ARM and LED blinking for DSP
I'm able to use bootloader to run ONLY my "production" binary in ARM (about 32 KB)
However, once I combine ARM "production" with DSP blinking LED, the bootloader runs ONLY DSP with LED blinking and stops ARM where there's no greeting message on serial console from ARM
My questions are
1) Is there any rule required in running both ARM and DSP ?
2) How to debug both ARM and DSP to see where it hangs ?
Thanks,
~Duy-Ky
Is there anything to do with memory usage.
My ARM link script is
//-stack 0x8000 /* SOFTWARE STACK SIZE */-stack 0xF000 /* SOFTWARE STACK SIZE */-heap 0x2000 /* HEAP AREA SIZE */-e Entry/* SPECIFY THE SYSTEM MEMORY MAP */MEMORY{// DDR_MEM : org = 0xC1080000 len = 0x02F7FFFF /* RAM 0xC1080000 ~ C3FFFFFF : C4000000*/ DDR_MEM : org = 0xC0000000 len = 0x04000000 /* RAM 0xC1080000 ~ C3FFFFFF : C4000000*/}/* SPECIFY THE SECTIONS ALLOCATION INTO MEMORY */SECTIONS{ .init : { system_config.lib<init.obj> (.text) } load > 0xC2000000 .text : load > DDR_MEM /* CODE */ .data : load > DDR_MEM .bss : load > DDR_MEM /* GLOBAL & STATIC VARS */ RUN_START(bss_start), RUN_END(bss_end) .const : load > DDR_MEM /* SOFTWARE SYSTEM STACK */ .cinit : load > DDR_MEM /* SOFTWARE SYSTEM STACK */// .stack : load > 0xC3FF7FFC /* SOFTWARE SYSTEM STACK C4000000 - 8004 */ .stack : load > 0xC3FF0FFC /* SOFTWARE SYSTEM STACK C4000000 - F000 */}while my DSP one is
-stack 0x1000-heap 0x1000// ============================================================================// Specify the System Memory Map// ============================================================================MEMORY{ L1P: o = 0x11E00000 l = 0x00008000 L1D: o = 0x11F00000 l = 0x00008000 L2: o = 0x11800000 l = 0x00040000 DDR2: o = 0xC0000000 l = 0x08000000}// ============================================================================// Specify the Sections Allocation into Memory// ============================================================================SECTIONS{ .cinit > DDR2 // Initialization Tables .pinit > DDR2 // Constructor Tables .init_array > DDR2 // .binit > DDR2 // Boot Tables .const > DDR2 // Constant Data .switch > DDR2 // Jump Tables .text > DDR2 // Executable Code .text:_c_int00: align=1024 > DDR2 // Entrypoint GROUP (NEARDP_DATA) // group near data { .neardata .rodata .bss // note: removed fill = 0 } > DDR2 .far: fill = 0x0, load > DDR2 // Far Global & Static Variables .fardata > DDR2 // Far RW Data .stack > DDR2 // Software System Stack .sysmem > DDR2 // Dynamic Memory Allocation Area .cio > DDR2 // C I/O Buffer .vecs > DDR2 // Interrupt Vectors}Thanks,
Duy-Ky,
It looks like your ARM and DSP applications are built to use the same region in shared memory (i.e. 0xC0000000), so that is probably why the system doesn't work correctly. I recommend moving either the ARM or the DSP later in DDR memory to prevent a collision. You should check your .map files to be sure that the ARM and DSP applications don't overlap.
Hope this helps.
Please click the Verify Answer button on this post if it answers your question.
We suggest the consultant to go through the live or online training details below to get more comfortable with the ARM + DSP Environment:
- Live Training: http://focus.ti.com/docs/training/catalog/events/event.jhtml?sku=4DW102644
- Online Training: http://processors.wiki.ti.com/index.php/OMAP%E2%84%A2/DaVinci%E2%84%A2_System_Integration_using_Linux_Workshop
- http://processors.wiki.ti.com/index.php/Example_application_using_DSP_Link_on_OMAPL1x
Also,
From the threads shared it seems like you are using Starterware on the ARM side and BIOS on the DSP side (they have SATA RTFS queries etc). If you don’t plan to use DSPLINK and Linux etc, the other option to look at would be StarterWare also includes three example applications for the IPCLite module. (IPCLite would be used for communication between the ARM and DSP after boot.)