Completely lock master while an EoE cycle is executing.
authorFlorian Pose <fp@igh-essen.com>
Fri, 16 Mar 2007 14:42:04 +0000
changeset 663 38d9c37664d9
parent 662 9b9eaacbd71f
child 664 18c48cb7de06
Completely lock master while an EoE cycle is executing.
TODO
master/master.c
--- 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.
--- 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]