use app_start_time for initial DC offset calculation because app_time might be overwritten while calculating the offsets.

This commit is contained in:
Martin Troxler 2010-11-22 08:50:34 +01:00
parent 57b57fe71d
commit e13ea1d2fa
2 changed files with 10 additions and 10 deletions

View File

@ -907,13 +907,13 @@ u64 ec_fsm_master_dc_offset32(
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 @@ u64 ec_fsm_master_dc_offset64(
// 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;

View File

@ -2375,14 +2375,14 @@ void ecrt_master_configured_slaves_state(const ec_master_t *master, ec_master_st
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;
}
}