Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Diff: src/vm/thread.h
- Revision:
- 0:14e5e829dffe
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/src/vm/thread.h Wed Jul 21 12:50:41 2010 +0000 @@ -0,0 +1,88 @@ +/* +# This file is Copyright 2007, 2009 Dean Hall. +# +# This file is part of the PyMite VM. +# The PyMite VM is free software: you can redistribute it and/or modify +# it under the terms of the GNU GENERAL PUBLIC LICENSE Version 2. +# +# The PyMite VM is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +# A copy of the GNU GENERAL PUBLIC LICENSE Version 2 +# is seen in the file COPYING in this directory. +*/ + + +#ifndef __THREAD_H__ +#define __THREAD_H__ + + +/** + * \file + * \brief VM Thread + * + * Encapsulating a frame pointer, a root code object and thread state. + */ + + +#include "interp.h" + + + /** Frequency in Hz to switch threads */ +#define THREAD_RESCHEDULE_FREQUENCY 10 + + +/** + * Interpreter return values + * + * Used to control interpreter loop + * and indicate return value. + * Negative values indicate erroneous results. + * Positive values indicate "continue interpreting", + * but first do something special like reschedule threads + * or (TBD) sweep the heap. + */ +typedef enum PmInterpCtrl_e +{ + /* other erroneous exits go here with negative values */ + INTERP_CTRL_ERR = -1, /**< Generic error causes exit */ + INTERP_CTRL_EXIT = 0, /**< Normal execution exit */ + INTERP_CTRL_CONT = 1, /**< Continue interpreting */ + INTERP_CTRL_RESCHED = 2 /**< Reschedule threads */ + /* all positive values indicate "continue interpreting" */ +} PmInterpCtrl_t, *pPmInterpCtrl_t; + +/** + * Thread obj + * + */ +typedef struct PmThread_s +{ + /** object descriptor */ + PmObjDesc_t od; + + /** current frame pointer */ + pPmFrame_t pframe; + + /** + * Interpreter loop control value + * + * A positive value means continue interpreting. + * A zero value means normal interpreter exit. + * A negative value signals an error exit. + */ + PmInterpCtrl_t interpctrl; +} PmThread_t, + *pPmThread_t; + + +/** + * Constructs a thread for a root frame. + * + * @param pframe Frame object as a basis for this thread. + * @param r_pobj Return by reference; Ptr to the newly created thread object. + * @return Return status + */ +PmReturn_t thread_new(pPmObj_t pframe, pPmObj_t *r_pobj); + +#endif /* __THREAD_H__ */