AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

wo kommt das type hin?

Ein Thema von hedie · begonnen am 9. Jun 2010 · letzter Beitrag vom 10. Jun 2010
Antwort Antwort
idefix2

Registriert seit: 17. Mär 2010
Ort: Wien
1.027 Beiträge
 
RAD-Studio 2009 Pro
 
#1

AW: wo kommt das type hin?

  Alt 10. Jun 2010, 00:07
Zitat:
Wie greife ich den danach auf ein Array zu?
Etwa so?
Data[0][0] := xyz; //Array0 Feld 0
ja, genau so

Heute bin ich schon müde, morgen (heute nach dem Aufstehen ) sehen wir weiter
  Mit Zitat antworten Zitat
hedie

Registriert seit: 12. Dez 2005
Ort: Schweiz
1.024 Beiträge
 
Delphi XE6 Starter
 
#2

AW: wo kommt das type hin?

  Alt 10. Jun 2010, 06:38
Dan sag ich mal Guten Morgen
Claudio
Tu was du nicht lassen kannst
- http://endasmedia.ch
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.549 Beiträge
 
Delphi 12 Athens
 
#3

AW: wo kommt das type hin?

  Alt 10. Jun 2010, 06:51
Zitat:
Wie greife ich den danach auf ein Array zu?
Etwa so?
Data[0][0] := xyz; //Array0 Feld 0
ja, genau s
oder so Data[0, 0] := xyz;
Ein Therapeut entspricht 1024 Gigapeut.
  Mit Zitat antworten Zitat
hedie

Registriert seit: 12. Dez 2005
Ort: Schweiz
1.024 Beiträge
 
Delphi XE6 Starter
 
#4

AW: wo kommt das type hin?

  Alt 10. Jun 2010, 07:44
Hab neuigkeiten

Wenn ich bei

Delphi-Quellcode:
procedure TForm1.refresh_all;
begin
  draw_raw_data(Image9,main_color,data1);
  draw_raw_data(Image12,main_color,data2);
  //draw_raw_data(Image13,main_color,data3);
  //draw_raw_data(Image14,main_color,data4);
  //draw_raw_data(Image15,main_color,data5);
  //draw_raw_data(Image16,main_color,data6);
  //draw_raw_data(Image17,main_color,data7);
  //draw_raw_data(Image18,main_color,data8);
end;
Nur die Daten data1 und data2 verarbeite so wie hier, dan klappt es. Also data1 und data2 werden korrekt dargestellt.
data3 hat abwechselnd immer 0 und 1 im Array
data4 - data8 haben nichts im array
Claudio
Tu was du nicht lassen kannst
- http://endasmedia.ch
  Mit Zitat antworten Zitat
idefix2

Registriert seit: 17. Mär 2010
Ort: Wien
1.027 Beiträge
 
RAD-Studio 2009 Pro
 
#5

AW: wo kommt das type hin?

  Alt 10. Jun 2010, 09:29
Ich habe jetzt versucht, das Programm halbwegs zu verstehen - leider ist es so programmiert, dass es einem Aussenstehenden fast unmöglich gemacht wird, etwas zu begreifen:

Wenn ich es jetzt richtig verstanden habe, werden in data[x] und data [x+1] grundlegend verschiedene Arten von Daten abgespeichert, nämlich in data[x] daten, und Data[x+1] irgend eine Art von Index. SO GEHT ES EINFACH NICHT!

Mit irgend etwas auf die Art

Delphi-Quellcode:
var
Data: array [1..4] of record
    Datenelement: integer;
    index: integer
    end;
würde man auf Anhieb sehen, wie die Daten im Programm organisiert sind. So wie das Programm jetzt aussieht (Datenstrukturen, keine Schleifen, die falschen Schleifen) blicke ich einfach nicht durch, was gewollt ist und was passieren sollte, und wo deshalb der Fehler liegen könnte.
  Mit Zitat antworten Zitat
hedie

Registriert seit: 12. Dez 2005
Ort: Schweiz
1.024 Beiträge
 
Delphi XE6 Starter
 
#6

AW: wo kommt das type hin?

  Alt 10. Jun 2010, 09:45
Wenn ich es jetzt richtig verstanden habe, werden in data[x] und data [x+1] grundlegend verschiedene Arten von Daten abgespeichert, nämlich in data[x] daten, und Data[x+1] irgend eine Art von Index. SO GEHT ES EINFACH NICHT!
Ja das hast du richtig verstanden.

Also ich versuche es mal zu erklären...

Ziel ist es, eine darstellung wie diese zu erzeugen: http://home.netcom.com/~chip.f/viterbi/figs/ce_td.gif
Dazu verwende ich ein Image auf welches ich mit canvas zeichne.

Meine Hardware liest 50'000 mal ein ob es eine 1 oder eine 0 ist also oben oder unten. Ungeachtet dessen was es den nun ist,
werden diese 50'000 bytes übertragen. Ein byte entspricht binär 8 zuständen also zb 1001 1010 deshalb auch 8 kanäle.
Nun muss ich überprüfen wo in den 50'000 bytes eine änderung stattgefunden hat. Dazu wandle ich von Dezimal nach binär damit ich
jeden kanal "sehe" ob er 1 oder 0 war. speichere ich das abbild in einem array Move(temp_data[0], old_data[0], Length(temp_data)); //Array kopieren Danach mache ich die Dezimal -> Binär wandlung mit dem nächsten byte temp_data[0] := Store_Buffer[i] mod 2; und speichere
das ergebnis also die binär zahl in einem array.
Anschliessend vergleiche ich jede Binärstelle mit dem vorhergehenden wert. Wenn nun eine 1 anstelle der 0 steht, so weiss ich das sich der zustand damals an der leitung der hardware geändert hat.
Also speichere ich in das array data1 (für kanal 1) die änderung und damit ich weiss wo auf dem diagram speichere ich noch den index der 50'000 daten.

