No, the original code is correct.

 

EtherCAT slaves can be addressed in one of two ways:

 

1.       0, abs_ring_pos => where abs_ring_pos is the absolute position in the 
virtual ring (0 is the first slave).

2.       alias, rel_ring_pos => where alias is the alias of some slave and 
rel_ring_pos is the *relative* offset from that slave (0 is the slave with that 
alias, 1 is the first slave after that one, etc).

 

The change you posted below breaks both of these.  If it is “working” for you, 
then it is only by coincidence as a result of you passing incorrect parameters.

 

From: etherlab-dev [mailto:etherlab-dev-boun...@etherlab.org] On Behalf Of Raz
Sent: Monday, 27 April 2015 21:02
To: etherlab-dev@etherlab.org
Subject: [etherlab-dev] EC_FIND_SLAVE when alias != 0 is incorrect

 

when alias is used EC_FIND_SLAVE fails to find slave at position greater than 0


>From 1349cabe197e84208a196d9186111551f24e25f5 Mon Sep 17 00:00:00 2001
From: raz <razi...@gmail.com <mailto:razi...@gmail.com> >
Date: Mon, 27 Apr 2015 11:51:23 +0300
Subject: [PATCH] alias search incorrect

---
 drivers/misc/ethercat_master/master/master.c | 6 +++---

diff --git a/drivers/misc/ethercat_master/master/master.c 
b/drivers/misc/ethercat_master/master/master.c
index 34cc1b5..d9ec5b3 100644
--- a/drivers/misc/ethercat_master/master/master.c
+++ b/drivers/misc/ethercat_master/master/master.c
@@ -1569,9 +1569,9 @@ void ec_master_attach_slave_configs(
             } \
             if (slave == master->slaves + master->slave_count) \
             return NULL; \
-        } \
-        \
-        slave += position; \
+        } else{ \
+               slave += position; \
+       } \
         if (slave < master->slaves + master->slave_count) { \
             return slave; \
         } else { \
-- 
1.9.1


-- 

https://sites.google.com/site/ironspeedlinux/

_______________________________________________
etherlab-dev mailing list
etherlab-dev@etherlab.org
http://lists.etherlab.org/mailman/listinfo/etherlab-dev

Reply via email to