Merge branch 'master' into K20D50

pull/135/head
0xc0170 2013-12-26 09:05:11 +01:00
commit 15e246fc9f
8 changed files with 69 additions and 37 deletions

View File

@ -145,6 +145,7 @@ SECTIONS
. = ALIGN(4) ; . = ALIGN(4) ;
_ebss = .; _ebss = .;
PROVIDE(end = .); PROVIDE(end = .);
__end__ = .;
} > RamLoc8 } > RamLoc8
PROVIDE(_pvHeapStart = .); PROVIDE(_pvHeapStart = .);

View File

@ -9,7 +9,7 @@ extern "C" {
void ResetISR (void); void ResetISR (void);
WEAK void NMI_Handler (void); WEAK void NMI_Handler (void);
WEAK void HardFault_Handler (void); WEAK void HardFault_Handler (void);
WEAK void SVCall_Handler (void); WEAK void SVC_Handler (void);
WEAK void PendSV_Handler (void); WEAK void PendSV_Handler (void);
WEAK void SysTick_Handler (void); WEAK void SysTick_Handler (void);
WEAK void IntDefaultHandler (void); WEAK void IntDefaultHandler (void);
@ -57,7 +57,7 @@ void (* const g_pfnVectors[])(void) = {
0, 0,
0, 0,
0, 0,
SVCall_Handler, SVC_Handler,
0, 0,
0, 0,
PendSV_Handler, PendSV_Handler,
@ -113,6 +113,8 @@ extern unsigned int __data_section_table;
extern unsigned int __data_section_table_end; extern unsigned int __data_section_table_end;
extern unsigned int __bss_section_table_end; extern unsigned int __bss_section_table_end;
extern "C" void software_init_hook(void) __attribute__((weak));
AFTER_VECTORS void ResetISR(void) { AFTER_VECTORS void ResetISR(void) {
unsigned int LoadAddr, ExeAddr, SectionLen; unsigned int LoadAddr, ExeAddr, SectionLen;
unsigned int *SectionTableAddr; unsigned int *SectionTableAddr;
@ -134,14 +136,18 @@ AFTER_VECTORS void ResetISR(void) {
} }
SystemInit(); SystemInit();
__libc_init_array(); if (software_init_hook) // give control to the RTOS
main(); software_init_hook(); // this will also call __libc_init_array
else {
__libc_init_array();
main();
}
while (1) {;} while (1) {;}
} }
AFTER_VECTORS void NMI_Handler (void) {while(1){}} AFTER_VECTORS void NMI_Handler (void) {while(1){}}
AFTER_VECTORS void HardFault_Handler(void) {while(1){}} AFTER_VECTORS void HardFault_Handler(void) {while(1){}}
AFTER_VECTORS void SVCall_Handler (void) {while(1){}} AFTER_VECTORS void SVC_Handler (void) {while(1){}}
AFTER_VECTORS void PendSV_Handler (void) {while(1){}} AFTER_VECTORS void PendSV_Handler (void) {while(1){}}
AFTER_VECTORS void SysTick_Handler (void) {while(1){}} AFTER_VECTORS void SysTick_Handler (void) {while(1){}}
AFTER_VECTORS void IntDefaultHandler(void) {while(1){}} AFTER_VECTORS void IntDefaultHandler(void) {while(1){}}

View File

@ -9,7 +9,7 @@ extern "C" {
void ResetISR (void); void ResetISR (void);
WEAK void NMI_Handler (void); WEAK void NMI_Handler (void);
WEAK void HardFault_Handler (void); WEAK void HardFault_Handler (void);
WEAK void SVCall_Handler (void); WEAK void SVC_Handler (void);
WEAK void PendSV_Handler (void); WEAK void PendSV_Handler (void);
WEAK void SysTick_Handler (void); WEAK void SysTick_Handler (void);
WEAK void IntDefaultHandler (void); WEAK void IntDefaultHandler (void);
@ -57,7 +57,7 @@ void (* const g_pfnVectors[])(void) = {
0, 0,
0, 0,
0, 0,
SVCall_Handler, SVC_Handler,
0, 0,
0, 0,
PendSV_Handler, PendSV_Handler,
@ -113,6 +113,8 @@ extern unsigned int __data_section_table;
extern unsigned int __data_section_table_end; extern unsigned int __data_section_table_end;
extern unsigned int __bss_section_table_end; extern unsigned int __bss_section_table_end;
extern "C" void software_init_hook(void) __attribute__((weak));
AFTER_VECTORS void ResetISR(void) { AFTER_VECTORS void ResetISR(void) {
unsigned int LoadAddr, ExeAddr, SectionLen; unsigned int LoadAddr, ExeAddr, SectionLen;
unsigned int *SectionTableAddr; unsigned int *SectionTableAddr;
@ -134,14 +136,18 @@ AFTER_VECTORS void ResetISR(void) {
} }
SystemInit(); SystemInit();
__libc_init_array(); if (software_init_hook) // give control to the RTOS
main(); software_init_hook(); // this will also call __libc_init_array
else {
__libc_init_array();
main();
}
while (1) {;} while (1) {;}
} }
AFTER_VECTORS void NMI_Handler (void) {while(1){}} AFTER_VECTORS void NMI_Handler (void) {while(1){}}
AFTER_VECTORS void HardFault_Handler(void) {while(1){}} AFTER_VECTORS void HardFault_Handler(void) {while(1){}}
AFTER_VECTORS void SVCall_Handler (void) {while(1){}} AFTER_VECTORS void SVC_Handler (void) {while(1){}}
AFTER_VECTORS void PendSV_Handler (void) {while(1){}} AFTER_VECTORS void PendSV_Handler (void) {while(1){}}
AFTER_VECTORS void SysTick_Handler (void) {while(1){}} AFTER_VECTORS void SysTick_Handler (void) {while(1){}}
AFTER_VECTORS void IntDefaultHandler(void) {while(1){}} AFTER_VECTORS void IntDefaultHandler(void) {while(1){}}

View File

@ -146,6 +146,7 @@ SECTIONS
. = ALIGN(4) ; . = ALIGN(4) ;
_ebss = .; _ebss = .;
PROVIDE(end = .); PROVIDE(end = .);
__end__ = .;
} > RamLoc32 } > RamLoc32
PROVIDE(_pvHeapStart = .); PROVIDE(_pvHeapStart = .);

