TSCH: manage busy waiting on Cooja motes
This commit is contained in:
parent
958ff6e4f6
commit
0201208664
|
@ -48,6 +48,10 @@
|
||||||
#include "net/linkaddr.h"
|
#include "net/linkaddr.h"
|
||||||
#include "net/mac/tsch/tsch-asn.h"
|
#include "net/mac/tsch/tsch-asn.h"
|
||||||
#include "net/mac/tsch/tsch-conf.h"
|
#include "net/mac/tsch/tsch-conf.h"
|
||||||
|
#if CONTIKI_TARGET_COOJA || CONTIKI_TARGET_COOJA_IP64
|
||||||
|
#include "lib/simEnvChange.h"
|
||||||
|
#include "sys/cooja_mt.h"
|
||||||
|
#endif /* CONTIKI_TARGET_COOJA || CONTIKI_TARGET_COOJA_IP64 */
|
||||||
|
|
||||||
/************ Types ***********/
|
/************ Types ***********/
|
||||||
|
|
||||||
|
@ -109,7 +113,14 @@ void tsch_disassociate(void);
|
||||||
#define TSCH_CLOCK_TO_SLOTS(c, timeslot_length) (TSCH_CLOCK_TO_TICKS(c) / timeslot_length)
|
#define TSCH_CLOCK_TO_SLOTS(c, timeslot_length) (TSCH_CLOCK_TO_TICKS(c) / timeslot_length)
|
||||||
|
|
||||||
/* Wait for a condition with timeout t0+offset. */
|
/* Wait for a condition with timeout t0+offset. */
|
||||||
|
#if CONTIKI_TARGET_COOJA || CONTIKI_TARGET_COOJA_IP64
|
||||||
|
#define BUSYWAIT_UNTIL_ABS(cond, t0, offset) \
|
||||||
|
while(!(cond) && RTIMER_CLOCK_LT(RTIMER_NOW(), (t0) + (offset))) { \
|
||||||
|
simProcessRunValue = 1; \
|
||||||
|
cooja_mt_yield(); \
|
||||||
|
};
|
||||||
|
#else
|
||||||
#define BUSYWAIT_UNTIL_ABS(cond, t0, offset) \
|
#define BUSYWAIT_UNTIL_ABS(cond, t0, offset) \
|
||||||
while(!(cond) && RTIMER_CLOCK_LT(RTIMER_NOW(), (t0) + (offset))) ;
|
while(!(cond) && RTIMER_CLOCK_LT(RTIMER_NOW(), (t0) + (offset))) ;
|
||||||
|
#endif /* CONTIKI_TARGET_COOJA || CONTIKI_TARGET_COOJA_IP64 */
|
||||||
#endif /* __TSCH_PRIVATE_H__ */
|
#endif /* __TSCH_PRIVATE_H__ */
|
||||||
|
|
|
@ -54,6 +54,10 @@
|
||||||
#include "net/mac/tsch/tsch-packet.h"
|
#include "net/mac/tsch/tsch-packet.h"
|
||||||
#include "net/mac/tsch/tsch-security.h"
|
#include "net/mac/tsch/tsch-security.h"
|
||||||
#include "net/mac/tsch/tsch-adaptive-timesync.h"
|
#include "net/mac/tsch/tsch-adaptive-timesync.h"
|
||||||
|
#if CONTIKI_TARGET_COOJA || CONTIKI_TARGET_COOJA_IP64
|
||||||
|
#include "lib/simEnvChange.h"
|
||||||
|
#include "sys/cooja_mt.h"
|
||||||
|
#endif /* CONTIKI_TARGET_COOJA || CONTIKI_TARGET_COOJA_IP64 */
|
||||||
|
|
||||||
#if TSCH_LOG_LEVEL >= 1
|
#if TSCH_LOG_LEVEL >= 1
|
||||||
#define DEBUG DEBUG_PRINT
|
#define DEBUG DEBUG_PRINT
|
||||||
|
@ -104,7 +108,10 @@
|
||||||
#if RTIMER_SECOND < (32 * 1024)
|
#if RTIMER_SECOND < (32 * 1024)
|
||||||
#error "TSCH: RTIMER_SECOND < (32 * 1024)"
|
#error "TSCH: RTIMER_SECOND < (32 * 1024)"
|
||||||
#endif
|
#endif
|
||||||
#if RTIMER_SECOND >= 200000
|
#if CONTIKI_TARGET_COOJA || CONTIKI_TARGET_COOJA_IP64
|
||||||
|
/* Use 0 usec guard time for Cooja Mote with a 1 MHz Rtimer*/
|
||||||
|
#define RTIMER_GUARD 0u
|
||||||
|
#elif RTIMER_SECOND >= 200000
|
||||||
#define RTIMER_GUARD (RTIMER_SECOND / 100000)
|
#define RTIMER_GUARD (RTIMER_SECOND / 100000)
|
||||||
#else
|
#else
|
||||||
#define RTIMER_GUARD 2u
|
#define RTIMER_GUARD 2u
|
||||||
|
@ -200,7 +207,12 @@ tsch_get_lock(void)
|
||||||
if(tsch_in_slot_operation) {
|
if(tsch_in_slot_operation) {
|
||||||
busy_wait = 1;
|
busy_wait = 1;
|
||||||
busy_wait_time = RTIMER_NOW();
|
busy_wait_time = RTIMER_NOW();
|
||||||
while(tsch_in_slot_operation);
|
while(tsch_in_slot_operation) {
|
||||||
|
#if CONTIKI_TARGET_COOJA || CONTIKI_TARGET_COOJA_IP64
|
||||||
|
simProcessRunValue = 1;
|
||||||
|
cooja_mt_yield();
|
||||||
|
#endif /* CONTIKI_TARGET_COOJA || CONTIKI_TARGET_COOJA_IP64 */
|
||||||
|
}
|
||||||
busy_wait_time = RTIMER_NOW() - busy_wait_time;
|
busy_wait_time = RTIMER_NOW() - busy_wait_time;
|
||||||
}
|
}
|
||||||
if(!tsch_locked) {
|
if(!tsch_locked) {
|
||||||
|
|
Loading…
Reference in a new issue