Other Parts Discussed in Thread: SYSBIOS
Hi,
I am using the AM437x with the following components:
SYSBIOS 6.41.2.41
XDC 3.30.6.67 core
The target is configured with gnu.targets.arm.A9F
The platform is configured with ti.platforms.evmAM437X
led_toggle example from AM437x Industrial SYSBIOS dev kit
The reason why I am posting is that there is a discrepancy between to ways to start up
(1) Set ARM into consistent start state, i.e. SPV mode, MMU off, ARM mode etc, then reload an example led_toggle.out and then run into main() and further into a function called SDKMMUInit(). This function then completes correctly.
(2) Set ARM into consistent start state, i.e. SPV mode, MMU off, ARM mode etc, but now NOT reload, but just do a restart. Then run to main and into the SDKMMUInit() function. The execution inside of that function does not complete and goes to sysbios exit.
Debugging this further I am finding the following distinction between (1) and (2) in a function called
xdctools_3_30_04_52_core/packages/xdc/runtime/Startup.c
If executing like (1), the execFlag=0
If executing like (2), the execFlag=1 and the function returns right away (this is causing the problem of not being able to execute SDKMMUInit() later. It looks like some startup functions are not running based on the flag.
I tested with forcing the execFlag=0 for (2) and the subsequent functions worked.
Can you provide an explanation for the execFlag functionality? How can I enforce that the necessary startup functions run on a simple restart (without reload)?
Void Startup_exec()
{
Int i;
if (module->execFlag) {
return;
}
module->execFlag = TRUE;
for (i = 0; i < Startup_firstFxns.length; i++) {
Startup_firstFxns.elem[i]();
}
(Startup_execImpl)();
for (i = 0; i < Startup_lastFxns.length; i++) {
Startup_lastFxns.elem[i]();
}
}
Thanks,
--Gunter