diff options
Diffstat (limited to 'demos/modules/gos/threads_advanced')
-rw-r--r-- | demos/modules/gos/threads_advanced/gfxconf.h | 21 | ||||
-rw-r--r-- | demos/modules/gos/threads_advanced/main.c | 25 |
2 files changed, 37 insertions, 9 deletions
diff --git a/demos/modules/gos/threads_advanced/gfxconf.h b/demos/modules/gos/threads_advanced/gfxconf.h index f954e973..9a35130a 100644 --- a/demos/modules/gos/threads_advanced/gfxconf.h +++ b/demos/modules/gos/threads_advanced/gfxconf.h @@ -30,11 +30,22 @@ #ifndef _GFXCONF_H #define _GFXCONF_H -/* The operating system to use. One of these must be defined - preferably in your Makefile */ -//#define GFX_USE_OS_CHIBIOS FALSE -//#define GFX_USE_OS_WIN32 FALSE -//#define GFX_USE_OS_LINUX FALSE -//#define GFX_USE_OS_OSX FALSE +/////////////////////////////////////////////////////////////////////////// +// GOS - One of these must be defined, preferably in your Makefile // +/////////////////////////////////////////////////////////////////////////// +//#define GFX_USE_OS_CHIBIOS FALSE +//#define GFX_USE_OS_FREERTOS FALSE +// #define GFX_FREERTOS_USE_TRACE FALSE +//#define GFX_USE_OS_WIN32 FALSE +//#define GFX_USE_OS_LINUX FALSE +//#define GFX_USE_OS_OSX FALSE +//#define GFX_USE_OS_ECOS FALSE +//#define GFX_USE_OS_RAWRTOS FALSE +//#define GFX_USE_OS_RAW32 FALSE + +// We define this here in case you are using raw32 or arduino with this demo +// and have a non-thread-safe C library. +#define GOS_RAW_HEAP_SIZE 10240 #define GFX_USE_GTIMER TRUE diff --git a/demos/modules/gos/threads_advanced/main.c b/demos/modules/gos/threads_advanced/main.c index ecb552ab..89cada9f 100644 --- a/demos/modules/gos/threads_advanced/main.c +++ b/demos/modules/gos/threads_advanced/main.c @@ -43,6 +43,22 @@ GTimer gt; gfxThreadHandle thd; +#if defined(WIN32) + #include <windows.h> + + static DWORD nres; + + // On Win32 don't use the C library fprintf or write as they crash. + // Maybe we just need to add the multi-thread C library options to the compile. + // Instead we use the Win32 API directly as that always works. + #define DEBUGWRITE(str) WriteFile(GetStdHandle(STD_ERROR_HANDLE), str, strlen(str), &nres, 0) +#else + #warning "You must alter this demo to define a DEBUGWRITE macro for your platform." + #warning "Be careful of using C library functions as they sometimes crash if they are not expecting stack changes (if possible use a multi-thread aware C library)" + #warning "You might flash LED's instead if that is better for your platform." + #error "--" +#endif + /* * Thread function * Prints a message @@ -54,7 +70,7 @@ threadreturn_t Thread_function(void* param) /* Execute this until we shall be terminated */ while (*doExit == FALSE) { - printf("Message from Thread\r\n"); + DEBUGWRITE("Message from Thread\n"); gfxSleepMilliseconds(500); } @@ -72,7 +88,7 @@ void timerCallback(void* param) bool_t* threadExit = (bool_t*)param; /* Ask the Thread to fall over the end */ - printf("Closing thread!\r\n"); + DEBUGWRITE("Closing thread!\n"); *threadExit = TRUE; } @@ -91,14 +107,15 @@ int main(void) /* Create a static thread from the default heap with normal priority. * We pass a the parameter to the thread which tells the thread whether to return or not */ - thd = gfxThreadCreate(NULL, 128, NORMAL_PRIORITY, Thread_function, (void*)&exitThread); + thd = gfxThreadCreate(NULL, 2048, NORMAL_PRIORITY, Thread_function, (void*)&exitThread); /* Start the timer. The callback function will be called once after 2000ms - * We will pass the thread handle as a parameter so the timer can ask the thread to termite + * We will pass the thread handle as a parameter so the timer can ask the thread to terminate */ gtimerStart(>, timerCallback, (void*)&exitThread, FALSE, 2000); while(TRUE) { + DEBUGWRITE("Message from main!\n"); gfxSleepMilliseconds(500); } } |