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: def.h:47
if(memp!=NULL)
Definition: memp.c:407
PSOCK_END & s
Definition: wireless/SmartConnect_6LoWPAN/apps/ip64-webserver/httpd.c:132
#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