-
        

+ Antworten
Seite 1 von 2 12 LetzteLetzte
Ergebnis 1 bis 10 von 11

Thema: merkwrdige Abstrze abhngig von Menge Programmcode

  1. #1
    Benutzer Stammmitglied
    Registriert seit
    19.02.2010
    Beitrge
    67

    merkwrdige Abstrze abhngig von Menge Programmcode

    Anzeige

    Hallo Forum,

    der Titel ist zugegebenerweise sehr verwirrend, aber das Problem ist folgendes:

    Ich entwickel ein Program auf dem Savvy128 Controller Board von chip45.com.

    Mitlerweile meldet der Bascom-Compiler: Flash used: 51%

    seit ich etwa die 50%-Marke berschritten habe, treten sehr oft Programmabstrze im ATMEGA auf.

    Wenn ich beispielsweise eine Function ans Programmende anfge, sie ordentlich deklariere, compiliere und auf den Controller brenne, spinnt anschlieend mein Programm auf dem Controller.
    Es werden wild Ausgnge geschaltet - an denen wo Hardware hinterhngt, seh ich anziehende und abfallende Ventile, oder PWM-Ansteuerungen von Lftern und Heizungen und ber die serielle Schnittstelle sehe ich Statusmeldungen von Neustarts aller paar Sekunden.
    Mein LCD-Display fllt sich auf allen Positionen mit einem Zeichen.

    Dies alles geschieht, nur durch den zustzlichen Code, es gab noch keinen Aufruf der function.


    Ein anderes Bespiel:

    Ich mchte Parameter, zur Anzeige auf das Display bringen. Ca. 20 Parameter, wobei jeweils ein Parameter und sein Variablenname auf dem Display abgebildet werden soll.
    Ursprnglich eine Case-Auswahl, zwischenzeitlich zur Fehlereingrenzung 20 If-Then Anweisungen wo je nach gewhlter Parameter-Nummer die zwei LCD-Anweisungen ausgefhrt werden (Variablenname und Variablenwert)
    Jedenfalls, habe ich die gesamt Sub im Programm, spinnt alles, wie oben beschrieben, grenze ich per Auskommentierung vielleicht 10 der 20 If-Then-Blcke aus luft es.

    Ich mchte damit ausdrcken, dass funktionstchtiger Programmcode, offensichtlich einfach durch sein Vorhandensein fr diese Abstrze verantwortlich ist - und das bei einem Flash-use von ca. 50%.

    Da das Programm aus sehr vielen nderungen besteht, wobei alte Programmteile nicht mehr aufgerufen werden, helfe ich mir jetzt damit, dass ich beim Auftreten eines Fehlers solch alten Code Suche und lsche - mir damit Platz schaffe und somit dann auch an neuen Baustellen weiterkomme.

    Aber der Fehler muss ja woanders liegen - wo kann ich noch suchen?
    Wer hat hnliches beobachtet - und vielleicht die Lsung gefunden?


    besten Dank fr kommende Lsungsvorschlge



    BoGe-Ro

  2. #2
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    08.01.2006
    Beitrge
    4.556
    Mglich das du deinen Stack berschreibst, vergrer den mal.

    Gru Richard

  3. #3
    Erfahrener Benutzer Robotik Visionr Avatar von Hubert.G
    Registriert seit
    14.10.2006
    Ort
    Pasching O
    Beitrge
    6.158
    Es kann aber auch sein das dir dein SRAM zu klein wird.
    Ich kann kein BASCOM, aber in C legt man z.B. Anzeigen frs LCD im PROGMEM ab oder im EEPROM.
    20 Variablen-Namen frs LCD sind gleich mal eine Menge Byte.
    Wird beim Compilieren im Bascom nicht ausgegeben wie viel Platz im SRAM fest belegt ist?
    Grsse Hubert
    ____________

    Meine Projekte findet ihr auf schorsch.at

  4. #4
    Benutzer Stammmitglied
    Registriert seit
    19.02.2010
    Beitrge
    67
    Hallo,

    danke fr Eure Antworten.

    Ich habe die Stacks als auch die Angabe fr Framesize erhht (Stacks verdoppelt, Framesize auf 1,3fach) was beides keine Besserung brachte.
    Getestet hab ich es an diesen If-Then-Blocks - also ganz sicher fehlerfreiem Code.

    Zur zweiten Antwort: der SRAM-Speicherplatz wird whrend der Compilierung gegengecheckt - aus dem Grund hab ich auch die Angabe Framesize vom ursprnglich doppelten Wert bis auf den 1,3 fachen verkleinert - weil der Compiler mit "zu wenig SRAM" quitierte.

  5. #5
    Erfahrener Benutzer Robotik Einstein Avatar von Vitis
    Registriert seit
    06.01.2005
    Ort
    Sdpfalz
    Alter
    42
    Beitrge
    2.238
    msste man den code sehen um wirklich was sagen zu knnen.

    Aber solche Fehler kommen idR mit Frame SwStack HwStack.

    Ich geh immer hin und verteile den freien ungenutzten SRAM komplett auf die Geschichte. seitdem gehts meist gut. Aber wie gesagt, ohne Code schwer zu sagen.

    Ach so, eins hatt ich mal.

    Wenn ich Subroutinen per gosub angesprungen habe war ab ner kritischen Menge hnliches Verhalten.
    Seit ich meine Unterroutinen in Sub packe und per call aufrufe ists besser.
    Vor den Erfolg haben die Gtter den Schwei gesetzt

  6. #6
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    19.02.2008
    Ort
    Pohlheim
    Alter
    26
    Beitrge
    240
    Hi,

    ich hatte auch ein phnomen mit folgendem Code:

    Am Ende meines Programms hatte ich Bgf-Dateien fr ein Display angehngt und direkt dahinter den "end" Befehl gesetzt. Immer wenn ich das letzte Bild, was direkt ber dem end stand, aufgerufen habe waren extreme Pixelfehler auf dem Display zu sehen.

    Vielleicht ist es bei dir ja auch etwas hnliches.

  7. #7
    Erfahrener Benutzer Roboter Genie Avatar von Willa
    Registriert seit
    26.10.2006
    Ort
    Bremen
    Alter
    36
    Beitrge
    1.267
    Ich wrds nochmal mit hwstack, swstack, framesize versuchen.... Habe auch die Erfahrung gemacht, dass Abstrze manchmal daran liegen. Und Faktor 1.3 ist vielleicht einfach noch nicht genug. Ich bin z.B. schon bei diesen haarstrubenden Werten angekommen (ohne wirklich zu wissen was ich da tue...):
    Code:
    '===Settings ===
    $regfile = "m328pdef.dat"
    $framesize = 512                                            'smaller than 128 => stops responding...
    $swstack = 256
    $hwstack = 128                                              '256
    $crystal = 8000000
    $baud = 38400

  8. #8
    Erfahrener Benutzer Robotik Einstein Avatar von Vitis
    Registriert seit
    06.01.2005
    Ort
    Sdpfalz
    Alter
    42
    Beitrge
    2.238
    da kann ich mit:

    Code:
    $regfile = "m128def.dat"                                    ' specify the used micro
    $crystal = 14745600                                         ' used crystal rfm_Frequency
    $baud = 38400                                               ' use baud rate
    
    $hwstack = 400                                              ' default use 32 for the hardware stack
    $swstack = 990                                              ' default use 10 for the SW stack
    $framesize = 990
    Vor den Erfolg haben die Gtter den Schwei gesetzt

  9. #9
    Erfahrener Benutzer Robotik Einstein Avatar von wkrug
    Registriert seit
    17.08.2006
    Ort
    Dietfurt
    Beitrge
    1.823
    Krzlich hatte ich ein Problem in "C" mit berlaufenden indizierten Variablen.

    Eine Variable war mit 20 Zeichen definiert.

    unsigned char stoerer [20];
    unsigned char gestoert=0;

    im Programm wurde die Variable stoerer mit dem Wert 20 ( =der 21. Wert ) indiziert.

    stoerer[20]=44;

    Da dieser Speicherplatz allerdings nicht mehr der Variable stoerer zugewiesen war, wurde die Variable gestoert auf den Wert 44 gesetzt, was natrlich zu Problemen fhrt.

    Eventuell hast Du bei Deinem Programm das gleiche Problem ?!

  10. #10
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    08.01.2006
    Beitrge
    4.556
    Zitat Zitat von Willa
    Ich wrds nochmal mit hwstack, swstack, framesize versuchen.... Habe auch die Erfahrung gemacht, dass Abstrze manchmal daran liegen. Und Faktor 1.3 ist vielleicht einfach noch nicht genug. Ich bin z.B. schon bei diesen haarstrubenden Werten angekommen (ohne wirklich zu wissen
    So weit mir bekannt kann man Bascom anweisen sehr ausfhrliche Logdateien beim Compilieren zu erstellen.
    Dort sollte auch die Stack Auslastung zu finden sein.

    Gru Richard

+ Antworten
Seite 1 von 2 12 LetzteLetzte

Berechtigungen

  • Neue Themen erstellen: Ja
  • Themen beantworten: Ja
  • Anhnge hochladen: Nein
  • Beitrge bearbeiten: Nein
  •