Nut/OS  4.10.3
API Reference
thread.c File Reference

Multi-threading support. More...

#include <cfg/os.h>
#include <cfg/memory.h>
#include <string.h>
#include <sys/types.h>
#include <sys/heap.h>
#include <sys/atom.h>
#include <sys/timer.h>
#include <sys/event.h>
#include <sys/thread.h>
#include <sys/nutdebug.h>
#include <sys/osdebug.h>
Include dependency graph for thread.c:

Go to the source code of this file.

Functions

void NutThreadAddPriQueue (NUTTHREADINFO *td, NUTTHREADINFO *volatile *tqpp)
 Add a thread to a prioritiy ordered queue.
void NutThreadRemoveQueue (NUTTHREADINFO *td, NUTTHREADINFO *volatile *tqpp)
 Remove a thread from a specified queue.
void NutThreadResume (void)
 Continue with the highest priority thread, which is ready to run.
void NutThreadWake (HANDLE timer, HANDLE th)
 Resume a previously suspended thread.
void NutThreadYield (void)
 Give up the CPU.
uint8_t NutThreadSetPriority (uint8_t level)
 Set the current thread's priority.
void NutThreadExit (void)
 End the current thread.
void NutThreadDestroy (void)
 Free a thread that was previously killed and release memory back to the OS.
void NutThreadKill (void)
 Kill the running thread.
HANDLE GetThreadByName (char *name)
 Query handle of a thread with a specific name.

Variables

NUTTHREADINFOrunningThread
 Currently running thread.
NUTTHREADINFOkilledThread
 Thread to be killed.
NUTTHREADINFOnutThreadList
 List of all created threads.
NUTTHREADINFOrunQueue
 List of ready-to-run threads.

Detailed Description

Multi-threading support.

