nut/include/sys/thread.h File Reference


Detailed Description

Thread management definitions.

 *
 * $Log: thread.h,v $
 * Revision 1.23  2009/03/05 22:16:57  freckle
 * use __NUT_EMULATION instead of __APPLE__, __linux__, or __CYGWIN__
 *
 * Revision 1.22  2009/02/06 15:37:40  haraldkipp
 * Added stack space multiplier and addend. Adjusted stack space.
 *
 * Revision 1.21  2009/01/19 18:55:12  haraldkipp
 * Added stack checking code.
 *
 * Revision 1.20  2009/01/17 11:26:51  haraldkipp
 * Getting rid of two remaining BSD types in favor of stdint.
 * Replaced 'u_int' by 'unsinged int' and 'uptr_t' by 'uintptr_t'.
 *
 * Revision 1.19  2008/08/11 07:00:28  haraldkipp
 * BSD types replaced by stdint types (feature request #1282721).
 *
 * Revision 1.18  2008/06/15 17:05:52  haraldkipp
 * Rolled back to version 1.16.
 *
 * Revision 1.16  2007/06/14 07:24:38  freckle
 * Disable ADC and buskeeper during idle thread sleep, if IDLE_THREAD_ADC_OFF and IDLE_THREAD_BUSKEEPER_OFF are defined
 *
 * Revision 1.15  2006/09/29 12:24:14  haraldkipp
 * Stack allocation code moved from thread module to heap module.
 * All code should use dedicated stack allocation routines. For targets
 * allocating stack from the normal heap the API calls are remapped by
 * preprocessor macros.
 *
 * Revision 1.14  2006/06/29 03:52:19  hwmaier
 * Added include statement for cfg/memory.h so the macro
 * NUTMEM_STACKHEAP is found when compiling for the
 * AT90CAN128.
 *
 * Revision 1.13  2006/06/28 14:35:31  haraldkipp
 * Event/thread/timer re-design.
 * Code indention corrected.
 * Volatile attribute removed from THREADINFO link pointer.
 *
 * Revision 1.12  2006/03/16 15:25:34  haraldkipp
 * Changed human readable strings from u_char to char to stop GCC 4 from
 * nagging about signedness.
 *
 * Revision 1.11  2005/10/07 21:48:25  hwmaier
 * Using __AVR_ENHANCED__ macro instead of __AVR_ATmega128__ to support also AT90CAN128 MCU
 *
 * Revision 1.10  2005/10/04 05:25:17  hwmaier
 * Added support for separating stack and conventional heap as required by AT09CAN128 MCUs
 *
 * Revision 1.9  2005/08/02 17:46:49  haraldkipp
 * Major API documentation update.
 *
 * Revision 1.8  2005/07/26 15:49:59  haraldkipp
 * Cygwin support added.
 *
 * Revision 1.7  2005/02/17 14:42:37  phblum
 * Removed volatile declarations of runQueue since it is not touched from interrupt context. Same for nutThreadList, runningThread and killedThreads.
 *
 * Revision 1.6  2005/02/16 19:53:15  haraldkipp
 * Ready-to-run queue handling removed from interrupt context.
 *
 * Revision 1.5  2004/07/09 19:51:34  freckle
 * Added new function NutThreadSetSleepMode to tell nut/os to set the MCU
 * into sleep mode when idle (avr-gcc && avr128 only)
 *
 * Revision 1.4  2004/04/07 12:13:57  haraldkipp
 * Matthias Ringwald's *nix emulation added
 *
 * Revision 1.3  2004/03/16 16:48:44  haraldkipp
 * Added Jan Dubiec's H8/300 port.
 *
 * Revision 1.2  2003/12/15 19:28:26  haraldkipp
 * Kill function prototypes
 *
 * Revision 1.1.1.1  2003/05/09 14:41:22  haraldkipp
 * Initial using 3.2.1
 *
 * Revision 1.14  2003/02/04 18:00:54  harald
 * Version 3 released
 *
 * Revision 1.13  2002/10/29 15:40:50  harald
 * *** empty log message ***
 *
 * Revision 1.12  2002/06/26 17:29:29  harald
 * First pre-release with 2.4 stack
 *
 * 

#include <sys/types.h>
#include <cfg/memory.h>
#include <stdint.h>

Data Structures

struct  _NUTTHREADINFO
 Thread information structure. More...

Defines

#define DEADBEEF   0xDEADBEEF
#define NUT_THREAD_STACK_ADD   0
 Stack size summand.
#define NUT_THREAD_STACK_MULT   1
 Stack size factor.
#define SLEEP_MODE_NONE   0xff
#define THREAD(threadfn, arg)
 Macro for thread entry definitions.
Thread States
#define TDS_READY   2
#define TDS_RUNNING   1
#define TDS_SLEEP   3
#define TDS_TERM   0

Typedefs

typedef _NUTTHREADINFO NUTTHREADINFO

Functions

HANDLE GetThreadByName (char *name)
void NutThreadAddPriQueue (NUTTHREADINFO *td, NUTTHREADINFO *volatile *tqpp)
HANDLE NutThreadCreate (char *name, void(*fn)(void *), void *arg, size_t stackSize)
void NutThreadDestroy (void)
void NutThreadExit (void)
__BEGIN_DECLS void NutThreadInit (void)
void NutThreadKill (void)
void NutThreadRemoveQueue (NUTTHREADINFO *td, NUTTHREADINFO *volatile *tqpp)
void NutThreadResume (void)
uint8_t NutThreadSetPriority (uint8_t level)
size_t NutThreadStackAvailable (char *name)
NUTTHREADINFONutThreadStackCheck (size_t minsiz)
void NutThreadSwitch (void)
void NutThreadWake (HANDLE timer, HANDLE th)
void NutThreadYield (void)

Variables

NUTTHREADINFOnutThreadList
NUTTHREADINFOrunningThread
NUTTHREADINFOrunQueue


Define Documentation

#define NUT_THREAD_STACK_ADD   0

Stack size summand.

The specified value will be added to all configured stack sizes.

See NUT_THREAD_STACK_MULT.

#define NUT_THREAD_STACK_MULT   1

Stack size factor.

Configured stack sizes are multiplied with this value.

All stack size settings of internal Nut/OS threads had been calculated for size optimized code. Probably more stack space is required with other compiler settings.

For example, when GCC generates non-optimized code for source code debugging, a factor of 3 should be applied to all stack sizes.

Application code may also make use of this macro.

 #include <sys/thread.h>

 #define MY_THREAD_STACK  ((384 * NUT_THREAD_STACK_MULT) + NUT_THREAD_STACK_ADD)

 NutThreadCreate("myth", ThreadFunc, 0, MY_THREAD_STACK);

See also NUT_THREAD_STACK_ADD.

#define TDS_READY   2

Thread is ready to run.

#define TDS_RUNNING   1

Thread is running.

#define TDS_SLEEP   3

Thread is sleeping.

#define TDS_TERM   0

Thread has exited.

#define THREAD ( threadfn,
arg   ) 

Value:

void threadfn(void *arg) __attribute__ ((noreturn)); \
void threadfn(void *arg)
Macro for thread entry definitions.

Examples:
bt-lego/bt-lego.c, threads/threads.c, and uart-suart/uart-suart.c.


Generated on Wed Apr 29 11:12:30 2009 for BTnut System Software by doxygen 1.5.1