From 8318e8dc29c571f56742df6ea81d2f8298127826 Mon Sep 17 00:00:00 2001 From: inmarket Date: Wed, 8 Jul 2015 13:53:54 +1000 Subject: [PATCH] Provide better access to compiler optimisations for the raw scheduler --- gfxconf.example.h | 1 + src/gos/gos_arduino.c | 11 ++++++----- src/gos/gos_options.h | 12 ++++++++++++ src/gos/gos_raw32.c | 9 +++++---- 4 files changed, 24 insertions(+), 9 deletions(-) diff --git a/gfxconf.example.h b/gfxconf.example.h index 6b2f6d9d..52c129ef 100644 --- a/gfxconf.example.h +++ b/gfxconf.example.h @@ -40,6 +40,7 @@ // #define INTERRUPTS_ON() optional_code // Options that (should where relevant) apply to all operating systems +// #define GFX_COMPILER GFX_COMPILER_UNKNOWN // #define GFX_NO_OS_INIT FALSE // #define GFX_OS_EXTRA_INIT_FUNCTION myOSInitRoutine // #define GFX_OS_EXTRA_DEINIT_FUNCTION myOSDeInitRoutine diff --git a/src/gos/gos_arduino.c b/src/gos/gos_arduino.c index 0c01a30c..380d528a 100644 --- a/src/gos/gos_arduino.c +++ b/src/gos/gos_arduino.c @@ -229,18 +229,19 @@ void gfxSleepMicroseconds(delaytime_t ms) { * For those it doesn't - read the compiler manuals and the library source code to * work out the correct macro values. * You can use the debugger to work out the values for your compiler and put them here. - * Defining these macros as constant values makes the system behaviour guaranteed but also - * makes your code compiler and cpu architecture dependant. + * Defining these macros as constant values makes the system behavior guaranteed but also + * makes your code compiler and cpu architecture dependent. It also saves a heap of code + * and a few bytes of RAM. */ -#if 0 - // Define your compiler constant values here. - // These example values are for mingw32 compiler (x86). +#if GFX_COMPILER == GFX_COMPILER_MINGW32 #define AUTO_DETECT_MASK FALSE #define STACK_DIR_UP FALSE #define MASK1 0x00000011 #define MASK2 0x00000000 #define STACK_BASE 12 #else + // Use auto-detection of the stack frame format + // Assumes all the relevant stuff to be relocated is in the first 256 bytes of the jmpbuf. #define AUTO_DETECT_MASK TRUE #define STACK_DIR_UP stackdirup // TRUE if the stack grow up instead of down #define MASK1 jmpmask1 // The 1st mask of jmp_buf elements that need relocation diff --git a/src/gos/gos_options.h b/src/gos/gos_options.h index 2f896508..8fb4f51b 100644 --- a/src/gos/gos_options.h +++ b/src/gos/gos_options.h @@ -82,6 +82,18 @@ * @name GOS Optional Parameters * @{ */ + /** + * @brief Enable compiler specific code + * @details Defaults to GFX_COMPILER_UNKNOWN + * @note This is setting enables optimisations that are compiler specific. It does + * not need to be specified as reasonable defaults and various auto-detection + * will happen as required. + */ + #ifndef GFX_COMPILER + #define GFX_COMPILER GFX_COMPILER_UNKNOWN + #endif + #define GFX_COMPILER_UNKNOWN 0 // Unknown compiler + #define GFX_COMPILER_MINGW32 1 // MingW32 (x86) compiler for windows /** * @brief Should uGFX avoid initializing the operating system * @details Defaults to FALSE diff --git a/src/gos/gos_raw32.c b/src/gos/gos_raw32.c index 71d8be08..f1ff6c45 100644 --- a/src/gos/gos_raw32.c +++ b/src/gos/gos_raw32.c @@ -438,17 +438,18 @@ void gfxSleepMicroseconds(delaytime_t ms) { * work out the correct macro values. * You can use the debugger to work out the values for your compiler and put them here. * Defining these macros as constant values makes the system behavior guaranteed but also - * makes your code compiler and cpu architecture dependent. + * makes your code compiler and cpu architecture dependent. It also saves a heap of code + * and a few bytes of RAM. */ -#if 0 - // Define your compiler constant values here. - // These example values are for mingw32 compiler (x86). +#if GFX_COMPILER == GFX_COMPILER_MINGW32 #define AUTO_DETECT_MASK FALSE #define STACK_DIR_UP FALSE #define MASK1 0x00000011 #define MASK2 0x00000000 #define STACK_BASE 12 #else + // Use auto-detection of the stack frame format + // Assumes all the relevant stuff to be relocated is in the first 256 bytes of the jmpbuf. #define AUTO_DETECT_MASK TRUE #define STACK_DIR_UP stackdirup // TRUE if the stack grow up instead of down #define MASK1 jmpmask1 // The 1st mask of jmp_buf elements that need relocation