PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : [ERLEDIGT] Erklärung für "Offset" gesucht



HM
10.07.2011, 10:25
Hallo,
ich habe schon öfters in Bascom-Programmen die Funktion "Offset" gesehen, auch im Zusammenhang mit "Lookup" zum Tabellen auslesen.
Meine tagelange Suche bei Google und auch hier bei "RN-Wissen" (Es existiert kein Artikel) hat leider nichts ergeben.
Es wär super, wenn mir das jemand erklären könnte, wie und warum das "Offset" in einen Programm steht und wie es angewendet wird. Selbst in der Bascom-Hilfe habe ich da nichts gefunden.
Ach ja, manchmal steht als Kommentar "'zum Offset berechnen", nur kann ich mir daraus nicht viel nehmen.
Vielen Dank schon jetzt für Antworten. MfG

oberallgeier
10.07.2011, 10:46
... Meine tagelange Suche bei Google ...hat leider nichts ergeben ...Versuchs mal damit (klick hier) (http://lmgtfy.com/?q=software programmierung was ist ein offset) - schon der zweite Link ist wohl DER Treffer.


... Meine tagelange Suche bei Google ...Uuuuups was steht da noch ??? Ungefähr 1.100.000 Ergebnisse (0,11 Sekunden)

Richard
10.07.2011, 12:00
Hallo,
ich habe schon öfters in Bascom-Programmen die Funktion "Offset" gesehen, auch im Zusammenhang mit "Lookup" zum Tabellen auslesen.



"Offset" ist ein etwas eigenartiger Begriff. Das kann ein Wert zum korrgieren, anpassen einer Messgröße sein. Das kann speziell bei Tabellen ein Adress Zeiger sein. Beispiel eine Tabelle fängt bei Speicher Stelle 100 an und Du willst aber ohne alles zu durchsuchen auf die 10. Stelle zugreifen. dann ist Deine Base = 100, Dein Offset = 10.

Lese base+offset würde dann zur richtige Speicherstelle führen, andere sprechen dabei von "indirekter Adressierung". Aber auch in der Schaltungstechnick kommt dieser Begriff vor, z.B. wenn einem Wechselspannungs Signal einen Gleichspannungs Anteil (offset) besitzt. Offset muss man also immer auf die jeweilige "Situation" bezogen anwenden.

Daher können viele verschiedene Antworten richtig sein.....

Gruß Richard

Searcher
10.07.2011, 12:13
Offset ist nach Wikipedia http://de.wikipedia.org/wiki/Offset ein "in der Technik (engl. offset für Regelabweichung, Versatz) ein konstanter, additiver oder subtraktiver systematischer Fehler einer Zustandsgröße oder eines Messwertes"

BASCOM-AVR hat solch eine Funktion nicht (hab zumindest keine gefunden) und demnach wird man in der Hilfe da auch nichts finden. Wenn so eine Funktion in einem Programm auftaucht, hat der Programmierer sich eine selbst erstellt. Wozu die da ist kann man dann nur aus dem Programm oder vom Programmierer erfahren.

Gruß
Searcher

HM
10.07.2011, 17:36
Hallo oberallgeier,
vielen Dank für Deine schnelle Antwort.
Den Link den Du schreist hatte ich auch in ähnlicher Form gefunden, nur mit einen etwas abweichenden Suchbegriff. Leider fand ich dort, jedenfalls für Anfänger keine ausreichende und umfangreiche Atwort, die man auch versteht. Bist auf eine Erklärung waren die anderen Suchergebnisse immer auf ein spezielles Projekt bezogen, wo man eigentlich das ganze Programm verstehen müßte, so hatte ich mir das nicht vorgestellt.
Was das lange Suchen betrifft, bezieht sich das auf eine ausreichende Atwort, ich habe einfach viele Stunden danach gesucht und sehr viel gelesen, leider ohne befriedigendes Ergebnis.
Vielen Dank MfG

HM
10.07.2011, 18:07
Hallo Richard,
vielen Dank für deine super Antwort, damit kann man schon etwas anfangen, so stelle ich mir auch eine gute Kommunikation vor.
Als Auslöser zu meiner Frage war, das ich einen 3x3x3 LED-Cube, der bei "Ledstyles" vorgestellt wurde, nachgebaut habe, er funktioniert auch sehr gut, vielen Dank an die Entwickler.
Leider hält sich der Programmierer mit seiner Auskommentierung und Erklärung des Programms etwas bedeckt. Ich wollte das Programm verstehen, das da im µC abläuft, da war eben auch das Offset dabei (im Zusammenhang mit $include-Datei), evtl. kennt das einer.
Bei meiner Fragestellung sollte immer berücksichtigt werden, das ich ein Anfänger in Bascom bin.
Dann fing ich an, wie oben beschrieben, nach Begriffserklärungen zu suchen und bin schließlich hier gelandet, wo Du das sehr sehr schön beschrieben hast.
Jetzt müßte ich nur noch wissen, wie man das "Offset" einsetzt. Du schreibst, das es viele verschiedene Einsatzgebiete dafür gibt, für mich ist momentan nur Bascom vorrangig.
Wenn ich das richtig verstanden habe könnte man das "Offset" auch für eine "Nullpunkt-Einstellen" in einer Anzeige verwenden, ist das so gemeint?
Gut ich hör jetzt auf, genug genervt.
Vielen Dank MfG

HM
10.07.2011, 18:19
Hallo Searcher,
danke, das Du geantwortet hast, es ist doch gut wenn ich gleich 3 Antworten von Experten bekomme, super.
Du schreibst:
"Wenn so eine Funktion in einem Programm auftaucht, hat der Programmierer sich eine selbst erstellt. Wozu die da ist kann man dann nur aus dem Programm oder vom Programmierer erfahren."
Ja so wird es wohl sein, nur wie erfahre ich als Anfänger, wie man das macht? Wichtig ist das auch für das Verständnis eines Programms, das ein User geschrieben hat oder man möchte selbst eins schreiben.
Vielen Dank MfG

Searcher
10.07.2011, 19:19
Hallo HM,


..nur wie erfahre ich als Anfänger, wie man das macht? Wichtig ist das auch für das Verständnis eines Programms, das ein User geschrieben hat oder man möchte selbst eins schreiben

Na ja, ich sehe ein Programm oder eine Funktion "Offset" nicht als Selbstzweck sondern um irgendeine Aufgabe zu erfüllen. Um ein fremdes Programm zu verstehen muß man erst mal wissen, welche Aufgabe generell zu erfüllen ist und dann noch welche benutzte Hardware welche Eigenschaften hat. Ohne ergiebige Dokumentation inclusive mehr oder weniger gute Ablaufbeschreibung hat man da als Anfänger (ich betrachte mich selbst auch noch als Anfänger) insbesondere bei größeren/komplizierten Programmen kaum eine Chance durchzublicken.

Wenn Du selbst beginnst Programme zu schreiben, wird Dir vermutlich der Offset, vielleicht auch unter anderem Namen, früher oder später über den Weg laufen und dann wissen, wie Du ihn nutzen mußt, weil er sich aus der Aufgabe ergibt.

Gruß
Searcher

PicNick
11.07.2011, 08:30
Ich darf kurz konkretes zusammenfassen:
LOOKUP ist der zugriff auf ein Element in einer Tabelle, erfordert logo:
1) den Label der Tabelle (Anfangsadresse = Base (basis))
2) etwas, mit dem der Abstand des gesuchten elementes zur Basis (= Offset) bestimmt werden kann
d.h. letztlich Tabellen-Basis + Offset => elementadresse
Da an der Tabellenbasis schon das erste element steht, hat dieses daher das Offset 0

