Contiki processes
[Contiki system]

A process in Contiki consists of a single protothread. More...

Files

file  process.c
 

Implementation of the Contiki process kernel.


file  process.h
 

Header file for the Contiki process interface.


Functions called from application programs



CCIF struct process * process_current
process_event_t process_alloc_event (void)
 Allocate a global event number.
void process_start (struct process *p, const char *arg)
 Start a process.
void process_exit (struct process *p)
 Cause a process to exit.
int process_post (struct process *p, process_event_t ev, void *data)
 Post an asynchronous event.
void process_post_synch (struct process *p, process_event_t ev, void *data)
 Post a synchronous event to a process.
#define PROCESS_CURRENT()
 Get a pointer to the currently running process.
#define PROCESS_CONTEXT_BEGIN(p)
 Switch context to another process.
#define PROCESS_CONTEXT_END(p)   process_current = tmp_current; }
 End a context switch.

Functions called by the system and boot-up code



void process_init (void)
 Initialize the process module.
int process_run (void)
 Run the system once - call poll handlers and process one event.
int process_nevents (void)
 Number of events waiting to be processed.
int process_is_running (struct process *p)
 Check if a process is running.

Functions called from device drivers



void process_poll (struct process *p)
 Request a process to be polled.

Return values



#define PROCESS_ERR_OK   0
 Return value indicating that an operation was successful.
#define PROCESS_ERR_FULL   1
 Return value indicating that the event queue was full.

Process protothread functions



#define PROCESS_BEGIN()
 Define the beginning of a process.
#define PROCESS_END()
 Define the end of a process.
#define PROCESS_WAIT_EVENT()
 Wait for an event to be posted to the process.
#define PROCESS_WAIT_EVENT_UNTIL(c)
 Wait for an event to be posted to the process, with an extra condition.
#define PROCESS_YIELD()
 Yield the currently running process.
#define PROCESS_YIELD_UNTIL(c)
 Yield the currently running process until a condition occurs.
#define PROCESS_WAIT_UNTIL(c)
 Wait for a condition to occur.
#define PROCESS_WAIT_WHILE(c)   PT_WAIT_WHILE(process_pt, c)
#define PROCESS_EXIT()
 Exit the currently running process.
#define PROCESS_PT_SPAWN(pt, thread)
 Spawn a protothread from the process.
#define PROCESS_PAUSE()
 Yield the process for a short while.

Poll and exit handlers



#define PROCESS_POLLHANDLER(handler)
 Specify an action when a process is polled.
#define PROCESS_EXITHANDLER(handler)
 Specify an action when a process exits.

Process declaration and definition



#define PROCESS_THREAD(name, ev, data)
 Define the body of a process.
#define PROCESS_NAME(name)
 Declare the name of a process.
#define PROCESS(name, strname)
 Declare a process.

Detailed Description

A process in Contiki consists of a single protothread.


Define Documentation

#define PROCESS ( name,
strname   ) 

Declare a process.

This macro declares a process. The process has two names: the variable of the process structure, which is used by the C program, and a human readable string name, which is used when debugging. A configuration option allows removal of the readable name to save RAM.

Parameters:
name The variable name of the process structure.
strname The string representation of the process' name.
Examples:
example-announcement.c, example-broadcast.c, example-collect.c, example-mesh.c, example-multihop.c, example-packet-drv.c, example-pollhandler.c, example-program.c, example-psock-server.c, example-rucb.c, example-rudolph0.c, example-rudolph1.c, example-rudolph2.c, example-runicast.c, example-trickle.c, example-unicast.c, and multi-threading.c.

Definition at line 308 of file process.h.

 
#define PROCESS_BEGIN (  ) 

Define the beginning of a process.

This macro defines the beginning of a process, and must always appear in a PROCESS_THREAD() definition. The PROCESS_END() macro must come at the end of the process.

Examples:
example-announcement.c, example-broadcast.c, example-collect.c, example-mesh.c, example-multihop.c, example-packet-drv.c, example-pollhandler.c, example-program.c, example-psock-server.c, example-rucb.c, example-rudolph0.c, example-rudolph1.c, example-rudolph2.c, example-runicast.c, example-trickle.c, example-unicast.c, and multi-threading.c.

Definition at line 121 of file process.h.

Referenced by PROCESS_THREAD().

