-         

Seite 1 von 2 12 LetzteLetzte
Ergebnis 1 bis 10 von 12

Thema: Frage zu LOOKUPSTR()

  1. #1
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    01.12.2005
    Ort
    @FFM
    Alter
    41
    Beiträge
    402

    Frage zu LOOKUPSTR()

    Anzeige

    Hallo ..

    gibt es eine möglichkeit die lookupstr funktion mit eeprom daten zu nutzen ?

    Gruß Daniel

  2. #2
    Super-Moderator Robotik Visionär Avatar von PicNick
    Registriert seit
    23.11.2004
    Ort
    Wien
    Beiträge
    6.836
    Lookup /down() ist speziell für Flash gemacht.
    Im SRAM und ERAM gibt's ja eigentlich keine (Bascom) Möglichkeit, solche String-Ketten zu erzeugen.
    Aber es gibt einige Varianten, so ein Problem zu lösen.
    Was konkret soll's denn werden ?
    mfg robert
    Wer glaubt zu wissen, muß wissen, er glaubt.

  3. #3
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    01.12.2005
    Ort
    @FFM
    Alter
    41
    Beiträge
    402
    also ich wollte um flash zu sparen ,menue punkte im eeprom speichern
    mit der $eeprom und data anweisung kann ich ja string ketten als .eep
    in den eeprom schreiben
    um dann die entsprechenden untermenuepunkte zu suchen hät ich dann lookupstr genutzt

    also in etwa
    data "u00 ",hauptmenu1","u01","hauptmenue2","u02","hauptmenu 3","u03"
    data "u01 ", "untermenue1.1","untermenue1.2"
    data "u02 ","untermenue2.1","u17","untermenue3.1","u18"
    dabei ist zb u01 in der ersten zeile die sprungadresse wo er von dort aus hin soll da adiere ich n leerzeichen und Suche nach nem string der dann
    also "u01 " ist und bin dann im entsprechenden untermenue
    dieUxx am anfang ist also die startadresse für eine menueebene die zahl dahinter der zeiger zu nächsten unterebene

    ich hoffe du verstehst was ich meine gruß daniel

  4. #4
    Super-Moderator Robotik Visionär Avatar von PicNick
    Registriert seit
    23.11.2004
    Ort
    Wien
    Beiträge
    6.836
    Der Lookupstr() hantelt sich über die String-terminatoren (&H00) von einem String zum nächsten und zählt dabei mit. Dabei geht's von 0 weg (index für den ersten string)
    Du mußt wohl mit "READEEPROM var, adresse" arbeiten und dir so eine Lookupstr() funktion selber machen.
    Frage: Normalerweise hat man ja wenig SRAM, noch weniger ERAM aber massig FLash. Bist du sicher, du willst die strings im ERAM ablegen ?
    mfg robert
    Wer glaubt zu wissen, muß wissen, er glaubt.

  5. #5
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    01.12.2005
    Ort
    @FFM
    Alter
    41
    Beiträge
    402
    naja ich hab nen tiny und ne menge code da ist jeder platz zu nutzen

  6. #6
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    22.12.2004
    Alter
    64
    Beiträge
    277
    Hallo,

    da gebe ich Robert völlig recht. Zu solchen Kunstgriffen greife ich nur bei extrem großen Projekten mit viel, viel Text auf 40x4 Displays. Dann verwende ich aber auch nicht das interne EEprom des AVR, sondern ein externes 64k I2C-EEprom, das gesondert mit den Texten beschrieben wird. Dabei überlege ich mir vorher eine für das Projekt geeignete "Formatierung" des EEprom und rufe die Texte dann mit einer Sub ab, der nur ein Pointer auf den gewünschten Text/Bildschirminhalt übergeben wird.

    Wenn ich das richtig verstanden habe, möchtest Du vor allem ein Menue haben, das den jeweiligen Menuepunkt anzeigt und auf Knofdruck in die entsprechende Routine verzweigt. Dafür füge ich mal ein Beispiel ein, das mit 3 Tastern auskommt und sich natürlich beliebig modifizieren lässt:

    Code:
    'Gerüst für Atmega 8 mit Menue - HR - AUGUST 2005
    
    $regfile = "m8def.dat"
    $crystal = 7372800
    $baud = 9600
    
    
    Enable Interrupts                            'Interrupts erlauben
    
    Config Adc = Single , Prescaler = Auto
    
    Config Pinc.0 = Input                        'Für analog_key
    Keyboard Alias Pinc.0                        'Aliasname
    
    Config Pinb.0 = 1                            'Ausgang
    Beep Alias Pinb.0
    
    Declare Function Analog_key() As Byte
    
    Dim Taste As Byte
    Dim Menue_current As Byte
    '-------------------------------------------------------------------------------
    
    Sound Beep , 400 , 450                       'Bin wach -)
    Cursor Off
    Lcd "    Menue Test"
    Wait 3
    '-------------------------------------------------------------------------------
    
    Cls
    Menue:
    Menue_current = 1
    
    Menue_1:
    
    Taste = Analog_key()
    Waitms 100
    
    If Taste = 32 Then
    Menue_current = Menue_current + 1
    End If
    
    If Taste = 33 Then
    Menue_current = Menue_current - 1
    End If
    
    If Menue_current > 6 Then Menue_current = 1
    If Menue_current < 1 Then Menue_current = 6
    
    If Taste = 10 Then Goto Execute
    '-------------------------------------------------------------------------------
    Select Case Menue_current                    'aktuelle Auswahl anzeigen
    
       Case 1
        Locate 1 , 1
        Lcd " Fall 1         "
       Case 2
        Locate 1 , 1
        Lcd " Fall 2         "
       Case 3
        Locate 1 , 1
        Lcd " Fall 3         "
       Case 4
        Locate 1 , 1
        Lcd " Fall 4         "
       Case 5
        Locate 1 , 1
        Lcd " Fall 5         "
       Case 6
        Locate 1 , 1
        Lcd " Fall 6         "
    
    End Select
        Taste = 255
    Goto Menue_1
    '-------------------------------------------------------------------------------
    
    Execute:                                     'aktuellen Menuepunkt ausführen
    
    
    Select Case Menue_current
       Case 1
              Cls
              'Call 1
              Cls
       Case 2
              Cls
              'Call 2
              Cls
       Case 3
              Cls
              'Call 3
              Cls
       Case 4
              Cls
              'Call 4
              Cls
       Case 5
              Cls
              'Call 5
              Cls
       Case 6
              Cls
              'Call 6
              Cls
    End Select
    
    Goto Menue_1
    '-------------------------------------------------------------------------------
    
    End                                          'Hauptprogrammschleife Ende
    
    '------------------------------------------------------------------------------
    'Diese Unterfunktion fragt die Tastatur am analogen Port ab.
    'Die Werte müssten ggf. natürlich angepasst werden und entsprechen hier
    'meinem Schaltungsvorschlag.
    
    Function Analog_key() As Byte
       Local Ws As Word
       Analog_key = 255
       Start Adc
       Ws = Getadc(0)
       If Ws < 900 Then
          Select Case Ws
             Case 0 To 100
                Analog_key = 32                  'Entspricht UP
             Case 400 To 600
                Analog_key = 33                  'Entspricht DOWN
             Case 650 To 750
                Analog_key = 10                  'Entspricht ENTER
          End Select
          Sound Beep , 400 , 450                 'Quittungspiepser
       End If
    Waitms 100
    End Function
    '-------------------------------------------------------------------------------
    '
    '
    '.... Hier folgen die durch das Menue aufgerufenen Subroutinen bzw. Funktionen
    Grüße
    Henrik

  7. #7
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    22.12.2004
    Alter
    64
    Beiträge
    277
    Zitat Zitat von molleonair
    naja ich hab nen tiny und ne menge code da ist jeder platz zu nutzen
    Ach so, sag das doch gleich. Die Tinys sind aber (bis auf den Tiny45 mit Einschränkungen) so gut wie überhaupt nicht für solche Scherze geeignet.

    Henrik

  8. #8
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    01.12.2005
    Ort
    @FFM
    Alter
    41
    Beiträge
    402
    hallo henrik solch einen code hab ich schon getestet und für viel zu uneffizient befunden

    ich hab ein 4 zeilen display und wenn ich das menue durchblätter
    zB die menuepunkte

    Hauptmenue
    Setup
    --Tests--
    Akkuspannung

    Hauptmenue
    Tests
    --Akkuspannung--
    Senoren

    Hauptmenue
    Akkuspannung
    --Sensoren--
    EIN/AUS
    ...

    das ist 4 zeilen menue nach unten geblättert
    wenn ich in einen eintrag nach rechts blätter komm ich ins entsprechende untermenue (wie bei den alten nokia handys)

    dann muß ich für jeden eintrag den vorhergehenden und folgenden und das obermenue dazu anzeigen das heißt ich geb für jeden menuepunkt
    4 zeilen strings im code ein die ich ausgebe obwohl ich nur jeden string einmal festlegen muß

    ich wollte halt ein weg finden mit wenig code ein komplexes menue zu erzeugen

    dazu erschien mir die srungmarkensache erfolgversprechend

    ich werde jetzt versuchen mit readeeprom zu lesen und in den sprungmarken die entsprechende eepromadresse zu hinterlassen

  9. #9
    Super-Moderator Robotik Visionär Avatar von PicNick
    Registriert seit
    23.11.2004
    Ort
    Wien
    Beiträge
    6.836
    Du kannst etwas sparen, indem du die Strings in teile teilst und sozusagen durch token ansprichst. Bascom hat die nette Eigenschaft, identische String nur einmal anzulegen, also wenn du das wort "menue" extra hast, kommt es nur einmal im Flash vor.
    LCD "Haupt"; "menue"
    LCD "Unter"; "menue"
    speichert er "menue" nur einmal

    Was du dir bei Strings im ERAM ersparst, pulverst du in den Code für den Privat-Lookup.
    Ein Kampf ist es aber nunmal
    ein kleines Gulasch wird nicht größer (sagt man bei uns)
    mfg robert
    Wer glaubt zu wissen, muß wissen, er glaubt.

  10. #10
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    01.12.2005
    Ort
    @FFM
    Alter
    41
    Beiträge
    402
    naja da kannst du schon recht haben...

    ich hoffe halt eine menuestruktur zu entwickeln die dann beliebig ausbaubar
    ist ,einfach halt noch n menueeintrag am ende der datazeile anzuhängen und das wars .
    wäre vieleicht für andere auch interesant,da einfach zubearbeiten mit wenig getippe ,am besten ne menue.lib bauen *lol
    aber da bin ich mit meinen anfängerwissen noch weit entfernt
    mal schauen was bei rumkommt aber danke für den tip mit dem stringteilen

Seite 1 von 2 12 LetzteLetzte

Berechtigungen

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