Contiki 2.6

mtarch.h

00001 /*
00002  * Copyright (c) 2007, Takahide Matsutsuka.
00003  * All rights reserved.
00004  *
00005  * Redistribution and use in source and binary forms, with or without
00006  * modification, are permitted provided that the following conditions
00007  * are met:
00008  * 1. Redistributions of source code must retain the above copyright
00009  *    notice, this list of conditions and the following disclaimer.
00010  * 2. Redistributions in binary form must reproduce the above
00011  *    copyright notice, this list of conditions and the following
00012  *    disclaimer in the documentation and/or other materials provided
00013  *    with the distribution.
00014  * 3. The name of the author may not be used to endorse or promote
00015  *    products derived from this software without specific prior
00016  *    written permission.
00017  *
00018  * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS
00019  * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
00020  * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
00021  * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY
00022  * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
00023  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
00024  * GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
00025  * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
00026  * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
00027  * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
00028  * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
00029  *
00030  */
00031  /*
00032   * \file
00033   *     Z80 machine-specific difinitions for supporting multithread.
00034   * 
00035   * \author
00036   *     Takahide Matsutsuka <markn@markn.org>
00037   */
00038 #ifndef __MTARCH_H__
00039 #define __MTARCH_H__
00040 
00041 /* Unit of the stack is 2byte wide. */
00042 #ifndef MTARCH_STACKSIZE
00043 #define MTARCH_STACKSIZE 128
00044 #endif /* MTARCH_STACKSIZE */
00045 
00046 struct mtarch_thread {
00047   /* 
00048    * On top of the mtarch_thread must be the address for the stack pointer.
00049    * See details at mtarch_switch in mtarch.c
00050    */
00051   uint16_t *sp;
00052   /*
00053    * Stack is 2-byte wide, so please note that you need 2 * MTARCH_STACKSIZE
00054    * bytes for the stack area for each thread.
00055    */
00056   uint16_t stack[MTARCH_STACKSIZE];
00057 };
00058 
00059 /*
00060  * A function for debugging purpose, placed here by following other implementations.
00061  */
00062 int mtarch_stack_usage(struct mtarch_thread *t);
00063 
00064 #endif /* __MTARCH_H__ */
00065