Title: SNACK: Sensor Network Application Construction Kit
1SNACK Sensor Network Application Construction Kit
Center for Embedded Networked Sensing
Ben Greenstein, Eddie Kohler, Deborah Estrin,
David Culler CENS Systems Lab (http//www.cens.ucl
a.edu)
Introduction Make application development easy
without sacrificing control or efficiency
Sensor Networks are hard to program
Can we doing anything to make it easier?
- Complicated systems implementations
- Complexity of SN systems (due in large part to
the need for efficient use of constrained
resources), has required application development
by systems programmers, not end users - Hand-crafted applicationsComponents,
initializations, and wirings typically are
handcrafted for single services or for monolithic
applications optimized by eye, not by a
compiler -- and require much tinkering upon reuse
- Macrocompiler support for application
construction - SNACKs objective is to automate the difficult
parts of application construction. Its goal is
to provide a way for non-programmers to easily
develop efficient sensor network applications - New component library and configuration
languageHow should components be written? How
should interfaces be specified and used? How
should applications be configured? What sorts of
compiler support can help to achieve our goals?
Problem Description A new configuration
language, component library, and macrocompiler
High-level goals
- Efficient
- Macrocompiler support for structural optimization
- Easy
- Non-programmers can snap together services to
build an application
- Reusable
- Components should be general enough to be reused
in a variety of contexts
- Extensible
- Easy to write new components and wire together
new services
- Flexible
- Default behaviors make it easy to create apps,
while still exposing fine control over
functionality
Proposed Solution New flexibility, new
optimizations
Macrocompiler Tasks
Component Library and Configuration Language
- Declarations
- Named instances of components
- Associative array of parameter types
- Wirings
- Connection of components via their interfaces
- Flexibility in specification
- Access rules for how components can be shared
- Operators and Tokens
- Components
- C classes that inherit from the Component base
class - To provide an interface, inherit from the
interface class - To use an interface, store a pointer to a
instance of the interface class
tmpStampStamp16(type TEMP)
- Precedence Graph Generation
- Looks at precedence relationships and builds a
graph - Instantiation
- Takes a component wiring and determines how
instances of each component need to be created - How many instances?
- What initialization parameters?
- Component Sharing
- Looks for components that can be shared
- Semi-Constrained Initializations
- Shares components with compatible
semi-constrained initializations - Efficient Supersets
- Looks for single components that can replace
sets of components to make things more
efficient - Code Generation
- Generates C main file and a Makefile
Network ..gt fooExtractor Network ..gt
barExtractor becomes Network -gt fooExtractor
-gt barExtractor
Configuration Methodology
tmpStampStamp16(type TEMP) MinRate (period
lt 1000ms)MsgReceiver -gt tmpStamp -gt Network
-gt Extractor16(type TMP)Push16 ..gt
NodeStore16
MinRate(period 100ms)msgReceiver-gtlqeStamp b
ecomes MinRate _minrate_1__minrate_1_.init(100
)_minrate_1_.set_msg_target(lqeStamp)_minrate_
1_.start()
UCLA UCR Caltech USC CSU JPL UC
Merced