[Tinyos-help] [SPAM: 4.000] HplMsp430UsartInterrupts problems

Allan McInnes allan.mcinnes at canterbury.ac.nz
Wed Mar 11 21:42:26 PDT 2009


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
> Tinyos-help at millennium.berkeley.edu
> https://www.millennium.berkeley.edu/cgi-bin/mailman/listinfo/tinyos-help

-------------- next part --------------
An HTML attachment was scrubbed...
URL: https://www.millennium.berkeley.edu/pipermail/tinyos-help/attachments/20090312/eef8f647/attachment.htm 


More information about the Tinyos-help mailing list