Beispiel: das Alphabet als tabelle, also die Zeichen A bis Z hintereinander
dann findest zu das "C" mit LOOKUP ( 3, Tabelle)

HM
11.07.2011, 09:45
Hallo Searcher,
vielen Dank für Deine Antwort.
Du Schreibst:
"Wenn Du selbst beginnst Programme zu schreiben, wird Dir vermutlich der Offset, vielleicht auch unter anderem Namen, früher oder später über den Weg laufen und dann wissen, wie Du ihn nutzen mußt, weil er sich aus der Aufgabe ergibt."
Das ist eben genau der Punkt, wenn ich nicht weiß, was ich mit "Offset" machen kann, dann kann ich Ihn auch nicht verstehen und im Programm benutzen. Das gilt auch für andere Funktionen.
Ich hatte ja anfangs gedacht, daß das "Offset" an sich schon einen bestimmten Programmverlauf auslöst, quasie wie ein Schlüsselwort.
Selbst in den Büchern von Kühnel und Walther fehlt manchmal die Auskommentierung von Anweisungen, so das man rätseln muß, was da abläuft.
Für mich als Anfänger stellt sich immer die Frage, als Bsp. "Offset":
1.wofür braucht man das?
2.was bewirkt es?
3.wo kann/muß ich es einsetzen?
4.wie wirkt es mit dem Programm zusammen?
5.was kommt dabei raus?
6.wo sind Fehler vorprogrammiert?
7. gibt es Alternatieven?
und so weiter
Das sind schon einige Fragen, die mich beschäftigen, denn ein Anfänger, das sagt schon das Wort, muß von Vorne anfangen.
Oft findet man eben nur sehr lückenhafte Erklärungen/Beschreibungen.
Man muß sich eben sehr bemühen, um Ergebnisse zu erreichen, deshalb sind Foren, wie Dieses sehr wichtig. Oft bekommt man gute Antworten, außer es fühlen sich welche als Geheimnisträger und lassen einige Sachen aus.
Vielen Dank MfG

