- LiFePO4 Speicher Test         
Seite 2 von 3 ErsteErste 123 LetzteLetzte
Ergebnis 11 bis 20 von 21

Thema: Programmspeicher reicht nicht aus

  1. #11
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    08.07.2006
    Ort
    Karlsruhe/München
    Alter
    34
    Beiträge
    587
    Anzeige

    E-Bike
    Bestimmst du die Größe über den Explorer oder über AVR-size. Die hex-explorer-datei-größe (klingt jetzt blöd) sagt wenig aus.

  2. #12
    Erfahrener Benutzer Robotik Einstein Avatar von Vitis
    Registriert seit
    06.01.2005
    Ort
    Südpfalz
    Alter
    50
    Beiträge
    2.253
    Einen Code, den man nich schrumpfen/verkleinern kann gibts nicht
    Vor den Erfolg haben die Götter den Schweiß gesetzt

  3. #13
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    14.01.2007
    Beiträge
    209
    Wenn ich das Programm auf den Mega überspielen will, öffne ich ja den "Programmer". Dort angekommen steht dann im linken unterem Fensterrand "3988 bytes read". Ich war jetzt mal davon ausgegangen, dass dieser Wert die Größe des Programmes ist. Und da der Mega8 ja 8kB Programmspeicher hat hatte ich (meiner Ansicht nach) logisch geschlossfolgert, dass das Programm auf diesem AVR schon knapp die Hälfte des Programmspeichers einnimmt. Das stimmt doch soweit oder etwa nicht?

    MfG Killer

  4. #14
    Benutzer Stammmitglied
    Registriert seit
    24.09.2006
    Beiträge
    84
    Ja, soweit ich weiß, stimmt das. Was hast du denn für tollen Quellcode, dass er sich nicht verkleinern lässt? Welche Optimierungsstufe hast du eingestellt? Magst du uns ein paar Quellcodeteile zeigen?

    Viele Grüße
    CsT

  5. #15
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    14.01.2007
    Beiträge
    209
    Was meinst du mit Optimierungsstufe? Also ich habe da bis jetzt 10 if-Abfragen und halt ein paar Variablen welche definiert werden und die Ausgabe von Zeichen per serielle Schnittstelle. In je einer if-abfrage werden per "and" addiert, 9 Variablen abgefragt (!!!!) wodurch die Größe sehr zunimmt!!! Da fällt mir ein, dass es beispielsweise bei C++ neben den if-Abfragen noch weitere, einfachere switch-abfragen gibt. Gibt es deratige einfachere auch in BASCOM?
    Eine von 10 Abfragen sieht bei mir momentan wie folgt aus:
    Code:
    If Bit1 = 0 And Bit2 = 0 And Bit3 = 0 And Bit4 = 0 And Bit5 = 0 And Bit6 = 0 And Bit7 = 0 And Bit8 = 0 And Bit9 = 0 And Bit10 = 1 Then
       Getzahl = 0
       Return
       End If
    Meine Grundidee ist bei diesem Projekt, den Zustand von 10 Datenleitungen in Variablen anzugeben und anschließend abzufragen und einer Variable (hier "Getzahl") zuzuordnen. Zur Info: Die Datenleitungen kommen von einem weiteren Prozessor. Ich weiss, diese ganze Übertragungsart geht sicherlich wesentlich einfacher über diverse vorgegebene Schnittstellen, aber ich möchte die Übertragung in meinem ersten größeren Projekt eben so haben!!

    So, genug gepostet, jetzt dürft ihr antworten ob es einfachere Abfragen gibt \/

    MfG Killer

  6. #16
    Benutzer Stammmitglied
    Registriert seit
    23.03.2007
    Ort
    Wien
    Alter
    32
    Beiträge
    55
    sollen die immer das gleiche ERgenbis haben also bit1-10 immer das gleiche sein dann probier mal eine funktion mit einem parameter der das zeichen/zahl ist und die Bits überprüft, bzw kann man net schreiben
    (c++ code )
    if((Bit1&&Bit2&&Bit3&&Bit4&&...Bit10)==0)
    ?

  7. #17
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    14.01.2007
    Beiträge
    209
    Nö, wie man sieht (oder auch nicht) ist in dem von mir oben geposteten Code Bit10=1 oder soll es zumindestend sein. Also fals folgendes erhalten wird:

    0000000001
    das geht weiter bis.
    0000001010
    dies ist das Synonym für die Ziffer 9.
    Tja, in C++ hätte ich das genauso gemacht wie Du, Noss aber leider mache ich dies in Bascom

    MfG Killer

  8. #18
    Benutzer Stammmitglied
    Registriert seit
    23.03.2007
    Ort
    Wien
    Alter
    32
    Beiträge
    55
    hmm das BIT ist ein int. du könntest nochmal das ganze runtersetzen indem du es zu nem BOOL (gibts das in BASCOM) speichern. und ich würds zur übersichtlichketi vllt. noch in ein array schreiben... aber du kannst ne funktion schreiben die 10 paramater hat und dann gibts sie dir false oder true zurück wenn diese passen das sollte es jedenfalls verkleinenern oder? wenn true zurück gegeben wird setzt du dann einfach fetzahl auf 0.

    jo die 1 hat ich übersehen

  9. #19
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    21.12.2004
    Alter
    40
    Beiträge
    165
    Zitat Zitat von Killer
    Tja, in C++ hätte ich das genauso gemacht wie Du, Noss aber leider mache ich dies in Bascom
    Ist ja toll das du das dann ganz anders schreiben wuerdest, aber ich wuerde mit dir wetten das sich der generierte Code nicht wirklich unterscheidet.
    Wer ne Sprache fuer Beginner waehlt muss halt bisschen mehr schreiben...

    [glaskugel_auspack]
    0000000001
    das geht weiter bis.
    0000001010
    dies ist das Synonym für die Ziffer 9.
    Kleiner Tipp, wenn 1 bei dir eine 0 ist und 10 eine 9, und du dann wahrscheinlich diese Zahlen eh ausgibst. Dann bastel dir deine Bits passend in eine Variable und subtrahiere 1.


    Oder nimm gleich C++


    du könntest nochmal das ganze runtersetzen indem du es zu nem BOOL [...]
    aber du kannst ne funktion schreiben die 10 paramater hat
    Also wenn ihr alle so codet ist es klar das der Speicher nicht reicht.

    Effizienz Leute!

  10. #20
    Benutzer Stammmitglied
    Registriert seit
    23.03.2007
    Ort
    Wien
    Alter
    32
    Beiträge
    55
    Code:
    BOOL check(BOOL bit1, BOOL bit2, BOOL bit3, BOOL bit4, BOOL bit5, BOOL bit6, BOOL bit7, BOOL bit8, BOOL bit9, BOOL bit10)
    {
     if(global_bit1==bit1&&global_bit2==bit2&&...global_bit10==bit10)
      return 0; //Vergleich positiv
     else
      return 1; // Vergleich negativ
    }
    so war das gemeint aber am schönsten wäre es mit strukturen....
    und das verbraucht viel wenigser speicher als 10 mal das ganze
    btw so rufst dus dann auf
    Code:
    if(check(0,0,0,0,0,0,0,0,0,1)==0)
    {
    tu was verdammt
    }
    und das ist schon effizenter oder und warum BOOL
    weil BOOL nur ein bit belegt int jedoch viel mehr und wenn es nur zustand 1 und 0 sein muss... sag mir was daran uneffizient ist

Seite 2 von 3 ErsteErste 123 LetzteLetzte

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •  

fchao-Sinus-Wechselrichter AliExpress