STM8 port: Now supports the new stack usage analysis API. All automated tests pass.

This commit is contained in:
Kelvin Lawson
2010-03-01 21:04:42 +00:00
parent 2d909ba279
commit 02bdad201f
3 changed files with 25 additions and 41 deletions

View File

@@ -125,7 +125,7 @@
/* Application threads' TCBs */
static ATOM_TCB main_tcb;
/* Idle thread's stack area */
/* Main thread's stack area */
static uint8_t main_thread_stack[MAIN_STACK_SIZE_BYTES];
/* Idle thread's stack area */

View File

@@ -55,8 +55,8 @@ DBG_ASMFLAGS=-xx -u
# Enable stack-checking (disable if not required)
ifeq ($(STACK_CHECK),true)
CFLAGS += -DATOM_STACK_CHECKING
DBG_CFLAGS += -DATOM_STACK_CHECKING
CFLAGS += -dATOM_STACK_CHECKING
DBG_CFLAGS += -dATOM_STACK_CHECKING
endif

View File

@@ -51,56 +51,36 @@
#define IDLE_STACK_SIZE_BYTES 128
/*
* Startup code stack size
*
* This defines the size of stack allowed for the main() startup
* code before the OS is actually started. This needs to be large
* enough to manage the atomOSInit(), atomOSStart() and
* atomThreadCreate() calls which occur before the OS is started.
*
* In this case we use the default startup stack location used by
* the STM8 compiler of the top of RAM above all data sections
* etc. After the OS is started this allocation is no longer required,
* therefore you could alternatively use some location which you
* know that your application will not use until the OS is started.
* Note that you cannot use the idle thread or main thread stack
* here because the stack contexts of these threads are initialised
* during OS creation.
*
* Instead of reusing some application area, here we set aside
* 64 bytes of RAM for this purpose, because we call out to
* several different test applications, and do not know of any
* particular application locations which will be free to use.
*/
#define STARTUP_STACK_SIZE_BYTES 64
/*
* Main thread stack size
*
* Here we utilise the space starting at 64 bytes below the startup
* stack for the Main application thread. Note that this is not a
* required OS kernel thread - you will replace this with your own
* application thread.
* Note that this is not a required OS kernel thread - you will replace
* this with your own application thread.
*
* In this case the Main thread is responsible for calling out to the
* test routines. Once a test routine has finished, the thread remains
* running and loops flashing a LED slowly (if the test passed) or
* quickly (if the test failed).
* running in a loop flashing a LED.
*
* The Main thread stack generally needs to be larger than the idle
* thread stack, as not only does it need to store interrupt handler
* stack saves and context switch saves, but the application main thread
* will generally be carrying out more nested function calls and require
* stack for application code local variables etc.
*/
#define MAIN_STACK_SIZE_BYTES 256
/*
* Startup code stack
*
* Care must be taken to ensure that the data section, BSS section,
* and 64 byte startup section leave enough free space for the main
* thread. You can view the linker-generated map file to view the size
* of the various data sections in your applications. For example if you
* require a 196 byte main thread stack, then the data allocations and
* startup stack combined must not exceed RAMSIZE-196 bytes.
* Some stack space is required at initial startup for running the main()
* routine. This stack space is only temporarily required at first bootup
* and is no longer required as soon as the OS is started. By default
* Cosmic sets this to the top of RAM and it grows down from there.
*
* Because we only need this temporarily you may reuse the area once the
* OS is started, and are free to use some area other than the top of RAM.
* For convenience we just use the default region here.
*/
@@ -113,6 +93,9 @@ extern int _stack;
/* Application threads' TCBs */
static ATOM_TCB main_tcb;
/* Main thread's stack area (large so place outside of the small page0 area on STM8) */
@near static uint8_t main_thread_stack[MAIN_STACK_SIZE_BYTES];
/* Idle thread's stack area (large so place outside of the small page0 area on STM8) */
@near static uint8_t idle_thread_stack[IDLE_STACK_SIZE_BYTES];
@@ -151,7 +134,8 @@ void main ( void )
/* Create an application thread */
status = atomThreadCreate(&main_tcb,
TEST_THREAD_PRIO, main_thread_func, 0,
(POINTER)(&_stack-STARTUP_STACK_SIZE_BYTES));
&main_thread_stack[MAIN_STACK_SIZE_BYTES - 1],
MAIN_STACK_SIZE_BYTES);
if (status == ATOM_OK)
{
/**