[Tinyos-help] nesc1: nesc-semantics.c:145: language_name: Assertion `0' failed. nesc1: nesc-semantics.c:145: language_name: Assertion `0' failed. nesC: Internal error.

Nikolay Valtchanov valtchanov at gmail.com
Wed Feb 27 11:26:47 PST 2008


Hello.

I had a small module written for TinyOS 1 and I wanted to modify it
for TinyOS 2. It was a simple light and humidity sensing module whose
code I'm including after the message I get from the nesc compiler. I
am not sure what is actually throwing it off enough to bail out like
that. Large portions are commented out as I was just trying to compile
this at this point.

Thanks.
Nikolay

nikolay at nikolay-laptop:~/code/tinyos_code/apps/Part2Sender$ make telosb
mkdir -p build/telosb
    compiling Part2AppC to a telosb binary
ncc -o build/telosb/main.exe -Os -O -mdisable-hwmul -Wall -Wshadow
-DDEF_TOS_AM_GROUP=0x7d -Wnesc-all -target=telosb
-fnesc-cfile=build/telosb/app.c -board=
-DIDENT_PROGRAM_NAME=\"Part2AppC\" -DIDENT_USER_ID=\"nikolay\"
-DIDENT_HOSTNAME=\"nikolay-laptop\" -DIDENT_USER_HASH=0x5e662595L
-DIDENT_UNIX_TIME=0x47c5b5e3L -DIDENT_UID_HASH=0xe9451bceL
Part2AppC.nc -lm
nesc1: nesc-semantics.c:145: language_name: Assertion `0' failed.
nesC: Internal error. Please send a bug report to the nesC bug mailing list
at nescc-bugs at lists.sourceforge.net
make: *** [exe0] Error 1


MY AppC FILE:

configuration Part2 {
}
implementation {
  components MainC, Part2C, new TimerMilliC(), LedsC, new
HamamatsuS1087ParC() as LightSensor;//, HumidityC;
//IntToRfmC

  Part2C.Boot -> MainC;
//  MainC.StdControl -> IntToRfmC.StdControl;
//  Main.StdControl -> TimerC.StdControl;
//  MainC.StdControl -> Part2C.StdControl;

//  Part2C.IntOutput -> IntToRfmC;
//  MainC.StdControl -> LightSensor.StdControl;
//  Part2C.LightADC -> LightSensor.PAR;
//  Part2C.ADCControl -> LightSensor;

  Part2C.HumidityTimer -> TimerMilliC;
  Part2C.FreqTimer -> TimerMilliC;
//TimerC.Timer[unique("Timer")];
  Part2C.LightTimer -> TimerMilliC;
//TimerC.Timer[unique("Timer")];
  Part2C.Leds -> LedsC;

//  Part2C.TempADC -> HumidityC.Temperature;
//  Part2C.TempSensorControl -> HumidityC;

  Part2C.ReadLight -> LightSensor;
//  Part2C.ReadHumidity -> HumidityC;
}


MY C FILE:

#include "Timer.h"

module Part2C {
 // provides {
    //interface StdControl;
  //}
  uses {
    interface Boot;

    interface Timer<TMilli> as LightTimer;
    interface Timer<TMilli> as HumidityTimer;
    interface Timer<TMilli> as FreqTimer;

    interface Leds;

    interface Read<uint16_t> as ReadLight;
    interface Read<uint16_t> as ReadHumidity;
  }
}
implementation {


  /**
   * Initialize the component.
   *
   * @return Always returns <code>SUCCESS</code>

  command result_t StdControl.init() {
    call Leds.init();
    call TempSensorControl.init();

    return SUCCESS;
  }
*/

  event void Boot.booted() {
    call FreqTimer.startPeriodic(1000);
    call LightTimer.startPeriodic(2000);
    call HumidityTimer.startPeriodic(5000);
  }

  event void FreqTimer.fired()
  {
    //YellowLED on if light low
    //call Leds.led0On();
    //call Leds.led1On();
    //RedLED on if humidity high
  }

  event void LightTimer.fired()
  {
    call ReadLight.read();
  }

  event void HumidityTimer.fired()
  {
    call ReadHumidity.read();
  }

  event void ReadLight.readDone(error_t result, uint16_t data)
  {
    if (result == SUCCESS){
    if (1.0 *  data < 90) call Leds.led0On();
        else call Leds.led0Off();
    }

  }

  event void ReadHumidity.readDone(error_t result, uint16_t data)
  {
    if (result == SUCCESS){
        if (-38.4 + 0.0098 * data > 29.44) call Leds.led1On();
    else call Leds.led1Off();

    data = data | 32768;


      //message to receiver?
    //call IntOutput.output(data);
    }

  }




  /**
   * Start things up.  This just sets the rate for the clock component.
   *
   * @return Always returns <code>SUCCESS</code>

  command result_t StdControl.start() {
//    call LightTimer.start(TIMER_REPEAT, 1000);
//    call TempTimer.start(TIMER_REPEAT, 5000);
    call LightTimer.startPeriodic( 1000 );
    call TempTimer.startPeriodic( 5000 );
    call TempSensorControl.start();
    return SUCCESS;
  }

*/

  /**
   * Halt execution of the application.
   * This just disables the clock component.
   *
   * @return Always returns <code>SUCCESS</code>
   *
  command result_t StdControl.stop() {
    call LightTimer.stop();
    call TempTimer.stop();
    call TempSensorControl.stop();
    return SUCCESS;
  }
*/

  /**
  * SplitControl requires implementation of these,
  * but we don't need anything inside.
  **
  event result_t TempSensorControl.initDone() {
      return SUCCESS;
  }
  event result_t TempSensorControl.startDone() {
      return SUCCESS;
  }
  event result_t TempSensorControl.stopDone() {
      return SUCCESS;
  }
*/


/*
  // ADC data ready event handler
  async event result_t LightADC.dataReady(uint16_t data) {

    call IntOutput.output(data);

    if (1.0 *  data < 90) call Leds.yellowOn();
    else call Leds.yellowOff();

    return SUCCESS;
  }


  // Formula on the left is in C; 85F = 29.44C
  async event result_t TempADC.dataReady(uint16_t data) {

        if (-38.4 + 0.0098 * data > 29.44) call Leds.greenOn();
      else call Leds.greenOff();

      data = data | 32768;
      call IntOutput.output(data);



      return SUCCESS;
  }
*/

}



-- 
Nikolay Valtchanov
McCormick School of Engineering and Applied Science
Northwestern University 2009
Cell: 614 633 7923


More information about the Tinyos-help mailing list