Seite 1 von 6

API-Unterschiede TF5k - TMS - Kommentare

Verfasst: Fr 9. Okt 2009, 09:02
von okiwankenoki
xyzzyx hat geschrieben:Auch wenn es sich vielleicht nicht mehr lange lohnt... hoffentlich kommt ja bald eine bessere TMS API... Aber vielleicht könnte Gerti es ja auch als Input nach Korea geben.
....


....

So, das müsste erstmal fast alles sein, was mir bisher über den Weg gelaufen ist. Vielleicht fällt mir ein andermal noch mehr ein.

Hoffentlich hat mich meine Erinnerung nicht irgendwo im Stich gelassen.

Außerdem bitte auch meine zwei ersten Bemerkungen aus Post 3 beachten.

Mit diesem Know-How kann jetzt bestimmt bald jeder TAPs portieren :D :
...


:hello: :hello: :hello: :hello: :hello: :hello: :hello:

Man XY, Du bist einfach klasse!!!!

:hello: :hello: :hello: :hello: :hello: :hello: :hello:

Der Olaf

AW: API-Unterschiede TF5k - TMS

Verfasst: Fr 9. Okt 2009, 17:18
von Ricki
xyzzyx hat geschrieben:
Mit diesem Know-How kann jetzt bestimmt bald jeder TAPs portieren :D :
...


Hut ab, alleine die Zeit um den Text zu schreiben. Aber, ich muss Dir widersprechen :) , nicht jeder kann TAPs portieren. Ich verstehe nur Bahnhof :D

AW: API-Unterschiede TF5k - TMS

Verfasst: Fr 9. Okt 2009, 17:42
von FireBird
Ricki hat geschrieben:Ich verstehe nur Bahnhof :D

Dann versuche Dich zwecks Einstieg in einem Bahnhofsimulations-TAP. :und_weg:

AW: API-Unterschiede TF5k - TMS

Verfasst: Fr 9. Okt 2009, 18:39
von TV-Junkie
FireBird hat geschrieben:Dann versuche Dich zwecks Einstieg in einem Bahnhofsimulations-TAP. :und_weg:

Daran bin ich auch schon gescheitert :spin:

AW: API-Unterschiede TF5k - TMS

Verfasst: Fr 9. Okt 2009, 19:42
von Ricki
FireBird hat geschrieben:Dann versuche Dich zwecks Einstieg in einem Bahnhofsimulations-TAP. :und_weg:

nee, nee sonst lande ich noch in die Bahnhofsmission und komme nicht mehr raus :D .
nun genug OT sonst versauen wir noch den guten Thread.

AW: API-Unterschiede TF5k - TMS

Verfasst: Fr 9. Okt 2009, 19:45
von Töppi
Ricki hat geschrieben:nee, nee sonst lande ich noch in die Bahnhofsmission und komme nicht mehr raus :D .
nun genug OT sonst versauen wir noch den guten Thread.


dieser Thread ist sehr hilfreich und ich plädiere an die Mods, macht einen Laberthread zum Thema und eine reine Sammlung draus, bitte!

AW: API-Unterschiede TF5k - TMS

Verfasst: Fr 9. Okt 2009, 19:50
von Twilight
:up: den thread zu verwässern ist echt nicht klug :u:

twilight

AW: API-Unterschiede TF5k - TMS - Kommentare

Verfasst: Fr 9. Okt 2009, 20:03
von FireBird
Ich habe alle Einträge ohne technischen Details verschoben.

AW: API-Unterschiede TF5k - TMS - Kommentare

Verfasst: Fr 9. Okt 2009, 20:04
von Töppi
:up: Danke dir.

AW: API-Unterschiede TF5k - TMS - Kommentare

Verfasst: Fr 9. Okt 2009, 20:05
von FireBird
Hier können Anfänger auch technische Fragen stellen. :wink:

AW: API-Unterschiede TF5k - TMS - Kommentare

Verfasst: Sa 10. Okt 2009, 11:04
von xyzzyx
Dann will ich auch mal Anfänger sein :D

Wie muss ich denn eine Funktion definieren und aufrufen, wenn ich nicht den Zeiger auf einen String sondern den String selbst übergeben will?

Derzeit siehts z.B. so aus:

void Test(char *str)
{
//packt den String in ein globales Zeichenarray und eine andere Funktion zeigt diesen dann an
}

void Sub(void)
{
char str1[64];
TAP_SPrint(str1, "mein Test");
Test(str1);
}

Da str1 nur ne lokale Variable ist, übergibt er zwar den Zeiger auf "mein Test", aber wenn Test oder die andere Funktion die Anzeige macht, dann ist der Zeiger schon wieder unbekannt bzw. hat einen undefinierten Zeicheninhalt.

Auch wenn ich die Funktion auf
"void Test(char str[])"
ändere, wird scheinbar der Zeiger und nicht der Inhalt übergeben.

Momentan kann ich es nur umgehen, indem ich str1 zu einer globalen Variable mache, da diese dann dauerhaft existiert. So will ich es aber eigentlich nicht haben. Ich bräuchte ja sonst jeweils eine globale Variable für jede Zeile die ich ausgeben will.

Wie soll ich die Funktion Test definieren bzw. was muss ich beim Aufruf beachten, damit der Wert und nicht der Zeiger übergeben wird (oder damit er in Test einen neuen globalen Speicher für den Zeiger benutzt)?

AW: API-Unterschiede TF5k - TMS - Kommentare

Verfasst: Sa 10. Okt 2009, 11:23
von FireBird
Da ich erst vor kurzem mit C angefangen habe, bin ich sicher nicht der Richtige um die Frage zu beantworten. :oops:

Was spricht dagegen, int Test() sich nicht den Pointer zu merken, sondern mittels strcpy(?, str) eine Kopie des Strings anzulegen? Um diese kommst Du sowieso nicht herum.

AW: API-Unterschiede TF5k - TMS - Kommentare

Verfasst: Sa 10. Okt 2009, 12:03
von xyzzyx
FireBird hat geschrieben:Da ich erst vor kurzem mit C angefangen habe

Häh, wieso? :)

Hmmm, warum bin ich nicht auf strcpy gekommen... Na klar. :hello:
Aber um Abstürze zu vermeiden geht es nur mit vorherigem TAP_MemAlloc:

in Test geändert (Speicherreservierung und dann Stringübergabe):
Items[itemNo] = TAP_MemAlloc(256);
strcpy(Items[itemNo], str);

Vorher war es praktisch nur so (gleichen Zeiger übergeben):
Items[itemNo] = str;

AW: API-Unterschiede TF5k - TMS - Kommentare

Verfasst: Sa 10. Okt 2009, 12:11
von FireBird
xyzzyx hat geschrieben:Häh, wieso? :)

Weil das HDDInfo-TAP mein erstes C-Programm war. :)


Und so wird es noch einen Schritt sicherer und vermutlich sogar weniger speicherintensiv:

Items[itemNo] = TAP_MemAlloc(strlen(str) + 1);
if(Items[itemNo]) strcpy(Items[itemNo], str);

AW: API-Unterschiede TF5k - TMS - Kommentare

Verfasst: Sa 10. Okt 2009, 12:23
von xyzzyx
Mensch, das wird ja immer besser. :hello:
Läuft bestens so.

Die TAP-API ist doch generell in C. Oder meinst du eher, dass du mit HDDInfo dann mal mehr C-Libs verwendet hast?

AW: API-Unterschiede TF5k - TMS - Kommentare

Verfasst: Sa 10. Okt 2009, 12:36
von FireBird
[quote="xyzzyx"]Die TAP-API ist doch generell in C. Oder meinst du eher, dass du mit HDDInfo dann mal mehr C-Libs verwendet hast?[/quote]
HDDInfo war mein erstes TAP und auch mein erstes Programm in der Programmiersprache C.

AW: API-Unterschiede TF5k - TMS - Kommentare

Verfasst: So 11. Okt 2009, 10:40
von Ameise
FireBird hat geschrieben:Weil das HDDInfo-TAP mein erstes C-Programm war. :)


Und so wird es noch einen Schritt sicherer und vermutlich sogar weniger speicherintensiv:

Items[itemNo] = TAP_MemAlloc(strlen(str) + 1);
if(Items[itemNo]) strcpy(Items[itemNo], str);


Bitte nicht vergessen den Speicher mit TAP_MemFree() wieder freizugeben!!
Sonst hat man ein schönes (großes) Speicherloch programmiert.

Ich hätte da auch noch eine Frage:
Was ist der Unterschied zwischen
  • sprintf
  • TAP_SPrint
Beide schreiben einen formatierten String in einen anderen. Behandelt das TAP_SPrint vielleicht die besonderen DVB Zeichen anders als sprintf??

AW: API-Unterschiede TF5k - TMS - Kommentare

Verfasst: So 11. Okt 2009, 10:44
von FireBird
Ameise hat geschrieben:Was ist der Unterschied zwischen
  • sprintf
  • TAP_SPrint
Beide schreiben einen formatierten String in einen anderen. Behandelt das TAP_SPrint vielleicht die besonderen DVB Zeichen anders als sprintf??

In der tap.h werden sie gleichgesetzt:

Code: Alles auswählen

#define sprintf	TAP_SPrint
Eine Sonderbehandlung ist mir bisher nicht aufgefallen.

AW: API-Unterschiede TF5k - TMS - Kommentare

Verfasst: So 11. Okt 2009, 10:48
von Ameise
:patsch:
So eine einfache Antwort habe ich dann doch nicht erwartet. Wofür machen die
sich dann die "Arbeit" das in die API aufzunehmen :thinker:
Das kennt doch jeder, der sich schon mal mit C beschäftigt hat.

Und Danke Firebird!!

AW: API-Unterschiede TF5k - TMS - Kommentare

Verfasst: So 11. Okt 2009, 15:42
von xyzzyx
[quote="Ameise"]Bitte nicht vergessen den Speicher mit TAP_MemFree() wieder freizugeben!!
Sonst hat man ein schönes (großes) Speicherloch programmiert.
[/quote]


Und da gibts zum Beispiel noch sowas schönes für:
#ifndef SAFE_MEMFREE
#define SAFE_MEMFREE(p) { if(p){TAP_MemFree(p); p=NULL;} }
#endif
Ist wahrscheinlich wieder die sichere Methode für den TMS, um Abstürze zu vermeiden. Hab ich irgendwo mal gefunden.