View File

@ -22,7 +22,7 @@ WEAK void HardFault_Handler (void);
WEAK void MemManage_Handler (void); WEAK void MemManage_Handler (void);
WEAK void BusFault_Handler (void); WEAK void BusFault_Handler (void);
WEAK void UsageFault_Handler(void); WEAK void UsageFault_Handler(void);
WEAK void SVCall_Handler (void); WEAK void SVC_Handler (void);
WEAK void DebugMon_Handler (void); WEAK void DebugMon_Handler (void);
WEAK void PendSV_Handler (void); WEAK void PendSV_Handler (void);
WEAK void SysTick_Handler (void); WEAK void SysTick_Handler (void);
@ -75,7 +75,7 @@ void (* const g_pfnVectors[])(void) = {
0, 0,
0, 0,
0, 0,
SVCall_Handler, SVC_Handler,
DebugMon_Handler, DebugMon_Handler,
0, 0,
PendSV_Handler, PendSV_Handler,
@ -130,6 +130,8 @@ AFTER_VECTORS void bss_init(unsigned int start, unsigned int len) {
for (loop = 0; loop < len; loop = loop + 4) *pulDest++ = 0; for (loop = 0; loop < len; loop = loop + 4) *pulDest++ = 0;
} }
extern "C" void software_init_hook(void) __attribute__((weak));
AFTER_VECTORS void ResetISR(void) { AFTER_VECTORS void ResetISR(void) {
unsigned int LoadAddr, ExeAddr, SectionLen; unsigned int LoadAddr, ExeAddr, SectionLen;
unsigned int *SectionTableAddr; unsigned int *SectionTableAddr;
@ -149,8 +151,12 @@ AFTER_VECTORS void ResetISR(void) {
} }
SystemInit(); SystemInit();
__libc_init_array(); if (software_init_hook) // give control to the RTOS
main(); software_init_hook(); // this will also call __libc_init_array
else {
__libc_init_array();
main();
}
while (1) {;} while (1) {;}
} }
@ -159,7 +165,7 @@ AFTER_VECTORS void HardFault_Handler (void) {}
AFTER_VECTORS void MemManage_Handler (void) {} AFTER_VECTORS void MemManage_Handler (void) {}
AFTER_VECTORS void BusFault_Handler (void) {} AFTER_VECTORS void BusFault_Handler (void) {}
AFTER_VECTORS void UsageFault_Handler(void) {} AFTER_VECTORS void UsageFault_Handler(void) {}
AFTER_VECTORS void SVCall_Handler (void) {} AFTER_VECTORS void SVC_Handler (void) {}
AFTER_VECTORS void DebugMon_Handler (void) {} AFTER_VECTORS void DebugMon_Handler (void) {}
AFTER_VECTORS void PendSV_Handler (void) {} AFTER_VECTORS void PendSV_Handler (void) {}
AFTER_VECTORS void SysTick_Handler (void) {} AFTER_VECTORS void SysTick_Handler (void) {}

