From 4dcc0f009efc766a82a2c9af099150e67e049ba4 Mon Sep 17 00:00:00 2001 From: Florian Pose <fp@igh-essen.com> Date: Fri, 16 Mar 2007 14:42:04 +0000 Subject: [PATCH] Completely lock master while an EoE cycle is executing. --- TODO | 2 +- master/master.c | 6 +++--- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/TODO b/TODO index 4c144d7b..5c20749f 100644 --- a/TODO +++ b/TODO @@ -28,7 +28,7 @@ $Id$ - 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 --git a/master/master.c b/master/master.c index 0338a7c0..79ab1ed6 100644 --- a/master/master.c +++ b/master/master.c @@ -1129,11 +1129,11 @@ void ec_master_eoe_run(unsigned long data /**< master pointer */) if (none_open) goto queue_timer; - // receive datagrams if (master->request_cb(master->cb_data)) goto queue_timer; + + // receive datagrams 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 @@ void ec_master_eoe_run(unsigned long data /**< master pointer */) } // 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] -- GitLab