This kernel module implements the platform independent part of the Nut/OS cooperative multi-threading.

 *
 * $Log$
 * Revision 1.37  2009/03/05 22:16:57  freckle
 * use __NUT_EMULATION instead of __APPLE__, __linux__, or __CYGWIN__
 *
 * Revision 1.36  2009/02/06 15:41:34  haraldkipp
 * Allow to query the thread handle of the currently running thread without
 * knowing its name (using parameter NULL).
 *
 * Revision 1.35  2009/01/19 18:55:12  haraldkipp
 * Added stack checking code.
 *
 * Revision 1.34  2009/01/17 15:37:52  haraldkipp
 * Added some NUTASSERT macros to check function parameters.
 *
 * Revision 1.33  2009/01/17 11:26:52  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.32  2008/08/11 07:00:34  haraldkipp
 * BSD types replaced by stdint types (feature request #1282721).
 *
 * Revision 1.31  2008/07/07 11:04:28  haraldkipp
 * Configurable ways of handling critical sections for ARM targets.
 *
 * Revision 1.30  2008/06/15 17:09:01  haraldkipp
 * Rolled back to version 1.28.
 *
 * Revision 1.28  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.27  2006/06/28 14:39:41  haraldkipp
 * Event and timer handling re-design, again.
 *
 * Revision 1.26  2006/03/16 15:25:36  haraldkipp
 * Changed human readable strings from u_char to char to stop GCC 4 from
 * nagging about signedness.
 *
 * Revision 1.25  2006/03/02 23:57:54  hwmaier
 * Fixed bug NutStackHeap* functions. The availabe variable was not
 * taken into account.
 *
 * Revision 1.24  2006/02/08 15:20:56  haraldkipp
 * ATmega2561 Support
 *
 * Revision 1.23  2006/01/26 15:34:49  going_nuts
 * adapted to new interrupt handling scheme for unix emulation
 * now uses Unix timer and runs without interrupts unless you emulate other hardware
 *
 * Revision 1.22  2005/10/04 05:14:49  hwmaier
 * Added support for separating stack and conventional heap as required by AT09CAN128 MCUs
 *
 * Revision 1.21  2005/07/26 16:00:16  haraldkipp
 * Cygwin added.
 * Platform dependent part is now located in arch/(target)/context.c
 *
 * Revision 1.20  2005/07/14 08:57:54  freckle
 * Rewrote CS in NutThreadSetPriority
 *
 * Revision 1.19  2005/07/12 13:57:56  freckle
 * Fixed bug in thread not waking up on NutSleep
 *
 * Revision 1.18  2005/06/12 16:56:20  haraldkipp
 * Calls new function to process elapsed timers.
 *
 * Revision 1.17  2005/05/27 17:30:26  drsung
 * Platform dependant files were moved to /arch directory.
 *
 * Revision 1.16  2005/04/19 14:15:28  phblum
 * Moved trace macro to avoid jamming the buffer with yields that do not switch to another thread (e.g. idle thread does so all the time).
 *
 * Revision 1.15  2005/02/21 12:37:57  phblum
 * Removed tabs and added semicolons after NUTTRACER macros
 *
 * Revision 1.14  2005/02/21 00:53:57  hwmaier
 * Changes to incorporate support for AT90CAN128 CPU
 *
 * Revision 1.13  2005/02/17 14:44:39  phblum
 * Removed volatile declarations of runQueue since it is not touched from interrupt context. Same for nutThreadList, runningThread and killedThreads.
 * As runQueue is not modified by interrupts, runningThread == runQueue always. Therefore removed obsolete comparison in NutThreadYield().
 * Removed unnecessary critical section in NutThreadYield.
 * Put NutThreadSwitch call of NutThreadResume into critical section.
 *
 * Revision 1.12  2005/02/16 19:53:17  haraldkipp
 * Ready-to-run queue handling removed from interrupt context.
 *
 * Revision 1.11  2005/01/24 22:34:36  freckle
 * Added new tracer by Phlipp Blum <blum@tik.ee.ethz.ch>
 *
 * Revision 1.10  2005/01/02 10:07:10  haraldkipp
 * Replaced platform dependant formats in debug outputs.
 *
 * Revision 1.9  2004/08/05 12:13:57  freckle
 * Added unix emulation hook in NutThreadYield to safely process
 * NutPostEventAsync calls occuring in non Nut/OS threads.
 * Rewrote the unix read function again using the new unix NutThreadYield hook
 * to call the NutPostEventAsync function safely (fast & correct).
 * _write(nf, 0, 0) aka fflush is ignored on unix emulation.
 *
 * Revision 1.8  2004/04/07 12:13:58  haraldkipp
 * Matthias Ringwald's *nix emulation added
 *
 * Revision 1.7  2004/03/19 09:05:12  jdubiec
 * Fixed format strings declarations for AVR.
 *
 * Revision 1.6  2004/03/16 16:48:45  haraldkipp
 * Added Jan Dubiec's H8/300 port.
 *
 * Revision 1.5  2004/02/01 18:49:48  haraldkipp
 * Added CPU family support
 *
 * Revision 1.4  2003/12/15 19:31:46  haraldkipp
 * Ralph Mason's thread termination and reduced stack frame.
 *
 * Revision 1.3  2003/11/19 12:06:23  drsung
 * CR/LF issue corrected
 *
 * Revision 1.2  2003/11/18 22:18:40  drsung
 * thread name with 8 characters fixed.
 *
 * Revision 1.1.1.1  2003/05/09 14:41:54  haraldkipp
 * Initial using 3.2.1
 *
 * Revision 1.23  2003/05/06 18:56:24  harald
 * Avoid inlining with GCC optimizations
 *
 * Revision 1.22  2003/03/31 14:39:43  harald
 * *** empty log message ***
 *
 * Revision 1.21  2003/02/04 18:15:57  harald
 * Version 3 released
 *
 * Revision 1.20  2002/10/29 15:36:59  harald
 * New function retrieves thread by name
 *
 * Revision 1.19  2002/08/08 17:31:47  harald
 * Imagecraft support by Klaus Ummenhofer
 *
 * Revision 1.18  2002/07/03 16:45:42  harald
 * Using GCC 3.2
 *
 * Revision 1.17  2002/06/26 17:29:44  harald
 * First pre-release with 2.4 stack
 *
 * 

Definition in file thread.c.