This is version 1.3.2 of the nesC compiler. Installation instructions are in INSTALL. Changes in nesC 1.3.2 ===================== - changed Intel Open Source License files to dual BSD/GPL license - improved support for non-gcc targets: -fnesc-gccize flag, optionally identify "async" function in nescc output - bug fixes (sourceforge bugs 3013497, 3017203, 3019357 and others) - disable use of Apple-specific "blocks" C extension Changes in nesC 1.3.1 ===================== - updated reference manual for language changes since version 1.2.0 - support gcc's -include option when compiling a nesC application - bug fixes Changes in nesC 1.3.0 ===================== - C preprocessor is integrated into nesC, which should significantly speed up compilation (esp. on Windows) - support for the Deputy type-safety-for-C system (see deputy.cs.berkeley.edu). To use Deputy, you add type annotations to your nesC code, then compile with the -fnesc-deputy flag. A bunch of small changes to nesC support the use of deputy. Flags to nescc: -fnesc-deputy: use Deputy in this compilation. You need to have a version of Deputy customized for use with nesC installed for this to work. -fnesc-deputy-args: extra arguments to pass to Deputy. -fnesc-default-safe/-fnesc-default-unsafe: the default safety for C functions and nesC modules (with no option specified, -fnesc-default-unsafe is assumed) Type annotations: NONULL, COUNT(...), etc (see the Deputy-for-nesC documentation for full details), which are actually macros which expand to nesC attributes (@nonnull(), @count(...), etc. Using macros allows Deputy-annotated code to be used with earlier versions of nesC. Type annotations in nesdoc comments: to reduce clutter for non-Deputy users, Deputy's annotations can be placed within a nesdoc comment rather than in a function signature (which then looks like a regular C signature): /** ... @param 'int *@count(n) x' x is an array of n ints ... */ void f(int *x, int n); is the same as void f(int *@count(n) x, int n); Macros can be used in the comment, so the above could also be /** ... @param 'int *COUNT(n) x' x is an array of n ints ... */ void f(int *x, int n); where COUNT(expr) expands to @count(expr). - internal support (in nesc1) for Deputy based on @deputy_scope() and @macro("NAME") attributes, and a -fnesc-genprefix= option. - @macro() and -fnesc-genprerix= may be useful in other contexts too: if a nesC attribute declaration has an @macro() attribute: struct @myattr @macro("MYMACRO") { int x; char *y; }; then uses of @myattr in nesC source are output as calls to MYMACRO in nesC's intermediate C output. For instance int x @myattr(23, "fun"); becomes int x MYMACRO(23, "fun"); The -fnesc-genprefix= adds to the start of the generated C output, e.g., it could be a #define definition for MYMACRO, or a #include of a file with appropriate definitions. - wide strings in XML output now show up as arrays of bytes (and follow the target's byte-level representation of wide strings) - ability to process a C file through nesC (this provides support in C for external types, atomic statements and unique), as follows: nescc -x nesc .c This forces nescc to pass the C file .c through the nesC compiler (normally it would be sent to the regular C compiler), which will process the nesC extensions and then compile the generated C code with the regular C compiler (or whatever compiler was specified with -fnesc-gcc=...) - inside a module, you can now write void f(void) or void f() interchangeably Changes in nesC 1.2.9 ===================== - added uniqueN constant function to allocated N consecutive numbers - fix -fnesc-separator - bug fixes Changes in nesC 1.2.8a ====================== - bug fixes Changes in nesC 1.2.8 ===================== - -fnesc-cppdir option to save preprocessed output - -fnesc-separator option to change symbol separator from $ in generated code - little-endian bitfields now supported in network types (thanks to Matti Juhani Öhman for the approach and some of the code) - internal errors try to report current source location (can be helpful in tracking down problems, but only works for errors that occur during parsing) - updated vim mode from Cory Sharp (cory@moteiv.com) - bug fixes 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, 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 /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() function to complement unique(), 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= 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