# HG changeset patch # User Martin Troxler # Date 1290412234 -3600 # Node ID 5f1269a7158855948826c485ff3432e14255274b # Parent 0330fdcbdd1fe96acd3be6156d8953711fdf83f6 use app_start_time for initial DC offset calculation because app_time might be overwritten while calculating the offsets. diff -r 0330fdcbdd1f -r 5f1269a71588 master/fsm_master.c --- a/master/fsm_master.c Tue Nov 16 15:32:27 2010 +0100 +++ b/master/fsm_master.c Mon Nov 22 08:50:34 2010 +0100 @@ -907,13 +907,13 @@ system_time32 -= correction32; old_offset32 = (u32) old_offset; - time_diff = (u32) slave->master->app_time - system_time32; + time_diff = (u32) slave->master->app_start_time - system_time32; EC_SLAVE_DBG(slave, 1, "DC system time offset calculation:" " system_time=%u (corrected with %u)," - " app_time=%llu, diff=%i\n", + " app_start_time=%llu, diff=%i\n", system_time32, correction32, - slave->master->app_time, time_diff); + slave->master->app_start_time, time_diff); if (EC_ABS(time_diff) > EC_SYSTEM_TIME_TOLERANCE_NS) { new_offset = time_diff + old_offset32; @@ -944,13 +944,13 @@ // correct read system time by elapsed time between read operation // and app_time set time system_time -= correction; - time_diff = fsm->slave->master->app_time - system_time; + time_diff = fsm->slave->master->app_start_time - system_time; EC_SLAVE_DBG(slave, 1, "DC system time offset calculation:" " system_time=%llu (corrected with %llu)," - " app_time=%llu, diff=%lli\n", + " app_start_time=%llu, diff=%lli\n", system_time, correction, - slave->master->app_time, time_diff); + slave->master->app_start_time, time_diff); if (EC_ABS(time_diff) > EC_SYSTEM_TIME_TOLERANCE_NS) { new_offset = time_diff + old_offset; diff -r 0330fdcbdd1f -r 5f1269a71588 master/master.c --- a/master/master.c Tue Nov 16 15:32:27 2010 +0100 +++ b/master/master.c Mon Nov 22 08:50:34 2010 +0100 @@ -2375,14 +2375,14 @@ void ecrt_master_application_time(ec_master_t *master, uint64_t app_time) { master->app_time = app_time; -#ifdef EC_HAVE_CYCLES - master->dc_cycles_app_time = get_cycles(); -#endif - master->dc_jiffies_app_time = jiffies; if (unlikely(!master->has_app_time)) { EC_MASTER_DBG(master, 1, "set application start time = %llu\n",app_time); master->app_start_time = app_time; +#ifdef EC_HAVE_CYCLES + master->dc_cycles_app_time = get_cycles(); +#endif + master->dc_jiffies_app_time = jiffies; master->has_app_time = 1; } }