HM
11.07.2011, 10:57
Hallo PicKick,
vielen Dank für Deine Zusammenfassung.
Ich hatte schon eine Antwort fertig, leider sollte ich mich trotz das ich schon angemeldet war beim absenden nochmals anmelden, dann war alles weg..ärgerlich.
Mal sehen ob ich das noch zusammenbringe.

Du schreibst:
Ich darf kurz konkretes zusammenfassen:
LOOKUP ist der zugriff auf ein Element in einer Tabelle, erfordert logo:
1) den Label der Tabelle (Anfangsadresse = Base (basis))
2) etwas, mit dem der Abstand des gesuchten elementes zur Basis (= Offset) bestimmt werden kann
d.h. letztlich Tabellen-Basis + Offset => elementadresse
Da an der Tabellenbasis schon das erste element steht, hat dieses daher das Offset 0
Beispiel: das Alphabet als tabelle, also die Zeichen A bis Z hintereinander
dann findest zu das "C" mit LOOKUP ( 3, Tabelle)

Wenn ich das richtig verstehe oder auch nicht:
Lookup_greift auf eine Tabelle mit dem angenommenen Namen "Alphabet" zu
Label_ist der name der Tabelle
Base_ ist wahrscheinlich "A=1, B=2, C=3 unso weiter bis "Z" könnte das so aussehen_For A=1 To Z
Offset läuft von A bis Z durch und nimmt "3", da das "C" der dritte Buchstabe ist etwa_A=0+Offst

Am besten würde jetzt noch ein kleines Beispielprogramm, das ich dann ausprobieren und untersuchen könnte.
Vielen Dank MfG

Searcher
11.07.2011, 11:07
Hallo Johannes,

wenn es noch um Offset geht:

Offset ist keine Methode oder Rechenvorschrift/ -regel die man benutzt um Aufgaben zu lösen!

Als gute Erklärung habe ich diese Seite, jedoch nur in Englisch noch gefunden.
http://en.wikipedia.org/wiki/Offset_(computer_science) (http://en.wikipedia.org/wiki/Offset_%28computer_science%29)


Zu dem Rest im Post fehlt mir die Zeit (und Lust) alle meine Gedanken darzulegen. Nur kurz zu Deinen nummerierten Fragen: Das kommt mir zu theoretisch vor. Einen Überblick der Möglichkeiten sollte man natürlich haben aber dann wächst man an einer Aufgabe, also an einer konkreten Implementation in der Praxis. Klein anfangen. Wenn es nicht klappt konkrete Fragen mit allen nötigen und scheinbar unnötigen Infos stellen. Programmlisting, auf die sich Deine Offset Frage bezieht, wäre nicht schlecht gewesen.


Gruß
Searcher

PicNick
11.07.2011, 11:33
Ein Beispiel für die Verwendung von "LOOKUP" und zum Vergleich die Befehle, die man verwenden müsste, wenn man LOOKUP nicht kennt:



