Microchip® Advanced Software Framework

 All Data Structures Files Functions Variables Typedefs Enumerations Enumerator Macros Groups Pages
Local continuations

Local continuations form the basis for implementing protothreads.

A local continuation can be set in a specific function to capture the state of the function. After a local continuation has been set can be resumed in order to restore the state of the function at the point where the local continuation was set.

Files

file  lc-addrlabels.h
 Implementation of local continuations based on the "Labels as values" feature of gcc.
 
file  lc-switch.h
 Implementation of local continuations based on switch() statement.
 
file  lc.h
 Local continuations.
 

Macros

#define LC_END(s)   }
 
#define LC_END(s)
 
#define LC_H_
 
#define LC_INIT(s)   s = NULL
 
#define LC_INIT(s)   s = 0;
 
#define LC_RESUME(s)   switch(s) { case 0:
 
#define LC_RESUME(s)
 
#define LC_SET(s)   s = __LINE__; case __LINE__:
 
#define LC_SET(s)   do { ({ __label__ resume; resume: (s) = &&resume; }); }while(0)
 

Typedefs

typedef void * lc_t
 
typedef unsigned short lc_t
 

#define LC_END (   s)    }
#define LC_END (   s)
#define LC_H_
#define LC_INIT (   s)    s = NULL
#define LC_INIT (   s)    s = 0;
#define LC_RESUME (   s)    switch(s) { case 0:
#define LC_RESUME (   s)
Value:
do { \
if(s != NULL) { \
goto *s; \
} \
} while(0)
#define NULL
Definition: list.c:49
if(irq_hdl_trx)
Definition: trx_access.c:80
static struct dhcpc_state s
Definition: dhcpc.c:45
#define LC_SET (   s)    s = __LINE__; case __LINE__:
#define LC_SET (   s)    do { ({ __label__ resume; resume: (s) = &&resume; }); }while(0)

typedef void* lc_t
typedef unsigned short lc_t