# HG changeset patch # User Florian Pose # Date 1174056124 0 # Node ID 38d9c37664d9942ff8efbe7a6dc7315f908d7600 # Parent 9b9eaacbd71f7a0f9f3b56f463a540ca1e2b4798 Completely lock master while an EoE cycle is executing. diff -r 9b9eaacbd71f -r 38d9c37664d9 TODO --- a/TODO Fri Mar 16 14:02:21 2007 +0000 +++ b/TODO Fri Mar 16 14:42:04 2007 +0000 @@ -28,7 +28,7 @@ - Interrupt master state machines state scan for other jobs. - Master state machine, slave configuration: Do not check every slave on a cycle. - - Fix problem when lock ist not required for EoE sending. + - Do only execute one EoE handler per EoE cycle. * Less important issues: - Implement all EtherCAT datagram types. diff -r 9b9eaacbd71f -r 38d9c37664d9 master/master.c --- a/master/master.c Fri Mar 16 14:02:21 2007 +0000 +++ b/master/master.c Fri Mar 16 14:42:04 2007 +0000 @@ -1129,11 +1129,11 @@ if (none_open) goto queue_timer; + if (master->request_cb(master->cb_data)) goto queue_timer; + // receive datagrams - if (master->request_cb(master->cb_data)) goto queue_timer; cycles_start = get_cycles(); ecrt_master_receive(master); - master->release_cb(master->cb_data); // actual EoE processing list_for_each_entry(eoe, &master->eoe_handlers, list) { @@ -1141,9 +1141,9 @@ } // send datagrams - if (master->request_cb(master->cb_data)) goto queue_timer; ecrt_master_send(master); cycles_end = get_cycles(); + master->release_cb(master->cb_data); master->eoe_cycle_times[master->eoe_cycle_time_pos]