$regfile = "m32def.dat"
$crystal = 8000000
$baud = 9600

Dim Offset As Byte
Dim Base As Word
Dim Element As Byte
Dim Effektiv_adr As Word
Base = Loadlabel(alphabet) ' base enthält die adresse von der Tab.

For Offset = 0 To 25
Element = Lookup(offset , Alphabet)
Print "LOOKUP=" ; Chr(element) ; " ";

' äquivalent OHNE "Lookup" wäre folgendes:
Effektiv_adr = Base + Offset
Element = Cpeek(effektiv_adr)
Print "CPEEK:" ; Chr(element)

Next
Print

End

Alphabet:
Data "ABCDEFGHIJKLMNOPQRSTUVWXYZ"

HM
11.07.2011, 11:45
Hallo Searcher,vielen Dank für Deine Antwort. Ich nehme an Du meinst mich.Ja ich weiß, manchmal nerve ich ganz schön, also nimm es mir bitte nicht übel, OK?Ein Beispielprogramm wär sicherlich besser gewesen, nur das Programm mit "Offset" was ich meine war nicht von mir. Ich verstehe schon Deinen Standpunkt, ein Programm, eine oder zwei Fragen und gut.Sagt es mir bitte, wenn es Euch zuviel wird, kein Problem.Also vielen Dank nochmal. MfG

komisches Textvormat, sorry.

Richard
11.07.2011, 11:57
Beispiel:



Dim Offset As Byte
Offset = 0
Dim Ar(5) As Byte

Ar(0) = 1
Ar(1) = 2
Ar(2) = 3
Ar(3) = 4

Offset = 1
Print Ar(offset) .......2
Offset = 3
Print Ar(offset)........4



Sas sollte doch halbwegs zu verstehen sein?

Gruß Richard

PicNick
11.07.2011, 12:15
@richard, alter schlingel, Bascom-Tabellen fangen mit "1" an.
und, offset und index sollte man vielleicht nicht in einen Topf werfen

HM
11.07.2011, 12:24
Hallo PicNick,
vielen Dank für Deine Antwort und für Deine Mühe.
Irgend Etwas simmt nicht, ich mußte mich schon wieder beim Absenden der vorherigen Antwort zwei Mal anmelden, das heißt ein Mal zusätzlich zur obligatorischen Anmeldung dazu??? Irgend Etwas scheint verstellt zu sein, es läßt sich auch keine Vorschau mehr anklicken (ist weg).
Ja Dein Beispielprogramm habe ich mir ausgedruckt, ich glaube besser kann man das kaum zeigen/erklären, einfach super, vielen Dank.
Jetzt habe ich was zum experimentieren und habe keine Zeit Euch zu nerven.
Also vielen Dank nochmals. MfG

Richard
11.07.2011, 12:24
und, offset und index sollte man vielleicht nicht in einen Topf werfen

Passt aber in diesem Fall als (Verständnis) Beispiel ganz gut, ok das der Insex mit 1 anfängt...ich war zu faul alles zu verbessern. :-(

Gruß Richard

Richard
11.07.2011, 12:31
Irgend Etwas simmt nicht, ich mußte mich schon wieder beim Absenden der vorherigen Antwort zwei Mal anmelden, das heißt ein Mal zusätzlich zur obligatorischen Anmeldung dazu??? Irgend Etwas scheint verstellt zu sein, es läßt sich auch keine Vorschau mehr anklicken (ist weg).


Hatte ich letztens nach Update von Firefox auch. :-) Die cookis waren deaktiviert, nachdem ich die für das RN Netz freigegeben habe, klappt es wieder. :-)

Gruß Richard

HM
11.07.2011, 12:32
Hallo Richard,
vielen Dank für Deine Antwort.
Ich nehme mal das Beispiel von PicNick, da habe ich genug zum Ausprobieren.
Also ich denke, daß diese Diskussion nicht nur mir, sondern auch einigen anderen Anfängern helfen wird.
Nochmals vielen Dank an Alle. MfG

HM
11.07.2011, 12:35
Hallo Richard,
vielen Dank für den guten Hinweis.
Ich habe tatsächlich den Firefox, da muß ich doch gleich mal nachsehen.
Danke MfG

