forked from Imagelibrary/rtems
bsp/mpc55xx: Add custom work area init
This commit is contained in:
@@ -64,12 +64,13 @@ libbsp_a_SOURCES += ../../shared/bspclean.c
|
|||||||
libbsp_a_SOURCES += ../../shared/bsplibc.c
|
libbsp_a_SOURCES += ../../shared/bsplibc.c
|
||||||
libbsp_a_SOURCES += ../../shared/bsppost.c
|
libbsp_a_SOURCES += ../../shared/bsppost.c
|
||||||
libbsp_a_SOURCES += ../../shared/bsppredriverhook.c
|
libbsp_a_SOURCES += ../../shared/bsppredriverhook.c
|
||||||
libbsp_a_SOURCES += ../../shared/bspgetworkarea.c
|
libbsp_a_SOURCES += ../../shared/bsppretaskinghook.c
|
||||||
libbsp_a_SOURCES += ../../shared/src/stackalloc.c
|
libbsp_a_SOURCES += ../../shared/src/stackalloc.c
|
||||||
libbsp_a_SOURCES += ../shared/src/bsp-start-zero.S
|
libbsp_a_SOURCES += ../shared/src/bsp-start-zero.S
|
||||||
libbsp_a_SOURCES += ../shared/src/memcpy.c
|
libbsp_a_SOURCES += ../shared/src/memcpy.c
|
||||||
libbsp_a_SOURCES += ../shared/src/tictac.c
|
libbsp_a_SOURCES += ../shared/src/tictac.c
|
||||||
libbsp_a_SOURCES += startup/bspstart.c
|
libbsp_a_SOURCES += startup/bspstart.c
|
||||||
|
libbsp_a_SOURCES += startup/bspworkareainit.c
|
||||||
libbsp_a_SOURCES += startup/exc-vector-base.S
|
libbsp_a_SOURCES += startup/exc-vector-base.S
|
||||||
libbsp_a_SOURCES += startup/get-system-clock.c
|
libbsp_a_SOURCES += startup/get-system-clock.c
|
||||||
libbsp_a_SOURCES += startup/reset.c
|
libbsp_a_SOURCES += startup/reset.c
|
||||||
|
|||||||
@@ -41,8 +41,6 @@
|
|||||||
#include <bsp/start.h>
|
#include <bsp/start.h>
|
||||||
#include <bsp/mpc55xx-config.h>
|
#include <bsp/mpc55xx-config.h>
|
||||||
|
|
||||||
extern Heap_Control *RTEMS_Malloc_Heap;
|
|
||||||
|
|
||||||
/* Symbols defined in linker command file */
|
/* Symbols defined in linker command file */
|
||||||
LINKER_SYMBOL(mpc55xx_exc_vector_base);
|
LINKER_SYMBOL(mpc55xx_exc_vector_base);
|
||||||
|
|
||||||
@@ -142,16 +140,3 @@ void bsp_start(void)
|
|||||||
mpc55xx_emios_initialize(MPC55XX_EMIOS_PRESCALER);
|
mpc55xx_emios_initialize(MPC55XX_EMIOS_PRESCALER);
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
void bsp_pretasking_hook(void)
|
|
||||||
{
|
|
||||||
#if MPC55XX_CHIP_FAMILY == 564
|
|
||||||
_Heap_Extend(
|
|
||||||
RTEMS_Malloc_Heap,
|
|
||||||
bsp_section_rwextra_end,
|
|
||||||
(uintptr_t) bsp_ram_end
|
|
||||||
- (uintptr_t) bsp_section_rwextra_end,
|
|
||||||
NULL
|
|
||||||
);
|
|
||||||
#endif
|
|
||||||
}
|
|
||||||
|
|||||||
@@ -0,0 +1,49 @@
|
|||||||
|
/**
|
||||||
|
* @file
|
||||||
|
*
|
||||||
|
* @ingroup mpc55xx
|
||||||
|
*/
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Copyright (c) 2012 embedded brains GmbH. All rights reserved.
|
||||||
|
*
|
||||||
|
* embedded brains GmbH
|
||||||
|
* Obere Lagerstr. 30
|
||||||
|
* 82178 Puchheim
|
||||||
|
* Germany
|
||||||
|
* <rtems@embedded-brains.de>
|
||||||
|
*
|
||||||
|
* The license and distribution terms for this file may be
|
||||||
|
* found in the file LICENSE in this distribution or at
|
||||||
|
* http://www.rtems.com/license/LICENSE.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include <bsp.h>
|
||||||
|
#include <bsp/bootcard.h>
|
||||||
|
#include <bsp/linker-symbols.h>
|
||||||
|
|
||||||
|
LINKER_SYMBOL(bsp_section_work_bonus_begin);
|
||||||
|
LINKER_SYMBOL(bsp_section_work_bonus_size);
|
||||||
|
|
||||||
|
void bsp_work_area_initialize(void)
|
||||||
|
{
|
||||||
|
Heap_Area areas [] = {
|
||||||
|
{
|
||||||
|
bsp_section_work_begin,
|
||||||
|
(uintptr_t) bsp_section_work_size
|
||||||
|
}, {
|
||||||
|
bsp_section_work_bonus_begin,
|
||||||
|
(uintptr_t) bsp_section_work_bonus_size
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
#ifdef BSP_INTERRUPT_STACK_AT_WORK_AREA_BEGIN
|
||||||
|
areas [0].begin = (char *) areas [0].begin + Configuration.interrupt_stack_size;
|
||||||
|
areas [0].size -= Configuration.interrupt_stack_size;
|
||||||
|
#endif
|
||||||
|
|
||||||
|
bsp_work_area_initialize_with_table(
|
||||||
|
areas,
|
||||||
|
sizeof(areas) / sizeof(areas [0])
|
||||||
|
);
|
||||||
|
}
|
||||||
@@ -18,7 +18,7 @@ REGION_ALIAS ("REGION_DATA", RAM);
|
|||||||
REGION_ALIAS ("REGION_DATA_LOAD", ROM);
|
REGION_ALIAS ("REGION_DATA_LOAD", ROM);
|
||||||
REGION_ALIAS ("REGION_BSS", RAM_EXT);
|
REGION_ALIAS ("REGION_BSS", RAM_EXT);
|
||||||
REGION_ALIAS ("REGION_RWEXTRA", RAM_EXT);
|
REGION_ALIAS ("REGION_RWEXTRA", RAM_EXT);
|
||||||
REGION_ALIAS ("REGION_WORK", RAM_EXT);
|
REGION_ALIAS ("REGION_WORK", RAM);
|
||||||
REGION_ALIAS ("REGION_STACK", RAM);
|
REGION_ALIAS ("REGION_STACK", RAM);
|
||||||
REGION_ALIAS ("REGION_NOCACHE", NOCACHE);
|
REGION_ALIAS ("REGION_NOCACHE", NOCACHE);
|
||||||
REGION_ALIAS ("REGION_NOCACHE_LOAD", NOCACHE);
|
REGION_ALIAS ("REGION_NOCACHE_LOAD", NOCACHE);
|
||||||
|
|||||||
@@ -6,8 +6,17 @@ bsp_rom_start = ORIGIN (ROM);
|
|||||||
bsp_rom_size = LENGTH (ROM);
|
bsp_rom_size = LENGTH (ROM);
|
||||||
bsp_rom_end = bsp_rom_start + bsp_rom_size;
|
bsp_rom_end = bsp_rom_start + bsp_rom_size;
|
||||||
|
|
||||||
bsp_external_ram_start = ORIGIN (RAM_EXT);
|
|
||||||
bsp_external_ram_size = LENGTH (RAM_EXT);
|
|
||||||
bsp_external_ram_end = bsp_external_ram_start + bsp_external_ram_size;
|
|
||||||
|
|
||||||
INCLUDE linkcmds.base
|
INCLUDE linkcmds.base
|
||||||
|
|
||||||
|
SECTIONS {
|
||||||
|
.work_bonus : {
|
||||||
|
/*
|
||||||
|
* This section will occupy the remaining RAM_EXT region and may
|
||||||
|
* contain parts of the RTEMS work space and heap.
|
||||||
|
*/
|
||||||
|
bsp_section_work_bonus_begin = .;
|
||||||
|
. += ORIGIN (RAM_EXT) + LENGTH (RAM_EXT) - ABSOLUTE (.);
|
||||||
|
bsp_section_work_bonus_end = .;
|
||||||
|
} > RAM_EXT AT > RAM_EXT
|
||||||
|
bsp_section_work_bonus_size = bsp_section_work_bonus_end - bsp_section_work_bonus_begin;
|
||||||
|
}
|
||||||
|
|||||||
@@ -2,10 +2,11 @@ MEMORY {
|
|||||||
ROM : ORIGIN = 0x0, LENGTH = 1M
|
ROM : ORIGIN = 0x0, LENGTH = 1M
|
||||||
RAM : ORIGIN = 0x40000000, LENGTH = 64K
|
RAM : ORIGIN = 0x40000000, LENGTH = 64K
|
||||||
RAM_1 : ORIGIN = 0x50000000, LENGTH = 64K
|
RAM_1 : ORIGIN = 0x50000000, LENGTH = 64K
|
||||||
RAM_EXT : ORIGIN = 0x0, LENGTH = 0
|
|
||||||
NOCACHE : ORIGIN = 0x0, LENGTH = 0
|
NOCACHE : ORIGIN = 0x0, LENGTH = 0
|
||||||
}
|
}
|
||||||
|
|
||||||
|
REGION_ALIAS ("RAM_EXT", RAM);
|
||||||
|
|
||||||
bsp_ram_1_start = ORIGIN (RAM_1);
|
bsp_ram_1_start = ORIGIN (RAM_1);
|
||||||
bsp_ram_1_size = LENGTH (RAM_1);
|
bsp_ram_1_size = LENGTH (RAM_1);
|
||||||
bsp_ram_1_end = bsp_ram_1_start + bsp_ram_1_size;
|
bsp_ram_1_end = bsp_ram_1_start + bsp_ram_1_size;
|
||||||
|
|||||||
@@ -20,7 +20,7 @@ REGION_ALIAS ("REGION_DATA", RAM);
|
|||||||
REGION_ALIAS ("REGION_DATA_LOAD", ROM);
|
REGION_ALIAS ("REGION_DATA_LOAD", ROM);
|
||||||
REGION_ALIAS ("REGION_BSS", RAM);
|
REGION_ALIAS ("REGION_BSS", RAM);
|
||||||
REGION_ALIAS ("REGION_RWEXTRA", RAM_EXT);
|
REGION_ALIAS ("REGION_RWEXTRA", RAM_EXT);
|
||||||
REGION_ALIAS ("REGION_WORK", RAM_EXT);
|
REGION_ALIAS ("REGION_WORK", RAM);
|
||||||
REGION_ALIAS ("REGION_STACK", RAM);
|
REGION_ALIAS ("REGION_STACK", RAM);
|
||||||
REGION_ALIAS ("REGION_NOCACHE", NOCACHE);
|
REGION_ALIAS ("REGION_NOCACHE", NOCACHE);
|
||||||
REGION_ALIAS ("REGION_NOCACHE_LOAD", ROM);
|
REGION_ALIAS ("REGION_NOCACHE_LOAD", ROM);
|
||||||
|
|||||||
@@ -18,7 +18,7 @@ REGION_ALIAS ("REGION_DATA", RAM);
|
|||||||
REGION_ALIAS ("REGION_DATA_LOAD", ROM);
|
REGION_ALIAS ("REGION_DATA_LOAD", ROM);
|
||||||
REGION_ALIAS ("REGION_BSS", RAM);
|
REGION_ALIAS ("REGION_BSS", RAM);
|
||||||
REGION_ALIAS ("REGION_RWEXTRA", RAM_EXT);
|
REGION_ALIAS ("REGION_RWEXTRA", RAM_EXT);
|
||||||
REGION_ALIAS ("REGION_WORK", RAM_EXT);
|
REGION_ALIAS ("REGION_WORK", RAM);
|
||||||
REGION_ALIAS ("REGION_STACK", RAM);
|
REGION_ALIAS ("REGION_STACK", RAM);
|
||||||
REGION_ALIAS ("REGION_NOCACHE", NOCACHE);
|
REGION_ALIAS ("REGION_NOCACHE", NOCACHE);
|
||||||
REGION_ALIAS ("REGION_NOCACHE_LOAD", ROM);
|
REGION_ALIAS ("REGION_NOCACHE_LOAD", ROM);
|
||||||
|
|||||||
@@ -18,7 +18,7 @@ REGION_ALIAS ("REGION_DATA", RAM);
|
|||||||
REGION_ALIAS ("REGION_DATA_LOAD", ROM);
|
REGION_ALIAS ("REGION_DATA_LOAD", ROM);
|
||||||
REGION_ALIAS ("REGION_BSS", RAM);
|
REGION_ALIAS ("REGION_BSS", RAM);
|
||||||
REGION_ALIAS ("REGION_RWEXTRA", RAM_EXT);
|
REGION_ALIAS ("REGION_RWEXTRA", RAM_EXT);
|
||||||
REGION_ALIAS ("REGION_WORK", RAM_EXT);
|
REGION_ALIAS ("REGION_WORK", RAM);
|
||||||
REGION_ALIAS ("REGION_STACK", RAM);
|
REGION_ALIAS ("REGION_STACK", RAM);
|
||||||
REGION_ALIAS ("REGION_NOCACHE", NOCACHE);
|
REGION_ALIAS ("REGION_NOCACHE", NOCACHE);
|
||||||
REGION_ALIAS ("REGION_NOCACHE_LOAD", ROM);
|
REGION_ALIAS ("REGION_NOCACHE_LOAD", ROM);
|
||||||
|
|||||||
Reference in New Issue
Block a user