As the message I linked to mentioned, the fix in question involves patching msp-gcc. Which means you will need to recompile msp-gcc. The file msp430.c is in the source tree of gcc. As the patch itself quite clearly shows, the file you need to patch resides at $GCC_SOURCE_ROOT/ gcc/config/msp430/msp430.c, where $GCC_SOURCE_ROOT is the directory in which your gcc source tree is located. If you don't have the source of gcc available, you will need to download it from somewhere. Then apply the patch and compile.

Cheers,
Allan


On 12/03/2009, at 6:20 PM, BAI LI wrote:

Hi,

Thanks for your reply. It said how to fix it as follows

Here is a trivial patch:
--- gcc-3.2.3/gcc/config/msp430/msp430.c        2007-08-28
11:07:50.000000000 +0200
+++ gcc-3.2.3patched/gcc/config/msp430/msp430.c 2007-08-28
11:19:17.000000000 +0200
@@ -5414,11 +5414,11 @@
  dummy += 6;
  OUT_INSN (len, "clr\t%B0", operands);
  OUT_INSN (len, "clr\t%C0", operands);
  OUT_INSN (len, "clr\t%D0", operands);

-  if (GET_CODE (operands[0]) == REG)
+  if ((GET_CODE (operands[0]) == REG) && len)
    *len -= 3;

  if (len)
    *len = dummy;
But Where am i supposed to find this msp430.c file. I have searched this entire directory. But It didn't pop up. Thanks.

Regarsd,
Bai

On Thu, Mar 12, 2009 at 3:42 PM, Allan McInnes <[email protected] > wrote: The error you are seeing is a problem with mspgcc, not with Jan's code. You can find a discussion of the bug and suggestions for a bugfix at https://www.millennium.berkeley.edu/pipermail/tinyos-help/2007-August/027578.html

Cheers,
Allan


On 12/03/2009, at 4:27 PM, BAI LI wrote:

Dear Jan amd TinyOS community,

I am working on the hash message transmission part of the Australia government funded project. However I experienced some odd probelms related to the interfaces you developed. Could you help me out what is wrong? I can't see any problems. It could be something wrong with the interface you designed. Thanks.

If anyone can help me out, it will be really appreciated.

Here is the code: in the main file.

#include <Timer.h>
#include "printf.h"
#include "sha1.h"
module App {
  uses interface Boot;
  uses interface Leds;
  uses interface Timer<TMilli> as Timer0;
  uses interface Packet;
  uses interface AMPacket;
  uses interface AMSend;
  uses interface Receive;
  uses interface SplitControl as AMControl;
  uses interface sha1;
  uses interface LocalTime<TMilli>;
}
implementation {
  uint8_t sha1sum[20];

  //uint64_t cmd=0x0000000000000000;   //R XOR S=m


  uint32_t destinationMote=0x00000002;
  uint8_t message[8]={0};
  uint8_t length=8;
  message_t pkt;
  SHA1Context ctx;
  SHA1Context temp;
  bool busy = FALSE;
  uint8_t msg1=0;

  event void Boot.booted() {
    call AMControl.start();
  }
  event void AMControl.startDone(error_t err) {

 if (err == SUCCESS) {


      call Timer0.startOneShot(2000);
    }
    else {
      call AMControl.start();
    }
  }
  event void AMControl.stopDone(error_t err) {
  }
  event void Timer0.fired() {
    uint64_t R=0x0000000000000000;   //R XOR S=m
  uint64_t S=0x1234567890ABCDEF;
    uint64_t M=0x0000000000000000;
  uint64_t m=0x0000000000000000;
 int i;
    //uint64_t hash;
 call Leds.led1On();
 R=call LocalTime.get();
 m=R^S^M;
 for(i=0;i<8;i++){
  message[i]=(uint8_t)(m&0x000000ff);
  m>>=8;
 }
 //printf("m= %lx \n",m);
 //printfflush();
 //*message="abc";
 call sha1.reset(&ctx);
    call sha1.update(&ctx, message,length);
 call sha1.digest(&ctx, sha1sum);

 if(TOS_NODE_ID==0x00000001){
    if (!busy) {
      HashMsg* hmpkt =
 (HashMsg*)(call Packet.getPayload(&pkt, sizeof(HashMsg)));
      if (hmpkt == NULL) {
 return;
      }
   hmpkt->flag=1;
      hmpkt->nodeid = TOS_NODE_ID;
      hmpkt->payload_MD1 = ctx.Intermediate_Hash[0];
   hmpkt->payload_MD2 = ctx.Intermediate_Hash[1];
   hmpkt->payload_MD3 = ctx.Intermediate_Hash[2];
   hmpkt->payload_MD4 = ctx.Intermediate_Hash[3];
   hmpkt->payload_MD5 = ctx.Intermediate_Hash[4];
   hmpkt->payload_M=M;
   hmpkt->payload_R=R;
   if (call AMSend.send(destinationMote,
          &pkt, sizeof(HashMsg)) == SUCCESS) {
  //call Leds.led0On();
        busy = TRUE;
      }
    }
 }
  }


  event void AMSend.sendDone(message_t* msg, error_t err) {
    if (&pkt == msg) {
      busy = FALSE;
    }
  }
event message_t* Receive.receive(message_t* msg, void* payload, uint8_t len){
    uint32_t receivedMD[5]={0};
 uint64_t receivedR=0;
 uint64_t receivedM=0;
 uint64_t receivedm=0;
 uint64_t receivedS=0x1234567890ABCDEF;
 int i;

 HashMsg* hmpkt = (HashMsg*)payload;

 receivedMD[0]=hmpkt->payload_MD1;
 receivedMD[1]=hmpkt->payload_MD2;
 receivedMD[2]=hmpkt->payload_MD3;
 receivedMD[3]=hmpkt->payload_MD4;
 receivedMD[4]=hmpkt->payload_MD5;
 receivedR=hmpkt->payload_R;
 receivedM=hmpkt->payload_M;
    receivedm=receivedR^receivedM^receivedS;

for(i=0;i<8;i++){ //if I removed this FOR part, i can compile it.
  message[i]=(uint8_t)(receivedm&0x000000ff);
  receivedm>>=8;
 }

 call sha1.reset(&temp);
 call sha1.update(&temp, message,length);
 call sha1.digest(&temp, sha1sum);
 call Leds.led1On();

    return msg;
  }


}

If I removed the red highlight part, I can compile it otherwise I got the errors as follows:

/opt/tinyos-2.x/tos/chips/msp430/usart/HplMsp430UsartInterrupts.nc: In function
`App$Receive$receive':
/opt/tinyos-2.x/tos/chips/msp430/usart/HplMsp430UsartInterrupts.nc: 49: internal
error: Segmentation fault
Please submit a full bug report,
with preprocessed source if appropriate.
See <URL:http://gcc.gnu.org/bugs.html> for instructions.
make: *** [exe0] Error 1


Thanks.
_______________________________________________
Tinyos-help mailing list
[email protected]
https://www.millennium.berkeley.edu/cgi-bin/mailman/listinfo/tinyos-help



_______________________________________________
Tinyos-help mailing list
[email protected]
https://www.millennium.berkeley.edu/cgi-bin/mailman/listinfo/tinyos-help

Reply via email to