Page 1 of 1

Sleep C-Code Beispiel gesucht

Posted: Wed 15. Mar 2017, 11:57
by ckessle2
Guten Tag,
ich möchte zwischen zwei send ein paar millisekunden warten

Code: Select all

TxMsg.Type = RxMsg.Type;
			TxMsg.Len = RxMsg.Len;
				TxMsg.Data32[0] = RxMsg.Data32[0];
				TxMsg.Data32[1] = RxMsg.Data32[1];
				// send to CAN3 first
				TxMsg.Id = RxMsg.Id + 0x300; // from 300 to 600
				CAN_UserWrite(CAN_BUS3, &TxMsg);
warten
TxMsg.Id ändern
sleep ??  
CAN_UserWrite(CAN_BUS3, &TxMsg);
Gibt es einen Sleep Befehl?
Was ist die kleinste Zeiteinheit?
Gruss
ckessle2

Re: Sleep C-Code Beispiel gesucht

Posted: Thu 16. Mar 2017, 15:15
by K.Wagner
Guten Tag,

um Ihnen weiterhelfen zu können, brauchen wir weitere Informationen:
  • Welches Gerät verwenden Sie?
  • Welches Protokoll möchten Sie verwenden bzw. welche API von PEAK-System benutzen Sie?
  • Ist die Frage nach der Sleep Protokoll- oder Programmiersprache bezogen?

Re: Sleep C-Code Beispiel gesucht

Posted: Thu 16. Mar 2017, 15:54
by ckessle2
K.Wagner wrote:Guten Tag,

um Ihnen weiterhelfen zu können, brauchen wir weitere Informationen:
  • Welches Gerät verwenden Sie?
  • Welches Protokoll möchten Sie verwenden bzw. welche API von PEAK-System benutzen Sie?
  • Ist die Frage nach der Sleep Protokoll- oder Programmiersprache bezogen?
Gerät: Peak CAN-Router Pro mit 4 Kanälen

API? Ich verwende den yagarto-compiler und möchte CAN-Nachrichten schicken. Die Sprache ist C. Ich finde in den header keine sleep oder delay-FunKtion.
Mein Problem ist: wenn ich zwei messages hintereinander schicke, dann kann der Can-Empfänger die nicht mehr beide auflösen, der Abstand istdann wohl kleiner als ca 250 mikroSekunden.
Ich habe als Notbehelf jetzt ein paar unsinnige Funktionsaufrufe dzwischengestellt, aber das ist nicht eben professionell.

Ich habe festgestellt, dass wenn ich zuviele Zeit zwischen zwei Aufrufen "verschwende" - dann kommen spätere Messages trotzdem durch, obwohl an der Stelle das programm eigentlich stehenbleiben sollte.

Protokoll - oder Programmiersprache? Ist mir egal. Ich möche eine Funktion, die sicherstellt, dass die Zeit zwischen zwei Nachrichten auf dem CAN-Bus (500kb/s) für das CAN-Protokoll geeignet ist. Es sollen eben keine Nachrichten verloren gehen.

Herzliche Grüße
ckessle2

Re: Sleep C-Code Beispiel gesucht

Posted: Fri 17. Mar 2017, 09:32
by S.Schott
Hi there.

Yes there's 2 functions to do such timed things:
Please see the "3_TIMER" example.


1) cyclic transmission:

#include "systime.h"

// variables for cyclic things
static SYSTIME_t FormerCycle;
SYSTIME_t timenow;

main:
// init timer
SYSTIME_Init();

FormerCycle = 0;


loop:
timenow = SYSTIME_NOW;

// do something every 80 millis
if ( SYSTIME_DIFF ( FormerCycle, timenow) >= 80000)
{
// adjust last time of message by 80 millis
FormerCycle += 80000;

// do something here
;

}
Remember to include "systime.c" into the makefile !!


2) blocking delay:

Also in "systime.c" there's a function called "waitmicros(80000)"
which waits the number of usecs.
Can be used for a (blocking) delay between 2 actions...

Re: Sleep C-Code Beispiel gesucht

Posted: Mon 10. Apr 2017, 17:05
by ckessle2
Thanks for your answers.
I followed your advice and could create the needed sleep-function.

However, the need to wait was wrong - it is very probable a problem of buffer overrun which I wanted to fix.
Problem solved

Best regards
ckessle2

Re: Sleep C-Code Beispiel gesucht

Posted: Tue 11. Apr 2017, 08:14
by K.Wagner
Thanks for the feedback.

Closed...