Dieser ist ja proportional zur zeit und gibt mir anschliessend die position wo ich den den strich nach oben oder unten zeichnen muss....

Hoffe es ist nun verständlich
Claudio
Tu was du nicht lassen kannst
- http://endasmedia.ch
  Mit Zitat antworten Zitat
hedie

Registriert seit: 12. Dez 2005
Ort: Schweiz
1.024 Beiträge
 
Delphi XE6 Starter
 
#7

AW: wo kommt das type hin?

  Alt 10. Jun 2010, 11:18
So ich hab mal optimiert...

Delphi-Quellcode:
procedure TForm1.prepaire_data;
  var
alter_wert,i,a,temp_wert,Kanal1_Counter:integer;
temp_data,old_data:Array[0..8] of integer;
begin

  Kanal1_Counter := 0;

  for i := 0 to gesamt_einheit - 1 do
  begin

    temp_wert := store_Buffer[i];
    for a := 0 to 7 do
    begin
     temp_data[a] := temp_wert mod 2;
     temp_wert := temp_wert div 2;
    end;

    if temp_data[0] <> old_data[0] then begin //Prüfen ob sich der wert geändert hat.
      Kanal1[Kanal1_Counter].Pegel := temp_data[0]; //Wenn ja, neuer Wert (0 oder 1) in den Pegel von Kanal1 schreiben
      Kanal1[Kanal1_Counter].Index := i; //Index übergeben damit ich weiss wo ich zeichnen muss
      Kanal1_Counter := Kanal1_Counter + 1; //Kanal1 Counter erhöhen
    end;

    Move(temp_data[0], old_data[0], Length(temp_data)); //Array kopieren damit man anschliesend vergleichen kann

  end;

  Kanal1[Kanal1_Counter].Pegel := 2; //Terminierung des Arrays da Pegel nur 0 oder 1 sein kann

end;

Frage: Kann man da noch was optimieren?
Weil ich müsste ja eigentlich für jeden kanal wieder das selbe machen wie für kanal1


Nochmal was Optimiert:

Delphi-Quellcode:
procedure TForm1.draw_raw_data(drawspace:TImage;color:TColor;data_in:Array of TKanal);
var
counter:integer;
begin

  counter := 0;

  repeat
    draw_up(drawspace,color,((data_in[counter].Index - start) div ein_pixel));
    if (data_in[counter-1].Pegel) = 1 then draw_line(drawspace,color,(data_in[counter-1].Index-start) div ein_pixel,(data_in[counter].Index - start) div ein_pixel,5);
    if (data_in[counter-1].Pegel) = 0 then draw_line(drawspace,color,(data_in[counter-1].Index-start) div ein_pixel,(data_in[counter].Index - start) div ein_pixel,25);
    counter := counter + 1;
  until (data_in[counter].Pegel = 2); //Prüfen ob array ende erreicht ist.

  if data_in[counter -1].Pegel = 1 then draw_line(drawspace,color,(data_in[counter-1].Index-start)div ein_pixel,gesamt_einheit div ein_pixel,5);
  if data_in[counter -1].Pegel = 0 then draw_line(drawspace,color,(data_in[counter-1].Index-start)div ein_pixel,gesamt_einheit div ein_pixel,25); //Letzte linie erzeugen

 end;
EDIT:
Delphi-Quellcode:
  type
    TKanal = record
      Pegel: Byte;
      Index: integer;
    end;

Kanal1:Array[0..10000] of TKanal;
Werde nun testen ob es nun kein verlust mehr gibt
Claudio
Tu was du nicht lassen kannst
- http://endasmedia.ch

Geändert von hedie (10. Jun 2010 um 11:21 Uhr) Grund: was vergessen
  Mit Zitat antworten Zitat
hedie

Registriert seit: 12. Dez 2005
Ort: Schweiz
1.024 Beiträge
 
Delphi XE6 Starter
 
#8

AW: wo kommt das type hin?

  Alt 10. Jun 2010, 11:31
Ich hab den Fehler eingegrenzt

Er taucht hier auf:

Delphi-Quellcode:
if temp_data[0] <> old_data[0] then begin //Prüfen ob sich der wert geändert hat.
      Kanal1[Kanal1_Counter].Pegel := temp_data[0]; //Wenn ja, neuer Wert (0 oder 1) in den Pegel von Kanal1 schreiben
      Kanal1[Kanal1_Counter].Index := i; //Index übergeben damit ich weiss wo ich zeichnen muss
      Kanal1_Counter := Kanal1_Counter + 1; //Kanal1 Counter erhöhen
    end;
Wenn ich anstelle von temp_data[0] temp_data[2] nehme gibts ne Access Violation

temp_data ist temp_data,old_data:Array[0..8] of integer; Ich denke das problem ist beim übergeben Kanal1[Kanal1_Counter].Pegel := temp_data[0]; Pegel ist eine byte variable
Delphi-Quellcode:
type
    TKanal = record
      Pegel: Byte;
      Index: integer;
    end;
Was meinst du / ihr ?

EDIT: Wenn ich Pegel auf integer umstelle, gibts keine veränderung... Auch eine Access Violation bei
Code:
00406ADC 50               push eax
Claudio
Tu was du nicht lassen kannst
- http://endasmedia.ch

Geändert von hedie (10. Jun 2010 um 11:34 Uhr) Grund: Was getestet
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 19:35 Uhr.
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz