Sensor Network Programming
Why is sensor or embedded system programming different from typical desktop, enterprise, or web programming?
- Highly resource constrained.
- Can't use standard tools.
- Development/debug cycles aren't so simple (lack of direct interfaces for debugging).
- New performance metrics, such as battery power conservation, limited communication facilities.
Can be much more distributed, due to number of nodes.
- Failure is more common
Why is this area of "wireless sensor networks" any different from the way computers in the old days (a generation ago) had to be programmed, with their limited memories, processor speeds and such.
- It's much, much cheaper now.
- Integrated far more into real life situations (sometimes controlling things with sensor nodes).
- We have far better tools: compilers, simulators, analysis techniques, than the old days had.
Major Research Theme
Use powerful software and programming abstractions to do as much clever preprocessing and prediction offline, before deployment in the field. More work up front by cross compilers, trying to eliminate as much as possible from what the sensors need to do.
TinyOS is an operating system for motes; NesC is the programming language used by TinyOS. The NesC compiler is approximately a "precompiler" which adds extra syntax to the C language. The output of NesC is a C program, which is then compiled for a target architecture (like Intel, AVR, TI, etc).
Each time you program a mote, the program contains the entire operating system; essentially, TinyOS is like a library. Programs and libraries are made up of (hopefully reusable) components.