Merge branch 'master' into STM32F7_Discovery
This commit is contained in:
commit
732bccb57a
9 changed files with 135 additions and 116 deletions
|
@ -1,39 +1,43 @@
|
|||
/*
|
||||
* Copyright (c) 2012, 2013, Joel Bodenmann aka Tectu <joel@unormal.org>
|
||||
* Copyright (c) 2012, 2013, Andrew Hannam aka inmarket
|
||||
/**
|
||||
* This file has a different license to the rest of the uGFX system.
|
||||
* You can copy, modify and distribute this file as you see fit.
|
||||
* You do not need to publish your source modifications to this file.
|
||||
* The only thing you are not permitted to do is to relicense it
|
||||
* under a different license.
|
||||
*/
|
||||
|
||||
/**
|
||||
* Copy this file into your project directory and rename it as gfxconf.h
|
||||
* Edit your copy to turn on the uGFX features you want to use.
|
||||
* The values below are the defaults.
|
||||
*
|
||||
* All rights reserved.
|
||||
* Only remove the comments from lines where you want to change the
|
||||
* default value. This allows definitions to be included from
|
||||
* driver makefiles when required and provides the best future
|
||||
* compatibility for your project.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions are met:
|
||||
* * Redistributions of source code must retain the above copyright
|
||||
* notice, this list of conditions and the following disclaimer.
|
||||
* * Redistributions in binary form must reproduce the above copyright
|
||||
* notice, this list of conditions and the following disclaimer in the
|
||||
* documentation and/or other materials provided with the distribution.
|
||||
* * Neither the name of the <organization> nor the
|
||||
* names of its contributors may be used to endorse or promote products
|
||||
* derived from this software without specific prior written permission.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
|
||||
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
||||
* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
||||
* DISCLAIMED. IN NO EVENT SHALL <COPYRIGHT HOLDER> BE LIABLE FOR ANY
|
||||
* DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
|
||||
* (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
|
||||
* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
|
||||
* ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
||||
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
||||
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
* Please use spaces instead of tabs in this file.
|
||||
*/
|
||||
|
||||
#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
|
||||
|
||||
#endif /* _GFXCONF_H */
|
||||
|
|
|
@ -1,83 +1,55 @@
|
|||
/*
|
||||
* Copyright (c) 2012, 2013, Joel Bodenmann aka Tectu <joel@unormal.org>
|
||||
* Copyright (c) 2012, 2013, Andrew Hannam aka inmarket
|
||||
*
|
||||
* All rights reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions are met:
|
||||
* * Redistributions of source code must retain the above copyright
|
||||
* notice, this list of conditions and the following disclaimer.
|
||||
* * Redistributions in binary form must reproduce the above copyright
|
||||
* notice, this list of conditions and the following disclaimer in the
|
||||
* documentation and/or other materials provided with the distribution.
|
||||
* * Neither the name of the <organization> nor the
|
||||
* names of its contributors may be used to endorse or promote products
|
||||
* derived from this software without specific prior written permission.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
|
||||
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
||||
* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
||||
* DISCLAIMED. IN NO EVENT SHALL <COPYRIGHT HOLDER> BE LIABLE FOR ANY
|
||||
* DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
|
||||
* (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
|
||||
* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
|
||||
* ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
||||
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
||||
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
*/
|
||||
|
||||
#include "gfx.h"
|
||||
|
||||
gfxThreadHandle thd1;
|
||||
gfxThreadHandle thd2;
|
||||
#if defined(WIN32)
|
||||
#include <windows.h>
|
||||
|
||||
/*
|
||||
* Function 1: Prints a message
|
||||
*/
|
||||
threadreturn_t Thread1_function(void* param)
|
||||
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
|
||||
|
||||
threadreturn_t heartbeat1(void* param)
|
||||
{
|
||||
// We don't use the parameter
|
||||
(void)param;
|
||||
(void)param;
|
||||
|
||||
// We never return
|
||||
while (1) {
|
||||
printf("Message from Thread 1\r\n");
|
||||
gfxSleepMilliseconds(500);
|
||||
}
|
||||
while (TRUE) {
|
||||
DEBUGWRITE("thread 1\n");
|
||||
gfxSleepMilliseconds(500);
|
||||
}
|
||||
|
||||
return (threadreturn_t)0;
|
||||
return (threadreturn_t)0;
|
||||
}
|
||||
|
||||
/*
|
||||
* Function 2: Prints a message and appends the parameter
|
||||
*/
|
||||
threadreturn_t Thread2_function(void* param)
|
||||
threadreturn_t heartbeat2(void* param)
|
||||
{
|
||||
int i;
|
||||
(void)param;
|
||||
|
||||
// we never return
|
||||
while (1) {
|
||||
printf("Message from Thread 2: %s\r\n", (char*)param);
|
||||
gfxSleepMilliseconds(500);
|
||||
}
|
||||
while (TRUE) {
|
||||
DEBUGWRITE("thread 2\n");
|
||||
gfxSleepMilliseconds(900);
|
||||
}
|
||||
|
||||
return (threadreturn_t)0;
|
||||
return (threadreturn_t)0;
|
||||
}
|
||||
|
||||
int main(void)
|
||||
{
|
||||
char* msg = "uGFX";
|
||||
gfxInit();
|
||||
|
||||
gfxInit();
|
||||
// Give this plenty of stack. Stack size optimisation should be a production change only
|
||||
gfxThreadCreate(0, 2048, NORMAL_PRIORITY, heartbeat1, 0);
|
||||
gfxThreadCreate(0, 2048, NORMAL_PRIORITY, heartbeat2, 0);
|
||||
|
||||
/* Create a static thread from the default heap with normal priority. No parameter passed */
|
||||
thd1 = gfxThreadCreate(NULL, 128, NORMAL_PRIORITY, Thread1_function, 0);
|
||||
|
||||
/* Create a static thread from the default heap with normal priority. String parameter passed */
|
||||
thd2 = gfxThreadCreate(NULL, 128, NORMAL_PRIORITY, Thread2_function, (void*)msg);
|
||||
|
||||
while(TRUE) {
|
||||
gfxSleepMilliseconds(500);
|
||||
}
|
||||
while (TRUE) {
|
||||
DEBUGWRITE("thread main\n");
|
||||
gfxSleepMilliseconds(1400);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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
|
||||
|
||||
|
|
|
@ -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);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -1259,7 +1259,7 @@ void gdispGBlitArea(GDisplay *g, coord_t x, coord_t y, coord_t cx, coord_t cy, c
|
|||
{
|
||||
if (x < 0) { cx += x; x = 0; }
|
||||
if (y < 0) { cy += y; y = 0; }
|
||||
if (cx <= 0 || cy <= 0 || x >= g->g.Width || y >= g->g.Height) { MUTEX_EXIT(g); return; }
|
||||
if (cx <= 0 || cy <= 0 || x >= g->g.Width || y >= g->g.Height) { x = y = cx = cy = 0; }
|
||||
g->clipx0 = x;
|
||||
g->clipy0 = y;
|
||||
g->clipx1 = x+cx; if (g->clipx1 > g->g.Width) g->clipx1 = g->g.Width;
|
||||
|
|
|
@ -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 9
|
||||
#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
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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 9
|
||||
#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
|
||||
|
|
Loading…
Add table
Reference in a new issue