21#if defined (__cplusplus)
23#error Redlib does not support C++
31 extern void __libc_init_array(
void);
36#define WEAK __attribute__ ((weak))
37#define ALIAS(f) __attribute__ ((weak, alias (#f)))
40#if defined (__cplusplus)
45#if defined (__USE_CMSIS) || defined (__USE_LPCOPEN)
78#if defined (__USE_LPCOPEN)
124#if defined (__USE_LPCOPEN)
143#if defined (__REDLIB__)
144extern void __main(
void);
146extern int main(
void);
152extern void _vStackTop(
void);
159WEAK extern void __valid_user_code_checksum();
162#if defined (__cplusplus)
171extern void (*
const g_pfnVectors[])(void);
173void (* const g_pfnVectors[])(
void) = {
182 __valid_user_code_checksum,
194#if defined (__USE_LPCOPEN)
201 FLASH_EEPROM_IRQHandler,
242#if defined (__USE_LPCOPEN)
265void data_init(
unsigned int romstart,
unsigned int start,
unsigned int len) {
266 unsigned int *pulDest = (
unsigned int*) start;
267 unsigned int *pulSrc = (
unsigned int*) romstart;
269 for (loop = 0; loop < len; loop = loop + 4)
270 *pulDest++ = *pulSrc++;
274void bss_init(
unsigned int start,
unsigned int len) {
275 unsigned int *pulDest = (
unsigned int*) start;
277 for (loop = 0; loop < len; loop = loop + 4)
312#ifndef DONT_RESET_ON_RESTART
315 __asm
volatile (
"cpsid i");
318 unsigned int *RESET_CONTROL = (
unsigned int *) 0x40053100;
326 *(RESET_CONTROL + 0) = 0x10DF1000;
331 *(RESET_CONTROL + 1) = 0x01DFF7FF;
338 volatile unsigned int *NVIC_ICPR = (
unsigned int *) 0xE000E280;
339 unsigned int irqpendloop;
340 for (irqpendloop = 0; irqpendloop < 8; irqpendloop++) {
341 *(NVIC_ICPR + irqpendloop) = 0xFFFFFFFF;
345 __asm
volatile (
"cpsie i");
351#if defined (__USE_LPCOPEN)
358 unsigned int LoadAddr, ExeAddr, SectionLen;
359 unsigned int *SectionTableAddr;
366 LoadAddr = *SectionTableAddr++;
367 ExeAddr = *SectionTableAddr++;
368 SectionLen = *SectionTableAddr++;
369 data_init(LoadAddr, ExeAddr, SectionLen);
374 ExeAddr = *SectionTableAddr++;
375 SectionLen = *SectionTableAddr++;
376 bss_init(ExeAddr, SectionLen);
379#if !defined (__USE_LPCOPEN)
381#if defined (__VFP_FP__) && !defined (__SOFTFP__)
388 asm(
"LDR.W R0, =0xE000ED88");
392 asm(
" ORR R1, R1, #(0xF << 20)");
405 unsigned int * pSCB_VTOR = (
unsigned int *) 0xE000ED08;
406 if ((
unsigned int *) g_pfnVectors != (
unsigned int *) 0x00000000) {
408 *pSCB_VTOR = (
unsigned int) g_pfnVectors;
412#if defined (__USE_CMSIS)
416#if defined (__cplusplus)
423#if defined (__REDLIB__)
unsigned int __data_section_table_end
WEAK void PendSV_Handler(void)
WEAK void MemManage_Handler(void)
WEAK void SVC_Handler(void)
unsigned int __bss_section_table
WEAK void UsageFault_Handler(void)
unsigned int __bss_section_table_end
unsigned int __data_section_table
WEAK void SysTick_Handler(void)
WEAK void IntDefaultHandler(void)
WEAK void HardFault_Handler(void)
void DAC_IRQHandler(void)
__attribute__((section(".after_vectors")))
WEAK void BusFault_Handler(void)
WEAK void NMI_Handler(void)
WEAK void DebugMon_Handler(void)
void UART3_IRQHandler(void)
void UART0_IRQHandler(void)
void UART2_IRQHandler(void)