diff --git a/master/master.c b/master/master.c index d2b954495b5a924d4f500c0a8cc34fc890476495..d23b03efec3064fa3d16db6d3e7a07ed14a19065 100644 --- a/master/master.c +++ b/master/master.c @@ -129,6 +129,7 @@ int ec_master_init(ec_master_t *master, /**< EtherCAT master */ master->debug_level = 0; master->stats.timeouts = 0; + master->stats.starved = 0; master->stats.corrupted = 0; master->stats.skipped = 0; master->stats.unmatched = 0; @@ -710,6 +711,11 @@ void ec_master_output_stats(ec_master_t *master /**< EtherCAT master */) master->stats.timeouts == 1 ? "" : "s"); master->stats.timeouts = 0; } + if (master->stats.starved) { + EC_WARN("%i datagram%s STARVED!\n", master->stats.starved, + master->stats.starved == 1 ? "" : "s"); + master->stats.starved = 0; + } if (master->stats.corrupted) { EC_WARN("%i frame%s CORRUPTED!\n", master->stats.corrupted, master->stats.corrupted == 1 ? "" : "s"); @@ -1438,7 +1444,7 @@ void ecrt_master_receive(ec_master_t *master /**< EtherCAT master */) - datagram->cycles_queued > cycles_timeout) { list_del_init(&datagram->queue); datagram->state = EC_DATAGRAM_TIMED_OUT; - master->stats.timeouts++; + master->stats.starved++; ec_master_output_stats(master); } break; diff --git a/master/master.h b/master/master.h index a27154d5a020c9073ee89729c91cddab47d1e80b..e44318f5efdec3c68264c5659694505c965c009d 100644 --- a/master/master.h +++ b/master/master.h @@ -75,6 +75,7 @@ ec_master_mode_t; typedef struct { unsigned int timeouts; /**< datagram timeouts */ + unsigned int starved; /**< starved datagrams (not even sent) */ unsigned int corrupted; /**< corrupted frames */ unsigned int skipped; /**< skipped datagrams (the ones that were requeued when not yet received) */