File Release Notes and Changelog
Release Name: v1.2.7
Notes:
This is version 1.2.7a of the nesC compiler.
Installation instructions are in INSTALL. Note that nesC needs patched
versions of the GNU assemblers for the avr and msp430 architectures. For
more information, check the INSTALL file.
Changes in nesC 1.2.7a
======================
- nescc-diff removed (it was unsupported, ran only on AVR, and depends on guile
being installed to work)
Changes in nesC 1.2.7
=====================
- gcc's mode attribute support (this requires a new word_size specification
in the env target)
- bug fixes
Changes in nesC 1.2.6
=====================
- external types now support bitfields (big-endian only - mixing bit-field
endianness within a struct would be extremely confusing and/or tricky)
- -conly option to just compile to C
- better struct/union layout code, which requires a slightly more detailed
target machine description (see src/machine.h)
- #pragma statements are saved and dumped at the end of the generated C code
(if you or your compiler uses #pragma, you'll probably have to move these
somewhere else; however, this cannot be done without understanding of
the pragma itself; hence the nesC compiler leaves this process to a
user-supplied tool)
- bug fixes
Changes in nesC 1.2.5
=====================
- nescc-mig now generates C (ncg has supported C since 1.1.2)
- add __builtin_offsetof keyword to make recent gcc's happy,
and update the gcc-specific asm syntax to reflect recent
gcc changes
- allow types defined in interface files to be used immediately in generic
interface arguments (e.g., interface Timer<TMilli>, where TMilli is
defined in Timer.nc)
- updates to automatic inlining - code should be slightly smaller
- @spontaneous() attribute is automatically added to the __nesc_XXX
functions used by the compiler
- atomic optimisation (experimental): if you specify -fnesc-optimize-atomic,
two optimisations are performed:
o outermost atomics call __nesc_disable/enable_interrupt, which can assume
that interrupts are initially enabled
o "simple" atomic statements have no overhead (interrupts are not disabled)
simple atomic statements are those:
- with no accesses to shared state
- or, at most one access to one byte of shared state
- bug fixes
Changes in nesC 1.2.4
=====================
- bug fixes
Changes in nesC 1.2.3
=====================
- provide network type information in nesC dump output
- bug fixes
Changes in nesC 1.2.2
=====================
- nescc-wiring tool to check wiring constraints - see man page for details
- python mig, ncg support
- XML schema update (should now match nesC dump output)
- Java code now made available in compiled form as nesc.jar (rather than
in source form)
- bug fixes
Changes in nesC 1.2.1
=====================
- external types (nx_...) can now be passed as parameters and returned as
results
- updates to XML dump information to support nesdoc
in particular, remember typedef names
- bug fixes
Changes in nesC 1.2
===================
- generic components and interfaces. See doc/user/generics-1.2.txt.
nesdoc does not support generic components and interfaces (this should be
supported in the next release).
- configuration implementations and component specifications can now
include type and constant declarations; configuration implementations
can refer to these types and constants. These changes are described
alongside the generic component changes, in doc/user/generics-1.2.txt.
- attributes (Java 1.5-style). See doc/user/attributes.txt.
- binary components. See doc/user/binary-components.txt.
- external types, a revamp of nesC 1.1.3's network types. See
doc/user/network-types.txt.
- "includes" is deprecated - use #include instead; note that you
must use #ifndef/#define/#endif for #include'd files in the usual
C style.
- macros in included files now work in ways that are similar to C
(as long as you use #include instead of includes).
- support for compiling task/post into an interface + wiring: this
allows the scheduler to be implemented as a component.
- return can be used in atomic statements (implicitly terminating
the atomic statement).
- the patched AVR assembler has been unbundled from nesC.
- the ncc, mig and nesdoc scripts have been unbundled from nesC (they
are now distributed with the other TinyOS tools).
Changes in nesC 1.1.3
=====================
- network types: platform-independent types to support heterogeneous
networking. See doc/network-types.txt.
- support passing assembler options for nesC programs with -Wa, as usual w/ gcc
- support -I- correctly (see gcc manual)
- initialiser bug fix (some initialisers crashed nesC)
Changes in nesC 1.1.2
=====================
- Misc bug fixes (in particular, work around latest-cygwin weirdness which
causes file corruption)
- Recognise the gcc noinline attribute and don't automatically inline such
functions (patch contributed by Klaus Madsen, nesc@hjernemadsen.org)
- Mac OS X support; avr-gcc not needed when compiling nesC
- Support gcc's -I- idiom to prevent searching current dir for components,
interfaces, etc.
- 64-bit platform support: compile with -DLARGE_ADDRESSES, and
edit the MEMSLICE1 constant in src/libcompat.regions.c to be the number
of unused high-order bits on your platform
- ncg supports C (note that there's no C mig support yet)
Changes in nesC 1.1.1
=====================
- Support for platforms and sensorboards in directories other than
tos/platforms and tos/sensorboards: a platform or sensorboard
can be used if its directory is specified with an explicit -I directive
(see doc/ncc.html for details).
- support for Tython
- support -Wparentheses (warnings on statements like 'if (var = value) ...',
and other similar C pitfalls)
- nesC editing modes for emacs, vim and kde (kate, kwrite, kdevelop):
these are in tools/editor-modes, and get installed to
<installdir>/lib/ncc/editor-modes. Read the appropriate readme.txt file
for installation directions
- msp430 and env targets (env gets the machine specification from an
environment variable and is intended to ease implementation of new
platforms, see doc/envtarget.html for details)
- new hwevent, atomic_hwevent attributes to tell nesC which functions
are interrupt entry points (hwevent: interrupt entry point, invoked
with interrupts enabled; atomic_hwevent: interrupt entry point, invoked
with interrupts disabled) - these should ease porting to new platforms
- new keywords (future use): abstract, component, extends, generic, new
- A few small bug fixes
Changes in nesC 1.1
===================
- Support for new language features:
o atomic sections
o compile-time data race detection
o explicit marking of asynchronous (aka interrupt) code (async keyword on
commands and events)
o automatic combining of results of multiply-wired functions
o initialisers now supported on module variables
o uniqueCount(<string>) function to complement unique(<string>), returning
the number of uses of the latter (useful for dimensioning arrays...)
- new nesC warning flags/changes:
o -W[no-]unexpected-docstring is now -Wnesc-docstring, and defaults to off
o -W[no-]nesc-fnptr: warn for uses of function pointers
o -W[no-]nesc-data-race: turn on[off] compile-time data race detection
o -W[no-]nesc-async: warn [bug in alpha: error] if asynchronous code calls
synchronous code
o -W[no-]nesc-combine: warn when multiply wired functions do not have
a combining function defined on the result type. See tos.h for the
the combining function definition for result_t
o -Wnesc-all: same as -Wnesc-data-race -Wnesc-async -Wnesc-fnptr and
-Wnesc-combine
- The NESC preprocessor symbol is defined to XYZ, where X is the major
version, Y the minor and Z the patchlevel. So nesc 1.1 defines NESC as 110
- Tool chain changes:
o ncc has been split into two files: ncc and nescc
TinyOS-specific code is in ncc, nescc is a "generic" nesC compiler
(nescc does not automatically include tos.h, and does not automatically
add the TinyOS directory structure to the search path)
o the -fnesc-include=<filename> option includes a C file before compiling
the requested component (used by ncc to include tos.h...)
You can specify several -fnesc-include=... options
o A hardware platform X can now more easily be added:
- create directory .../tos/platforms/X
- place a .platform file in .../tos/platforms/X. Look at existing
.platform files for inspiration.
o A sensor board Y can add directories to the search path if there is
a .sensor file in the .../tos/sensorboards/Y directory
(as with .platform, .sensor is just perl code so can modify the
variables used by ncc to achieve whatever effect is necessary)
o set-mote-id works for programs greater than 64K
- New tool to extract (enum) constants from C code: ncg. Usage is similar
to mig.
- Debugging on mica supports with the Atmel JTAG ICE and the AvarICE
project (at http://sourceforge.net/projects/avarice)
- Some improved error messages, miscellaneous bug fixes
Changes:
Changes in nesC 1.2.7a
======================
- nescc-diff removed (it was unsupported, ran only on AVR, and depends on guile
being installed to work)
Changes in nesC 1.2.7
=====================
- gcc's mode attribute support (this requires a new word_size specification
in the env target)
- bug fixes