Hi,
In my case, I had divided the RAM area between the images. Main image start executing after reset, it invokes its startup() routine to initialize its data, sdata, bss, etc. into RAM(main partition). The main program calls application's init_app() (using function pointer loading this init_app() function location from a fixed flash location) which in tern invokes the it's startup() to initialize application image's data, sdata, bss, etc. into RAM(application partition). So, this init_app() is called only once by the main program.
Once this is done, main image is able to call application image APIs and return as and when required. I used function pointers to call application APIs from the main and vice versa.
Regards,
Biswanath