A C Multithreading Library for Subsumption Architecture, Release 1.00 Copyright (c) 1990 by Richard F. Man Revision History $Log$ Introduction This is a set of C functions that attempts to implement Rodney A. Brooks' subsumption architecture. Contained within it is a semi-portable multithreading executive and a communication manager. The intended target audiences are: 1) people who are doing robotic research and wish to experiment with a subsumption architecture based control system; 2) people who are interested in writing simulation software; and 3) people who are just interested in seeing how a multithreading executive can be implemented. An article (by me) on this library appeared in the November 1991 issue of The C Users Journal; I encourage anyone who reads this to obtain a copy of it since I will not repeat most of the information in the article in here. Copyright And All That (as above) I reserve all rights to this library. You may use it any way you wish in your own programs as long as it is for non-commercial purposes. I doubt there is much commercial potential for the library in its current form, although I do intend to improve on it. You may redistribute this as long as all the files are intact, and the copyright information is included. Brief Glossary Multithreading - executing multiple functions of a single running program in a seemingly concurrent fashion. Subsumption Architecture - a robot control software method invented by Rodney A. Brooks of MIT Mobot Lab. The basic idea is to decompose software in terms of task achieving layers instead of functional modules (see references at the end of my C Users Journal article). There are probably close to a dozen AI Memos written on the subject; I believe you can get a list of the AI Memos from wheatie@ai.mit.edu. What's in This Library? This package contains C source and header files, makefiles for Borland C for DOS and Intermetric HC11 C compiler, and couple assembler files for DOS and HC11. The assembler file implements the stack pointer switching code needed for initial thread startup. The easiest way to write an equivalent file for a different machine other than the HC11 or DOS is to compile the sample C file "execcall.x" down to assembly, then add some statements to the assembler file to switch the stack pointer. Please refer to my artcile and the existing asm files for further hints. Be forwarn that this library assumes that the underlying OS (if any) allows a program to use the runtime heap as the stack. This may not be true with some fussy OSes. This library has been tested with DOS and SunOS 3.0. Of course if you are writing robotic software, then you probably won't have any OS anyway. I recommend you to only use the functions documented in the header files exec.h and stratom.h. All other functions are considered private and may go away in later releases. Plea for Help I need to layout a small PC board with a small number of components (68HC11K4, 84 pins, 32K RAM, max232 RS232, few LEDs, other misc. componenets and expansion connector). If you have PC board layout / routing software and can spare an evening to do that, I would really appreciate it. I look into the commercial boards (NMI, Minotaur, Allen, etc) but they don't quite serve my needs. If you can help, please contact me for more information. I would like to hear about bug reports, improvements, and creative usage of the package. I don't know how close this is to Brooks software since I never actually used Brooks software. PLEASE LET ME KNOW IF YOU THINK I GOT SOME SEMANTIC WRONG. I do intend to provide capabilities similar to the Behavior Language soon. If you are doing research on mobile robots, I'd love to hear about it too. Enjoy! Richard F. Man Internet address: man@labrea.zko.dec.com, if mail bounces, try man@labrea.enet.dec.com USMail: P.O. Box 6, North Chelmsford, MA 01863