View File

@ -156,6 +156,7 @@ SECTIONS
. = ALIGN(4) ; . = ALIGN(4) ;
_ebss = .; _ebss = .;
PROVIDE(end = .); PROVIDE(end = .);
__end__ = .;
} > RamLoc64 } > RamLoc64
/* NOINIT section for RamPeriph32 */ /* NOINIT section for RamPeriph32 */

View File

@ -259,6 +259,9 @@ extern unsigned int __bss_section_table_end;
// Sets up a simple runtime environment and initializes the C/C++ // Sets up a simple runtime environment and initializes the C/C++
// library. // library.
//***************************************************************************** //*****************************************************************************
extern "C" void software_init_hook(void) __attribute__((weak));
__attribute__ ((section(".after_vectors"))) __attribute__ ((section(".after_vectors")))
void void
ResetISR(void) { ResetISR(void) {
@ -319,21 +322,23 @@ ResetISR(void) {
//#ifdef __USE_CMSIS //#ifdef __USE_CMSIS
SystemInit(); SystemInit();
//#endif //#endif
if (software_init_hook) // give control to the RTOS
software_init_hook(); // this will also call __libc_init_array
else {
#if defined (__cplusplus) #if defined (__cplusplus)
// //
// Call C++ library initialisation // Call C++ library initialisation
// //
__libc_init_array(); __libc_init_array();
#endif #endif
#if defined (__REDLIB__) #if defined (__REDLIB__)
// Call the Redlib library, which in turn calls main() // Call the Redlib library, which in turn calls main()
__main() ; __main() ;
#else #else
main(); main();
#endif #endif
}
// //
// main() shouldn't return, but if it does, we'll just enter an infinite loop // main() shouldn't return, but if it does, we'll just enter an infinite loop
// //

View File

@ -312,6 +312,9 @@ extern unsigned int __bss_section_table_end;
// library. // library.
// //
// ***************************************************************************** // *****************************************************************************
extern "C" void software_init_hook(void) __attribute__((weak));
void void
ResetISR(void) { ResetISR(void) {
@ -342,20 +345,23 @@ ResetISR(void) {
bss_init(ExeAddr, SectionLen); bss_init(ExeAddr, SectionLen);
} }
#if defined(__cplusplus) if (software_init_hook) // give control to the RTOS
// software_init_hook(); // this will also call __libc_init_array
// Call C++ library initialisation else {
// #if defined(__cplusplus)
__libc_init_array(); //
#endif // Call C++ library initialisation
//
#if defined(__REDLIB__) __libc_init_array();
// Call the Redlib library, which in turn calls main() #endif
__main();
#else
main();
#endif
#if defined(__REDLIB__)
// Call the Redlib library, which in turn calls main()
__main();
#else
main();
#endif
}
// //
// main() shouldn't return, but if it does, we'll just enter an infinite loop // main() shouldn't return, but if it does, we'll just enter an infinite loop
// //