mtkernel_3/kernel/sysdepend/cpu/core/armv7a/reset_main.c | bare source | permlink (0.00 seconds) |
1: /* 2: *---------------------------------------------------------------------- 3: * micro T-Kernel 3.00.05 4: * 5: * Copyright (C) 2006-2021 by Ken Sakamura. 6: * This software is distributed under the T-License 2.2. 7: *---------------------------------------------------------------------- 8: * 9: * Released by TRON Forum(http://www.tron.org) at 2021/11. 10: * 11: *---------------------------------------------------------------------- 12: */ 13: 14: #include <sys/machine.h> 15: #ifdef CPU_CORE_ARMV7A 16: 17: /* 18: * reset_main.c (ARMv7-A) 19: * Reset handler Main routine (Called from reset_hdl.S) 20: */ 21: 22: 23: #include "kernel.h" 24: #include "../../../sysdepend.h" 25: 26: #include <tm/tmonitor.h> 27: 28: /* Low level memory manager information */ 29: EXPORT void *knl_lowmem_top; // Head of area (Low address) 30: EXPORT void *knl_lowmem_limit; // End of area (High address) 31: 32: IMPORT const void *_data_org; 33: IMPORT const void *_data_start; 34: IMPORT const void *_data_end; 35: IMPORT const void *_bss_start; 36: IMPORT const void *_bss_end; 37: IMPORT const void *_HeapStart; 38: 39: void L1CacheInit(void); 40: 41: /* ------------------------------------------------------------------------ */ 42: /* 43: * Reset Handler Main routine (Called from reset_hdl.S) 44: */ 45: 46: EXPORT void reset_main(void) 47: { 48: UW *src, *top, *end; 49: 50: /* Startup Hardware */ 51: knl_startup_hw(); 52: 53: /* Load .data to ram */ 54: 55: src = (UW*)&_data_org;; 56: top = (UW*)&_data_start; 57: end = (UW*)&_data_end; 58: while(top < end) { 59: *top++ = *src++; 60: } 61: 62: /* Initialize .bss */ 63: top = (UW*)&_bss_start; 64: end = (UW*)&_bss_end; 65: while( top < end) { 66: *top++ = 0; 67: } 68: 69: #if USE_IMALLOC 70: /* Set System memory area */ 71: if(INTERNAL_RAM_START > SYSTEMAREA_TOP) { 72: knl_lowmem_top = (UW*)INTERNAL_RAM_START; 73: } else { 74: knl_lowmem_top = (UW*)SYSTEMAREA_TOP; 75: } 76: if((UW)knl_lowmem_top < (UW)&_HeapStart) { 77: knl_lowmem_top = (UW*)&_HeapStart; 78: } 79: 80: if((SYSTEMAREA_END != 0) && (INTERNAL_RAM_END > SYSTEMAREA_END)) { 81: knl_lowmem_limit = (UW*)(SYSTEMAREA_END); 82: } else { 83: knl_lowmem_limit = (UW*)(INTERNAL_RAM_END); 84: } 85: #endif /* USE_IMALLOC */ 86: 87: L1CacheInit(); /* L1 cache initialize */ 88: 89: /* Startup Kernel */ 90: main(); /**** No return ****/ 91: while(1); /* guard - infinite loops */ 92: } 93: 94: 95: #endif /* CPU_CORE_ARMV7A */ 96: