User Documentation

Datenrekorder
Systemhandbuch
2696780000/02/04.2020
97
enum { cSaveStatePeriodSecs = 10 };
int cnt = cSaveStatePeriodSecs;
DataRecApiResult rc;
while (sRun) {
sleep(1/*secs*/);
if (--cnt == 0) {
rc = DataRecApiSaveState(sP1Id);
cnt = cSaveStatePeriodSecs;
}
}
sTerminated = 1;
}
Information
Mit der Erzeugung freilaufender Tasks mittels CreateTask übernimmt die
Applikation Mitverantwortung für die Systemstabilität.
Es ist darauf zu achten, dass nach der Rückkehr aus der Exit-Funktion (Be-
enden der Applikation) alle erzeugten Tasks terminiert wurden bzw. diese
keine Aufrufe der angebotenen APIs (u.a. DataRecApi) mehr ausführen!
14.7.5 Auswertung von Aufzeichnungen
Der folgende Code ergänzt die vorangehenden Beispiele um die Auswer-
tung durchgeführter Aufzeichnungen. Die Parameter der Beispielfunktion
PrintSamples spezifizieren den zu lesenden Pufferbereich in vertikaler
(pos, cnt) und horizontaler Richtung (maxVarCnt).
static void PrintSamples(int maxVarCnt, DataRecApiPos pos, int cnt) {
char *pBuf;
DataRecApiSample *pSample;
DataRecApiVarSample *p;
int actVarCnt, i, k, rc;
pBuf = malloc(DataRecApiUtilGetSampleMemSize(maxVarCnt, cnt));
ReturnIfNot(pBuf != 0);
pSample = (DataRecApiSample *)pBuf;
rc = DataRecApiReadSamples(sP1Id, maxVarCnt, &pos, pSample, &cnt);
ReturnIfNot(rc == DataRecApiResultOk);
for (i = 0; i < cnt; ++i) {
actVarCnt = pSample->header.varSampleCnt;
printf("[%d] recNo=%d, varSampleCnt=%d, timeStampUs=[%s]:\n",
i,
pSample->header.sampleRecNo,
actVarCnt,
TimeStamp2DateStr(pSample->timeStampUs));
for (k = 0, p = pSample->varSamples; k < actVarCnt; ++k, ++p) {
switch (p->type) {
case DataRecApiVarType_SINT32:
 printf(" name=%s, value=%d (size=%d)\n", VarIdToName(p->var), p-
>value.valSINT32, p->size);
 break;
case DataRecApiVarType_REAL:
 printf(" name=%s, value=%f (size=%d)\n", VarIdToName(p->var), p-
>value.valREAL, p->size);
 break;
default:
 printf(" name=%s, value=%" PRIx64 " (type=%d, size=%d)\n", Va-
rIdToName(p->var), p->value.valNONE, p->type, p->size);
 break;