#define PROCESS_CONTEXT_BEGIN (  ) 
Value:
{\
struct process *tmp_current = PROCESS_CURRENT();\
process_current = p

Switch context to another process.

This function switch context to the specified process and executes the code as if run by that process. Typical use of this function is to switch context in services, called by other processes. Each PROCESS_CONTEXT_BEGIN() must be followed by the PROCESS_CONTEXT_END() macro to end the context switch.

Example:

Parameters:
p The process to use as context
See also:
PROCESS_CONTEXT_END()
PROCESS_CURRENT()

Definition at line 427 of file process.h.

#define PROCESS_CONTEXT_END (  )     process_current = tmp_current; }

End a context switch.

This function ends a context switch and changes back to the previous process.

Parameters:
p The process used in the context switch
See also:
PROCESS_CONTEXT_START()

Definition at line 441 of file process.h.

 
#define PROCESS_CURRENT (  ) 

Get a pointer to the currently running process.

This macro get a pointer to the currently running process. Typically, this macro is used to post an event to the current process with process_post().

Definition at line 403 of file process.h.

Referenced by udp_attach(), and udp_new().

 
#define PROCESS_END (  ) 

Define the end of a process.

This macro defines the end of a process. It must appear in a PROCESS_THREAD() definition and must always be included. The process exits when the PROCESS_END() macro is reached.

Examples:
example-announcement.c, example-broadcast.c, example-collect.c, example-mesh.c, example-multihop.c, example-packet-drv.c, example-pollhandler.c, example-program.c, example-psock-server.c, example-rucb.c, example-rudolph0.c, example-rudolph1.c, example-rudolph2.c, example-runicast.c, example-trickle.c, example-unicast.c, and multi-threading.c.

Definition at line 132 of file process.h.

Referenced by PROCESS_THREAD().

#define PROCESS_ERR_FULL   1

Return value indicating that the event queue was full.

This value is returned from process_post() to indicate that the event queue was full and that an event could not be posted.

Definition at line 83 of file process.h.

#define PROCESS_ERR_OK   0

Return value indicating that an operation was successful.

This value is returned to indicate that an operation was successful.

Definition at line 75 of file process.h.

#define PROCESS_EXITHANDLER ( handler   ) 

Specify an action when a process exits.

Note:
This declaration must come immediately before the PROCESS_BEGIN() macro.
Parameters:
handler The action to be performed.
Examples:
example-announcement.c, example-broadcast.c, example-mesh.c, example-multihop.c, example-packet-drv.c, example-pollhandler.c, example-rucb.c, example-rudolph0.c, example-rudolph1.c, example-rudolph2.c, example-runicast.c, example-trickle.c, and example-unicast.c.

Definition at line 255 of file process.h.

#define PROCESS_NAME ( name   ) 

Declare the name of a process.

This macro is typically used in header files to declare the name of a process that is implemented in the C file.

Definition at line 287 of file process.h.

 
#define PROCESS_PAUSE (  ) 

Yield the process for a short while.

This macro yields the currently running process for a short while, thus letting other processes run before the process continues.

Examples:
example-rucb.c, example-rudolph0.c, example-rudolph1.c, and example-rudolph2.c.

Definition at line 222 of file process.h.

#define PROCESS_POLLHANDLER ( handler   ) 

Specify an action when a process is polled.

Note:
This declaration must come immediately before the PROCESS_BEGIN() macro.
Parameters:
handler The action to be performed.
Examples:
example-packet-drv.c, and example-pollhandler.c.

Definition at line 243 of file process.h.

Referenced by PROCESS_THREAD().

#define PROCESS_PT_SPAWN ( pt,
thread   ) 

Spawn a protothread from the process.

Parameters:
pt The protothread state (struct pt) for the new protothread
thread The call to the protothread function.
See also:
PT_SPAWN()

Definition at line 212 of file process.h.

#define PROCESS_THREAD ( name,
ev,
data   ) 

Define the body of a process.

This macro is used to define the body (protothread) of a process. The process is called whenever an event occurs in the system, A process always start with the PROCESS_BEGIN() macro and end with the PROCESS_END() macro.

Examples:
example-announcement.c, example-broadcast.c, example-collect.c, example-mesh.c, example-multihop.c, example-packet-drv.c, example-pollhandler.c, example-program.c, example-psock-server.c, example-rucb.c, example-rudolph0.c, example-rudolph1.c, example-rudolph2.c, example-runicast.c, example-trickle.c, example-unicast.c, and multi-threading.c.

Definition at line 274 of file process.h.

 
#define PROCESS_WAIT_EVENT (  ) 

Wait for an event to be posted to the process.

This macro blocks the currently running process until the process receives an event.

Examples:
example-collect.c, example-pollhandler.c, and multi-threading.c.

Definition at line 142 of file process.h.

#define PROCESS_WAIT_EVENT_UNTIL (  ) 

Wait for an event to be posted to the process, with an extra condition.

