python-on-a-chip online compiler

Dependencies:   mbed TSI

Embed: (wiki syntax)

« Back to documentation index

Show/hide line numbers thread.h Source File

thread.h

Go to the documentation of this file.
00001 /*
00002 # This file is Copyright 2007 Dean Hall.
00003 # This file is part of the PyMite VM.
00004 # This file is licensed under the MIT License.
00005 # See the LICENSE file for details.
00006 */
00007 
00008 
00009 #ifndef __THREAD_H__
00010 #define __THREAD_H__
00011 
00012 
00013 /**
00014  * \file
00015  * \brief VM Thread
00016  *
00017  * Encapsulating a frame pointer, a root code object and thread state.
00018  */
00019 
00020 
00021 #include "interp.h"
00022 
00023 
00024  /** Frequency in Hz to switch threads */
00025 #define THREAD_RESCHEDULE_FREQUENCY    10
00026 
00027 
00028 /**
00029  * Interpreter return values
00030  *
00031  * Used to control interpreter loop
00032  * and indicate return value.
00033  * Negative values indicate erroneous results.
00034  * Positive values indicate "continue interpreting",
00035  * but first do something special like reschedule threads
00036  * or (TBD) sweep the heap.
00037  */
00038 typedef enum PmInterpCtrl_e
00039 {
00040     /* other erroneous exits go here with negative values */
00041     INTERP_CTRL_ERR = -1,   /**< Generic error causes exit */
00042     INTERP_CTRL_EXIT = 0,   /**< Normal execution exit */
00043     INTERP_CTRL_CONT = 1,   /**< Continue interpreting */
00044     INTERP_CTRL_RESCHED = 2 /**< Reschedule threads */
00045         /* all positive values indicate "continue interpreting" */
00046 } PmInterpCtrl_t, *pPmInterpCtrl_t;
00047 
00048 /**
00049  * Thread obj
00050  *
00051  */
00052 typedef struct PmThread_s
00053 {
00054     /** object descriptor */
00055     PmObjDesc_t od;
00056 
00057     /** current frame pointer */
00058     pPmFrame_t pframe;
00059 
00060     /**
00061      * Interpreter loop control value
00062      *
00063      * A positive value means continue interpreting.
00064      * A zero value means normal interpreter exit.
00065      * A negative value signals an error exit.
00066      */
00067     PmInterpCtrl_t interpctrl;
00068 } PmThread_t,
00069  *pPmThread_t;
00070 
00071 
00072 /**
00073  * Constructs a thread for a root frame.
00074  *
00075  * @param pframe Frame object as a basis for this thread.
00076  * @param r_pobj Return by reference; Ptr to the newly created thread object.
00077  * @return Return status
00078  */
00079 PmReturn_t thread_new(pPmObj_t pframe, pPmObj_t *r_pobj);
00080 
00081 #endif /* __THREAD_H__ */