aboutsummaryrefslogtreecommitdiffstats
path: root/demos/modules/gos/threads_advanced
diff options
context:
space:
mode:
Diffstat (limited to 'demos/modules/gos/threads_advanced')
-rw-r--r--demos/modules/gos/threads_advanced/gfxconf.h21
-rw-r--r--demos/modules/gos/threads_advanced/main.c25
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(&gt, timerCallback, (void*)&exitThread, FALSE, 2000);
while(TRUE) {
+ DEBUGWRITE("Message from main!\n");
gfxSleepMilliseconds(500);
}
}