This macro is similar to PROCESS_WAIT_EVENT() in that it blocks the currently running process until the process receives an event. But PROCESS_WAIT_EVENT_UNTIL() takes an extra condition which must be true for the process to continue.

Parameters:
c The condition that must be true for the process to continue.
See also:
PT_WAIT_UNTIL()
Examples:
example-announcement.c, example-broadcast.c, example-mesh.c, example-multihop.c, example-packet-drv.c, example-program.c, example-psock-server.c, example-rucb.c, example-rudolph0.c, example-rudolph1.c, example-rudolph2.c, example-runicast.c, example-trickle.c, and example-unicast.c.

Definition at line 158 of file process.h.

Referenced by PROCESS_THREAD().

#define PROCESS_WAIT_UNTIL (  ) 

Wait for a condition to occur.

This macro does not guarantee that the process yields, and should therefore be used with care. In most cases, PROCESS_WAIT_EVENT(), PROCESS_WAIT_EVENT_UNTIL(), PROCESS_YIELD() or PROCESS_YIELD_UNTIL() should be used instead.

Parameters:
c The condition to wait for.
Examples:
example-collect.c.

Definition at line 193 of file process.h.

#define PROCESS_YIELD_UNTIL (  ) 

Yield the currently running process until a condition occurs.

This macro is different from PROCESS_WAIT_UNTIL() in that PROCESS_YIELD_UNTIL() is guaranteed to always yield at least once. This ensures that the process does not end up in an infinite loop and monopolizing the CPU.

Parameters:
c The condition to wait for.

Definition at line 179 of file process.h.


Function Documentation

CCIF process_event_t process_alloc_event ( void   ) 

Allocate a global event number.

Returns:
The allocated event number

In Contiki, event numbers above 128 are global and may be posted from one process to another. This function allocates one such event number.

Note:
There currently is no way to deallocate an allocated event number.
CCIF void process_exit ( struct process *  p  ) 

Cause a process to exit.

Parameters:
p The process that is to be exited

This function causes a process to exit. The process can either be the currently executing process, or another process that is currently running.

See also:
PROCESS_CURRENT()
void process_init ( void   ) 

Initialize the process module.

This function initializes the process module and should be called by the system boot-up code.

Referenced by main().

CCIF int process_is_running ( struct process *  p  ) 

Check if a process is running.

This function checks if a specific process is running.

Parameters:
p The process.
Return values:
Non-zero if the process is running.
Zero if the process is not running.
int process_nevents ( void   ) 

Number of events waiting to be processed.

Returns:
The number of events that are currently waiting to be processed.

Referenced by main().

CCIF void process_poll ( struct process *  p  ) 

Request a process to be polled.

This function typically is called from an interrupt handler to cause a process to be polled.

Parameters:
p A pointer to the process' process structure.
Examples:
example-packet-drv.c.

Referenced by cc2420_interrupt(), cc2430_rf_ISR(), dma_ISR(), PROCESS_THREAD(), serial_line_input_byte(), and ST_RadioReceiveIsrCallback().

CCIF int process_post ( struct process *  p,
process_event_t  ev,
void *  data 
)

Post an asynchronous event.

This function posts an asynchronous event to one or more processes. The handing of the event is deferred until the target process is scheduled by the kernel. An event can be broadcast to all processes, in which case all processes in the system will be scheduled to handle the event.

Parameters:
ev The event to be posted.
data The auxiliary data to be sent with the event
p The process to which the event should be posted, or PROCESS_BROADCAST if the event should be posted to all processes.
Return values:
PROCESS_ERR_OK The event could be posted.
PROCESS_ERR_FULL The event queue was full and the event could not be posted.

Referenced by ISR(), resolv_conf(), and tcpip_poll_udp().

CCIF void process_post_synch ( struct process *  p,
process_event_t  ev,
void *  data 
)

Post a synchronous event to a process.

Parameters:
p A pointer to the process' process structure.
ev The event to be posted.
data A pointer to additional data that is posted together with the event.

Referenced by tcpip_input().

int process_run ( void   ) 

Run the system once - call poll handlers and process one event.

This function should be called repeatedly from the main() program to actually run the Contiki system. It calls the necessary poll handlers, and processes one event. The function returns the number of events that are waiting in the event queue so that the caller may choose to put the CPU to sleep when there are no pending events.

Returns:
The number of events that are currently waiting in the event queue.

Referenced by main().

CCIF void process_start ( struct process *  p,
const char *  arg 
)

Start a process.

Parameters:
p A pointer to a process structure.
arg An argument pointer that can be passed to the new process

Referenced by main(), and tr1001_init().


Generated on Mon Apr 11 14:23:53 2011 for Contiki 2.5 by  doxygen 1.6.1