HM
11.07.2011, 18:44
Hallo Richard,
Dein Tipp mit den Cookis hat funktioniert, es lag tatsächlich daran.
Vielen Dank MfG

Richard
11.07.2011, 19:58
Hallo Richard,
Dein Tipp mit den Cookis hat funktioniert, es lag tatsächlich daran.
Vielen Dank MfG

Danke für die positive Rückmeldung! Das kommt hier (leider) viel zu selten vor. :-( Wenn es nicht hilft wird gemeckert, wenn es geholfen hat vergessen....

Gruß Richard

Searcher
12.07.2011, 08:20
Hallo Searcher,vielen Dank für Deine Antwort. Ich nehme an Du meinst mich.Ja ich weiß, manchmal nerve ich ganz schön, also nimm es mir bitte nicht übel, OK?...

Hallo HM,
Ja, ich meinte Dich, HM. Bin ich wohl mit 'nem anderen thread durcheinandergeraten:(. Außer der Anrede paßte aber der Inhalt.

Du nervst zumindest mich nicht. Ich kann, denke ich, nachfühlen, wie das ist, wenn man an Begriffen knobelt, die andere wie selbstverständlich benutzen und man da selbst irgendeine unbegreifliche Blockade hat. Geht mir manchmal so, aber irgendwann wird sich das Dunkel schon lichten.

Also keine Frage von übel nehmen. Wenn mein Beitrag so geklungen hat, stammte das möglicherweise aus meinem pP (persönlichem Problem). Ich war dabei auf auf Deinen thread detailiert einzugehen, was dann aber auszuarten drohte, nicht mehr zum topic gehört hätte und ich dann auf die Bremse trat.

Also weiter so und
Gruß
Searcher

HM
12.07.2011, 16:31
Hallo Richard,
für mich ist es immer selbstverständlich, jemanden der mir weitergeholfen hat, eine Rückmeldung zu geben, das mach ich doch gern. Damit kann man ja auch ein großes "Dankeschön" ausdrücken und der Helfer fühlt sich gut dabei und wird gern wieder helfen. Wenn mal jemand nicht so gut geholfen hat, ist das für mich zwar nicht so gut, doch ich werde nicht "meckern", denn für den "Helfer war seine Erklärung" plausiebel.
Es ist wie mit den Handbüchern zu Elektrogeräten z.Bsp. Spülmaschine, Waschmaschine, Viedeorecorder oder auch andere el. Geräte. Ich komm da zwar gut zurecht damit, brauch da kaum reinzuschauen, weil ichs lieber ausprobiere und dabei lerne, wie das geht, doch es gibt auch Leute, die daß das erste Mal machen, die brauchen eben dann Hilfe von außen, weil das Ings. geschrieben haben, für die das alles normal ist.
So jetzt muß ich aber aufhören, sonst gibts Ärger, weil das ja nicht zum Thread gehörd "einmal geht das schon".
MfG

HM
12.07.2011, 17:19
Hallo Searcher,
vielen Dank für Deine Antwort.
Ja ich konnte mir das schon denken, das Du mich meinst, war ja offensichtlich, also kein Problem, OK.

Du schreibst:
"Ich kann, denke ich, nachfühlen, wie das ist, wenn man an Begriffen knobelt, die andere wie selbstverständlich benutzen"

Schön das Du das kannst. Wenn man googelt, dann findet man oft Etwas, doch auch oft nur in anderen Zusammenhängen, die Kunst ist eben das Richtige für sich herauszufinden, wenn mir das nicht gelingt, dann muß ich fragen. Z.Bsp., was kann man mit dem Wort "Heridermodul" anfangen, für was ist das im Programm? Weißt Du es, hast Du schon damit programmiert? Sicherlich nicht, denn ich glaube daß es das Wort nicht gibt. Der Vergleich hinkt, macht aber deutlich, wie es ist, wenn mann eine Funktion sieht und wenig damit anfangen kann.

Du schreibst:
"Also keine Frage von übel nehmen. Wenn mein Beitrag so geklungen hat, stammte das möglicherweise aus meinem pP (persönlichem Problem). Ich war dabei auf auf Deinen thread detailiert einzugehen, was dann aber auszuarten drohte, nicht mehr zum topic gehört hätte und ich dann auf die Bremse trat.

Könnte man so auffassen, war aber nicht so, ich bin gut im "Nehmen" und vertrage einiges, also kein Problem, ich bin eben jemand mit langer Lebenserfahrung.
Wenn Du auf meinen Thread detailiert eingehen wolltest, sehe ich das sehr positiv. Wenn Du meinst, das gehört nicht hierher, dann kannst Du mir ja auch in einer pN noch Tipps geben, ich bin immer offen dafür.
Vielen Dank MfG

HM
21.07.2011, 11:41
Hallo PicNick und alle Anderen,
wie man sieht interessiert dieses Thema viele User (ca. 550) Hits, das zeigt, daß meine Frage doch nicht so abwegig ist.
Das Programm von "PicNick" funktionierte auf Anhieb, vielen Dank nochmal.
Ich habe mal versucht das Programm auszukommentieren, korrigiert mich bitte, wenn was falsch ist.
PS.:Wie bekomme ich denn die Kommentare im Fenster auf gleiche Höhe?
MfG


$regfile = "m16def.dat"
$crystal = 8000000
$baud = 19200

Dim Offset As Byte
Dim Base As Word
Dim Element As Byte

Base = Loadlabel(alphabet) 'Adresse der Tabelle "Alphabet" laden

For Offset = 0 To 25 'gibt an wieviel Buchstaben in der Tabelle sind
'und erfaßt die Buchstaben der Reihe nach
Element = Lookup(offset , Alphabet) 'holt die Buchstaben aus der Tabelle unter
'Berücksichtigung der Reihenfolge
Print " Lookup=" ; Chr(element) ; ""; 'gibt an was und wie angezeigt wird
Next 'zum Anfang "For"

Print 'Ausgabe auf dem Terminal neue Zeile


End

Alphabet: 'Label

Data "ABCDEFGHIJKLMNOPQRSTUVWXYZ" 'Tabelle

PicNick
21.07.2011, 12:37
Ich hab's wegen der Formatierung versucht, viel besser bring ich das auch nicht zusammen. sry

Kommentare passen so, alles klar

HM
22.07.2011, 09:56
Hallo PicNick und alle Anderen,
vielen Dank für Deine Antwort.
Ja wenn die Kommentare stimmen, dann habe ichs wohl verstanden, jedenfalls für dieses Beispiel.
Aber was ist, wenn da im Programm mehrere Offset stehen?
Zum Programm:
Man könnte ja versuchen, die Anzeigedauer der Buchstaben / Ausgabe noch zeitlich zu steuern oder geht das jetzt zu weit (nur so ein Gedanke)?
Vielen Dank für Antworten. HM

Richard
22.07.2011, 11:50
Man könnte ja versuchen, die Anzeigedauer der Buchstaben / Ausgabe noch zeitlich zu steuern oder geht das jetzt zu weit (nur so ein Gedanke)?
Vielen Dank für Antworten. HM

Nö, das geht ganz einfach in dem man zeitgesteuert den Index erhöht in etwa....einfach mal etwas herum Testen. :-)




................

Base = Loadlabel(alphabet) 'Adresse der Tabelle "Alphabet" laden

For Offset = 0 To 25 'gibt an wieviel Buchstaben in der Tabelle sind
'und erfaßt die Buchstaben der Reihe nach
Element = Lookup(offset , Alphabet) 'holt die Buchstaben aus der Tabelle unter
'Berücksichtigung der Reihenfolge
Print " Lookup=" ; Chr(element) ; ""; 'gibt an was und wie angezeigt wird

*****************
Wait ms 1000 ' 1 s warten
****************
Next
.............


Gruß Richard

HM
22.07.2011, 12:37
Hallo Richard,
vielen Dank für Deine Antwort.
Ja das stimmt, weil Du die Pause vor dem Next reingeschrieben hast, ich hatte sie nach dem Next reingeschrieben, da hat das Programm nur länger gewartet, bis es wieder von vorne angefangen hat.
Da sieht man wiedermal, daß die Reihenfolge doch wichtig ist, irgendwie hatte ich mir das komplizierter vorgestellt, aber ist auch logisch.
Wieder was gelernt.:p MfG HM