We are running a survey to help us improve the experience for all of our members. If you see the survey appear, please take the time to tell us about your experience if you can.
Hi
We have two different projects bootloader(without RTX kernal) and Application code (with RTX Kernal).When we laod the bootlaoder and the application code, part of the RAM data will be corrupted.Please guide to resolve this problem.
Software interrupts is not required for the bootlaoder we have not shifted the interrupt address, we are using the same interrupt address
Meomory mapping is as below Bootloader 0 - 0x2000 Application code starts from 0x2000
Thank you Harish
Hi,
Thanks for the reply.
None of the interrupts are used in the bootloader. All the pheripherals functions are in the polling mode
And how do the address of these variables correlate with the map files for the boot loader and the application? And where are they located in relation to stacks, or buffers/arrays you use?
Do you mix assembler and C, so the assembler code may garble any unexpected register, either destroying a value or making the processor use the incorrect address when reading/writing a variable?
does it also go wrong if you burn your application at the entry point to flash, hence if you don't use a bootloader?
It is working fine if i load the Application code at the entry point to flash.
It will also work fine if i use the LPC2300.s (Copyright 2006) in the bootloader
Hi Harish,
(I don't know much about this.)
Just curious about what are the below settings of both your bootloader and application?
UND_Stack_Size EQU 0x00000000 SVC_Stack_Size EQU 0x00000008 ABT_Stack_Size EQU 0x00000000 FIQ_Stack_Size EQU 0x00000000 IRQ_Stack_Size EQU 0x00000100 USR_Stack_Size EQU 0x00000400
Hi John,
thanks for your reply
The settings for the bootloader and applicaiton code are given below
Bootloader UND_Stack_Size EQU 0x00000000 SVC_Stack_Size EQU 0x00000008 ABT_Stack_Size EQU 0x00000000 FIQ_Stack_Size EQU 0x00000000 IRQ_Stack_Size EQU 0x00000100 USR_Stack_Size EQU 0x00000400
Application code UND_Stack_Size EQU 0x00000000 SVC_Stack_Size EQU 0x00000020 ABT_Stack_Size EQU 0x00000000 FIQ_Stack_Size EQU 0x00000000 IRQ_Stack_Size EQU 0x00000100 USR_Stack_Size EQU 0x00000200
The memory for variables, arrays of both bootloader and Application code are allocated in the same RAM area,
Since bootloader is not enabled with the interrupts, The Control will not jump back to the bootloader once the applicaiton code starts running.
diff between the startup files...?
maybe you don't configure external RAM (do you use it...?) correctly?
Could you confirm that, when your application starts, it is running in the Supervisor mode?
Hi ,
The difference is
1. External memory control functionality is added 2. power control for the pheripherals is added 3. Some part of the startup code is modified
we are not using any external RAM .. External flash is used
The Application starts with the supervisor mode and jumps to the user mode once the control comes to main function
you must make sure that both your bootloader and application start in supervisor mode, otherwise stacks will not be configured correctly. make your jump to application function a SWI function.
"The memory for variables, arrays of both bootloader and Application code are allocated in the same RAM area,"
I did expect that. But I was thinking about their relative location, according to the map file. Is your corrupted variables stored directly before or after a stack or an array/buffer, in which case an overflow/underflow would reach into the corrupted variables?