Karl Reichert wrote: > Karl Reichert wrote: > > Karl Reichert wrote: > > > Karl Reichert wrote: > > > > Jan Kiszka wrote:> > > > > > What I would analyse if I were you: > > > > > - Is the request frame sent in the right slot according to the > > > sender? > > > > > > > > Well, now I have another weird behavior. The slave sends a request > > > > calibration frame in cycle no 45849 and sets Reply Cycle Number to > > > 97655. As I'm > > > > using a cycle length of 5 ms, this means the slave wants the answer > > more > > > > then 4 minutes in the future, which is for sure to far away! > > > > > > > > This behavior and the one observed before points to a problem when > > > > calculating or setting this reply cycle number. How can one > configure > > > how big this > > > > value is set (how big the offset between request and reply should > be). > > > If > > > > this is done automatically, in which function is it done? > > > > > > I digged deeper into the code and here are the results. Please see > > > attached file to see me changes. Every change is marked by /* REK > debug > > */: > > > > > > My first step was to go into module tdma_worker.c, function > > > do_request_cal_job(). I printed the values of tdma->current_cycle and > > job->period. > > > job->period is always 1, in all calls of this function. > > tdma->current_cycle of > > > course changes, but it holds an old value, for example 1521 cycles ago > > with 1 > > > ms cycle length. > > > > > > As a quick hack, my second step was to substitue job->period with an > > > constant value, 2500 in my case. Now the synchronisation works, of > > course > > > slowly, but it does. > > > > > > The error must be the "wrong" value of on of those two variables! > > > > > > This leads to a few questions: > > > 1) Is it right that job->period is always 1? > > > 2a) If yes (what I do not believe), do you have an idea why > > > tdma->current_cycle holds an "old" value? > > > 2b) If not, where is this value calculated and where for? > > > > > > > Hello list! > > > > I did some further testing and this is what I found out: > > > > 1) tdma->current_cycle holds the right value! I set the tdma cycle > length > > to 10s (yes, seconds) and also started wireshark on the master. I > checked > > the value of this variable and when I compare it to what wireshark tells > me > > about the sent sync frames, I see that this value is correct. > > > > 2) The slave is able to sync with this long cycle length. The reason for > > this is that job->period is still always 1, but now there is enough time > > (nearly 10s) to send the req cal frm. > > > > > > This leads me to the following conclusions and questions: > > > > 1) Again ... why is job->period always 1? Is this correct? I still don't > > understand where this variable stands for and why we do not simply add > any > > other constant value (like 1 or sth bigger). > > > > 2) If it is correct that job->period contains always 1, is it > problematic > > to set any higher value there (like I did in my quick hack, see last > mail)? > > If yes, wouldn't it make sense to make this configurable (make > > menuconfig)? > > > > 3) If it has to be always one, running tdma with cycle length 1ms would > > mean, that the slave must be able to send a req cal frm after a sync frm > > within less then 1ms. Is this to much for a high end Core 2 Duo? Don't > think so > > ... > > > > After checking the sourcecode again and playing around with tdmacfg -p > parameter, I see now the meaning of this job->period variable. When one > provides -p 1/2 this variable holds the value 2, so that the frame is sent > only > in every second period. So it makes sense that it normally holds 1 in my > case. > > So, what I see is the following: > Without changing the sources, it isn't possible to set any offset between > received sync frm and sent req cal frm. The TDMA module in slave mode > always sents the req cal frm right after receiving the sync frm (of course in > it's timeslot). It sets the "reply cycle number" field in this frame always > to the next cycle number. This behavior is hard coded and not configurable > via make menuconfig. > > As my slave isn't able to send the req cal frm so fast, it isn't able to > synchronize when a short tdma cycle length is configured (1ms). Is this a > problem only of my station? > > Why is it not possible to configure those offsets? > > Please advice! > Thanks ... Karl
To keep you up-to-date, just in case anyone cares ;) With the dirty hack, after synchornization is finished, sending data frames every 1ms works fine. So my machine isn't to slow at all, just the do_request_cal_job() seems to be problematic. I will dig deeper into this now with I-pipe Tracer and give further information when available. Regards. Karl -- GMX FreeMail: 1 GB Postfach, 5 E-Mail-Adressen, 10 Free SMS. Alle Infos und kostenlose Anmeldung: http://www.gmx.net/de/go/freemail ------------------------------------------------------------------------- This SF.net email is sponsored by: Microsoft Defy all challenges. Microsoft(R) Visual Studio 2005. http://clk.atdmt.com/MRT/go/vse0120000070mrt/direct/01/ _______________________________________________ RTnet-users mailing list RTnet-users@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/rtnet-users