Completely lock master while an EoE cycle is executing.
--- 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]