Variable xmac_is_on was used both in interrupt and non-interrupt contexts and needs to be volatile

This commit is contained in:
adamdunkels 2009-12-06 23:29:38 +00:00
parent df784546ee
commit 2f105e933a

View file

@ -28,7 +28,7 @@
* *
* This file is part of the Contiki operating system. * This file is part of the Contiki operating system.
* *
* $Id: xmac.c,v 1.46 2009/12/06 17:10:54 adamdunkels Exp $ * $Id: xmac.c,v 1.47 2009/12/06 23:29:38 adamdunkels Exp $
*/ */
/** /**
@ -60,15 +60,9 @@
#include <string.h> #include <string.h>
#ifndef WITH_TIMESYNCH
#define WITH_TIMESYNCH 0
#endif
#ifndef WITH_ACK_OPTIMIZATION #ifndef WITH_ACK_OPTIMIZATION
#define WITH_ACK_OPTIMIZATION 1 #define WITH_ACK_OPTIMIZATION 1
#endif #endif
#ifndef WITH_RANDOM_WAIT_BEFORE_SEND
#define WITH_RANDOM_WAIT_BEFORE_SEND 0
#endif
#ifndef WITH_ENCOUNTER_OPTIMIZATION #ifndef WITH_ENCOUNTER_OPTIMIZATION
#define WITH_ENCOUNTER_OPTIMIZATION 1 #define WITH_ENCOUNTER_OPTIMIZATION 1
#endif #endif
@ -156,7 +150,7 @@ struct xmac_config xmac_config = {
static struct rtimer rt; static struct rtimer rt;
static struct pt pt; static struct pt pt;
static int xmac_is_on = 0; static volatile uint8_t xmac_is_on = 0;
static volatile unsigned char waiting_for_packet = 0; static volatile unsigned char waiting_for_packet = 0;
static volatile unsigned char someone_is_sending = 0; static volatile unsigned char someone_is_sending = 0;
@ -295,10 +289,6 @@ powercycle_turn_radio_on(void)
static char static char
powercycle(struct rtimer *t, void *ptr) powercycle(struct rtimer *t, void *ptr)
{ {
#if WITH_TIMESYNCH
rtimer_clock_t should_be, adjust;
#endif /* WITH_TIMESYNCH */
if(is_streaming) { if(is_streaming) {
if(!RTIMER_CLOCK_LT(RTIMER_NOW(), stream_until)) { if(!RTIMER_CLOCK_LT(RTIMER_NOW(), stream_until)) {
is_streaming = 0; is_streaming = 0;
@ -307,7 +297,6 @@ powercycle(struct rtimer *t, void *ptr)
} }
} }
PT_BEGIN(&pt); PT_BEGIN(&pt);
while(1) { while(1) {
@ -458,14 +447,6 @@ send_packet(void)
int is_already_streaming = 0; int is_already_streaming = 0;
uint8_t collisions; uint8_t collisions;
#if WITH_RANDOM_WAIT_BEFORE_SEND
{
rtimer_clock_t t = RTIMER_NOW() + (random_rand() % (xmac_config.on_time * 4));
while(RTIMER_CLOCK_LT(RTIMER_NOW(), t));
}
#endif /* WITH_RANDOM_WAIT_BEFORE_SEND */
/* Create the X-MAC header for the data packet. */ /* Create the X-MAC header for the data packet. */
packetbuf_set_addr(PACKETBUF_ADDR_SENDER, &rimeaddr_node_addr); packetbuf_set_addr(PACKETBUF_ADDR_SENDER, &rimeaddr_node_addr);
if(rimeaddr_cmp(packetbuf_addr(PACKETBUF_ADDR_RECEIVER), &rimeaddr_null)) { if(rimeaddr_cmp(packetbuf_addr(PACKETBUF_ADDR_RECEIVER), &rimeaddr_null)) {
@ -617,8 +598,6 @@ send_packet(void)
} else /*if(hdr->dispatch == DISPATCH && hdr->type == TYPE_STROBE)*/ { } else /*if(hdr->dispatch == DISPATCH && hdr->type == TYPE_STROBE)*/ {
PRINTDEBUG("xmac: strobe from someone else\n"); PRINTDEBUG("xmac: strobe from someone else\n");
collisions++; collisions++;
/* } else {
PRINTDEBUG("xmac: ignored len %u\n", len);*/
} }
} else { } else {
PRINTF("xmac: send failed to parse %u\n", len); PRINTF("xmac: send failed to parse %u\n", len);
@ -731,7 +710,6 @@ qsend_packet(void)
PRINTF("xmac: send immediately.\n"); PRINTF("xmac: send immediately.\n");
return send_packet(); return send_packet();
} }
} }
/*---------------------------------------------------------------------------*/ /*---------------------------------------------------------------------------*/
static void static void