-         

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

Thema: Wie kann man dieses Program kürzen??

  1. #1
    Erfahrener Benutzer Begeisterter Techniker Avatar von RobbyMartin
    Registriert seit
    31.12.2009
    Ort
    Leverkusen
    Alter
    24
    Beiträge
    206

    Wie kann man dieses Program kürzen??

    Anzeige

    Ich benutze die DEMO Version von Bascom, da ich 80 Euronen sehr happig finden nun habe ich für mein aktuelles Projekt ein Problem, da Bascom Sagt,dass der Text für die DEMO versin zu lang ist.

    Nun frage ich mich/euch ob man diesen Text sinnvol kürzen kann??

    Code:
    $regfile "m8def.dat"
    $crystal = 1000000
    $baud = 1200
    
    Dim Ad As Word
    
    Config Portb = Output
    Config Adc = Single , Prescaler = Auto , Reference = Avcc
    
    Start Adc
    
    Do
      Ad = Getadc(0)
      If Ad >= 1022 Then
        Print "0 s"
      Elseif Ad < 1022 And Ad >= 971 Then
        Print "10 s"
      Elseif Ad < 971 And Ad >= 967 Then
        Print "11 s"
      Elseif Ad < 967 And Ad >= 960 Then
        Print "12 s"
      Elseif Ad < 960 And Ad >= 955 Then
        Print "13 s"
      Elseif Ad < 955 And Ad >= 950 Then
        Print "14 s"
      Elseif Ad < 950 And Ad >= 945 Then
        Print "15 s"
      Elseif Ad < 945 And Ad >= 939 Then
        Print "16 s"
      Elseif Ad < 939 And Ad >= 935 Then
        Print "17 s"
      Elseif Ad < 935 And Ad >= 929 Then
        Print "18 s"
      Elseif Ad < 929 And Ad >= 926 Then
        Print "19 s"
      Elseif Ad < 926 And Ad >= 921 Then
        Print "21 s"
      Elseif Ad < 920 And Ad >= 914 Then
        Print "21 s"
      Elseif Ad < 914 And Ad >= 909 Then
        Print "22 s"
      Elseif Ad < 909 And Ad >= 904 Then
        Print "23 s"
      Elseif Ad < 904 And Ad >= 899 Then
        Print "24 s"
      Elseif Ad < 899 And Ad >= 895 Then
        Print "25 s"
      Elseif Ad < 895 And Ad >= 890 Then
        Print "26 s"
      Elseif Ad < 890 And Ad >= 885 Then
        Print "27 s"
      Elseif Ad < 885 And Ad >= 881 Then
        Print "28 s"
      Elseif Ad < 881 And Ad >= 877 Then
        Print "29 s"
      Elseif Ad < 877 And Ad >= 873 Then
        Print "30 s"
      Elseif Ad < 873 And Ad >= 868 Then
        Print "31 s"
      Elseif Ad < 868 And Ad >= 863 Then
        Print "32 s"
      Elseif Ad < 863 And Ad >= 859 Then
        Print "33 s"
      Elseif Ad < 859 And Ad >= 855 Then
        Print "34 s"
      Elseif Ad < 855 And Ad >= 851 Then
        Print "35 s"
      Elseif Ad < 851 And Ad >= 847 Then
        Print "36 s"
      Elseif Ad < 847 And Ad >= 843 Then
        Print "37 s"
      Elseif Ad < 843 And Ad >= 839 Then
        Print "38 s"
      Elseif Ad < 839 And Ad >= 836 Then
        Print "39 s"
      Elseif Ad < 836 And Ad >= 832 Then
        Print "40 s"
      Elseif Ad < 832 And Ad >= 827 Then
        Print "41 s"
      Elseif Ad < 827 And Ad >= 823 Then
        Print "42 s"
      Elseif Ad < 823 And Ad >= 820 Then
        Print "43 s"
      Elseif Ad < 820 And Ad >= 816 Then
        Print "44 s"
      Elseif Ad < 816 And Ad >= 812 Then
        Print "45 s"
      Elseif Ad < 812 And Ad >= 809 Then
        Print "46 s"
      Elseif Ad < 809 And Ad >= 804 Then
        Print "47 s"
      Elseif Ad < 804 And Ad >= 801 Then
        Print "48 s"
      Elseif Ad < 801 And Ad >= 798 Then
        Print "49 s"
      Elseif Ad < 798 And Ad >= 794 Then
        Print "50 s"
      Elseif Ad < 794 And Ad >= 792 Then
        Print "51 s"
      Elseif Ad < 792 And Ad >= 788 Then
        Print "52 s"
      Elseif Ad < 788 And Ad >= 785 Then
        Print "53 s"
      Elseif Ad < 785 And Ad >= 782 Then
        Print "54 s"
      Elseif Ad < 782 And Ad >= 780 Then
        Print "55 s"
      Elseif Ad < 780 And Ad >= 777 Then
        Print "56 s"
      Elseif Ad < 777 And Ad >= 774 Then
        Print "57 s"
      Elseif Ad < 774 And Ad >= 770 Then
        Print "58 s"
      Elseif Ad < 770 And Ad >= 768 Then
        Print "59 s"
      Elseif Ad < 768 And Ad >= 765 Then
        Print "60 s"
      Elseif Ad < 765 And Ad >= 762 Then
        Print "61 s" 
      Elseif Ad < 762 And Ad >= 759 Then
        Print "62 s"
      Elseif Ad < 759 And Ad >= 756 Then
        Print "63 s"
      Elseif Ad < 756 And Ad >= 754 Then
        Print "64 s"
      Elseif Ad < 754 And Ad >= 752 Then
        Print "65 s"
      Elseif Ad < 752 And Ad >= 749 Then
        Print "66 s"
      Elseif Ad < 749 And Ad >= 745 Then
        Print "67 s"
      Elseif Ad < 745 And Ad >= 743 Then
        Print "68 s"
      Elseif Ad < 743 And Ad >= 740 Then
        Print "69 s"
      Elseif Ad < 740 And Ad >= 738 Then
        Print "70 s"
      Elseif Ad < 738 And Ad >= 736 Then
        Print "71 s"
      Elseif Ad < 736 And Ad >= 734 Then
        Print "72 s"
      Elseif Ad < 734 And Ad >= 732 Then
        Print "73 s"
      Elseif Ad < 732 And Ad >= 729 Then
        Print "74 s"
      Elseif Ad < 729 And Ad >= 727 Then
        Print "75 s"
      Elseif Ad < 727 And Ad >= 725 Then
        Print "76 s"
      Elseif Ad < 725 And Ad >= 722 Then
        Print "77 s"
      Elseif Ad < 722 And Ad >= 720 Then
        Print "78 s"
      Elseif Ad < 720 And Ad >= 719 Then
        Print "79 s"
      Elseif Ad < 719 And Ad >= 717 Then
        Print "80 s"
      Elseif Ad < 717 And Ad >= 714 Then
        Print "81 s"
      Elseif Ad < 714 And Ad >= 711 Then
        Print "82 s"
      Elseif Ad < 711 And Ad >= 710 Then
        Print "83 s"
      Elseif Ad < 710 And Ad >= 708 Then
        Print "84 s"
      Elseif Ad < 708 And Ad >= 706 Then
        Print "85 s"
      Elseif Ad < 706 And Ad >= 704 Then
        Print "86 s"
      Elseif Ad < 704 And Ad >= 701 Then
        Print "87 s"
      Elseif Ad < 701 And Ad >= 699 Then
        Print "88 s"
      Elseif Ad < 699 And Ad >= 698 Then
        Print "89 s"
      Elseif Ad < 698 And Ad >= 697 Then
        Print "90 s"
      Elseif Ad < 697 And Ad >= 695 Then
        Print "91 s"
      Elseif Ad < 695 And Ad >= 693 Then
        Print "92 s"
      Elseif Ad < 693 And Ad >= 690 Then
        Print "93 s"
      Elseif Ad < 690 And Ad >= 688 Then
        Print "94 s"
      Elseif Ad < 688 And Ad >= 686 Then
        Print "95 s"
      Elseif Ad < 686 And Ad >= 685 Then
        Print "96 s"
      Elseif Ad < 685 And Ad >= 683 Then
        Print "97 s"
      Elseif Ad < 683 And Ad >= 682 Then
        Print "98 s"
      Elseif Ad < 682 And Ad >= 679 Then
        Print "99 s"
      Elseif Ad < 679
        Print "100 s"
      End If
    Loop$regfile "m8def.dat"
    $crystal = 1000000
    $baud = 1200
    
    Dim Ad As Word
    
    Config Portb = Output
    Config Adc = Single , Prescaler = Auto , Reference = Avcc
    
    Start Adc
    
    Do
      Ad = Getadc(0)
      If Ad >= 1022 Then
        Print "0 s"
      Elseif Ad < 1022 And Ad >= 971 Then
        Print "10 s"
      Elseif Ad < 971 And Ad >= 967 Then
        Print "11 s"
      Elseif Ad < 967 And Ad >= 960 Then
        Print "12 s"
      Elseif Ad < 960 And Ad >= 955 Then
        Print "13 s"
      Elseif Ad < 955 And Ad >= 950 Then
        Print "14 s"
      Elseif Ad < 950 And Ad >= 945 Then
        Print "15 s"
      Elseif Ad < 945 And Ad >= 939 Then
        Print "16 s"
      Elseif Ad < 939 And Ad >= 935 Then
        Print "17 s"
      Elseif Ad < 935 And Ad >= 929 Then
        Print "18 s"
      Elseif Ad < 929 And Ad >= 926 Then
        Print "19 s"
      Elseif Ad < 926 And Ad >= 921 Then
        Print "21 s"
      Elseif Ad < 920 And Ad >= 914 Then
        Print "21 s"
      Elseif Ad < 914 And Ad >= 909 Then
        Print "22 s"
      Elseif Ad < 909 And Ad >= 904 Then
        Print "23 s"
      Elseif Ad < 904 And Ad >= 899 Then
        Print "24 s"
      Elseif Ad < 899 And Ad >= 895 Then
        Print "25 s"
      Elseif Ad < 895 And Ad >= 890 Then
        Print "26 s"
      Elseif Ad < 890 And Ad >= 885 Then
        Print "27 s"
      Elseif Ad < 885 And Ad >= 881 Then
        Print "28 s"
      Elseif Ad < 881 And Ad >= 877 Then
        Print "29 s"
      Elseif Ad < 877 And Ad >= 873 Then
        Print "30 s"
      Elseif Ad < 873 And Ad >= 868 Then
        Print "31 s"
      Elseif Ad < 868 And Ad >= 863 Then
        Print "32 s"
      Elseif Ad < 863 And Ad >= 859 Then
        Print "33 s"
      Elseif Ad < 859 And Ad >= 855 Then
        Print "34 s"
      Elseif Ad < 855 And Ad >= 851 Then
        Print "35 s"
      Elseif Ad < 851 And Ad >= 847 Then
        Print "36 s"
      Elseif Ad < 847 And Ad >= 843 Then
        Print "37 s"
      Elseif Ad < 843 And Ad >= 839 Then
        Print "38 s"
      Elseif Ad < 839 And Ad >= 836 Then
        Print "39 s"
      Elseif Ad < 836 And Ad >= 832 Then
        Print "40 s"
      Elseif Ad < 832 And Ad >= 827 Then
        Print "41 s"
      Elseif Ad < 827 And Ad >= 823 Then
        Print "42 s"
      Elseif Ad < 823 And Ad >= 820 Then
        Print "43 s"
      Elseif Ad < 820 And Ad >= 816 Then
        Print "44 s"
      Elseif Ad < 816 And Ad >= 812 Then
        Print "45 s"
      Elseif Ad < 812 And Ad >= 809 Then
        Print "46 s"
      Elseif Ad < 809 And Ad >= 804 Then
        Print "47 s"
      Elseif Ad < 804 And Ad >= 801 Then
        Print "48 s"
      Elseif Ad < 801 And Ad >= 798 Then
        Print "49 s"
      Elseif Ad < 798 And Ad >= 794 Then
        Print "50 s"
      Elseif Ad < 794 And Ad >= 792 Then
        Print "51 s"
      Elseif Ad < 792 And Ad >= 788 Then
        Print "52 s"
      Elseif Ad < 788 And Ad >= 785 Then
        Print "53 s"
      Elseif Ad < 785 And Ad >= 782 Then
        Print "54 s"
      Elseif Ad < 782 And Ad >= 780 Then
        Print "55 s"
      Elseif Ad < 780 And Ad >= 777 Then
        Print "56 s"
      Elseif Ad < 777 And Ad >= 774 Then
        Print "57 s"
      Elseif Ad < 774 And Ad >= 770 Then
        Print "58 s"
      Elseif Ad < 770 And Ad >= 768 Then
        Print "59 s"
      Elseif Ad < 768 And Ad >= 765 Then
        Print "60 s"
      Elseif Ad < 765 And Ad >= 762 Then
        Print "61 s" 
      Elseif Ad < 762 And Ad >= 759 Then
        Print "62 s"
      Elseif Ad < 759 And Ad >= 756 Then
        Print "63 s"
      Elseif Ad < 756 And Ad >= 754 Then
        Print "64 s"
      Elseif Ad < 754 And Ad >= 752 Then
        Print "65 s"
      Elseif Ad < 752 And Ad >= 749 Then
        Print "66 s"
      Elseif Ad < 749 And Ad >= 745 Then
        Print "67 s"
      Elseif Ad < 745 And Ad >= 743 Then
        Print "68 s"
      Elseif Ad < 743 And Ad >= 740 Then
        Print "69 s"
      Elseif Ad < 740 And Ad >= 738 Then
        Print "70 s"
      Elseif Ad < 738 And Ad >= 736 Then
        Print "71 s"
      Elseif Ad < 736 And Ad >= 734 Then
        Print "72 s"
      Elseif Ad < 734 And Ad >= 732 Then
        Print "73 s"
      Elseif Ad < 732 And Ad >= 729 Then
        Print "74 s"
      Elseif Ad < 729 And Ad >= 727 Then
        Print "75 s"
      Elseif Ad < 727 And Ad >= 725 Then
        Print "76 s"
      Elseif Ad < 725 And Ad >= 722 Then
        Print "77 s"
      Elseif Ad < 722 And Ad >= 720 Then
        Print "78 s"
      Elseif Ad < 720 And Ad >= 719 Then
        Print "79 s"
      Elseif Ad < 719 And Ad >= 717 Then
        Print "80 s"
      Elseif Ad < 717 And Ad >= 714 Then
        Print "81 s"
      Elseif Ad < 714 And Ad >= 711 Then
        Print "82 s"
      Elseif Ad < 711 And Ad >= 710 Then
        Print "83 s"
      Elseif Ad < 710 And Ad >= 708 Then
        Print "84 s"
      Elseif Ad < 708 And Ad >= 706 Then
        Print "85 s"
      Elseif Ad < 706 And Ad >= 704 Then
        Print "86 s"
      Elseif Ad < 704 And Ad >= 701 Then
        Print "87 s"
      Elseif Ad < 701 And Ad >= 699 Then
        Print "88 s"
      Elseif Ad < 699 And Ad >= 698 Then
        Print "89 s"
      Elseif Ad < 698 And Ad >= 697 Then
        Print "90 s"
      Elseif Ad < 697 And Ad >= 695 Then
        Print "91 s"
      Elseif Ad < 695 And Ad >= 693 Then
        Print "92 s"
      Elseif Ad < 693 And Ad >= 690 Then
        Print "93 s"
      Elseif Ad < 690 And Ad >= 688 Then
        Print "94 s"
      Elseif Ad < 688 And Ad >= 686 Then
        Print "95 s"
      Elseif Ad < 686 And Ad >= 685 Then
        Print "96 s"
      Elseif Ad < 685 And Ad >= 683 Then
        Print "97 s"
      Elseif Ad < 683 And Ad >= 682 Then
        Print "98 s"
      Elseif Ad < 682 And Ad >= 679 Then
        Print "99 s"
      Elseif Ad < 679
        Print "100 s"
      End If
    Loop
    Ich hoffe ihr könnt mir helfen sonst komme ich wohl nicht herum mir das Program zu kaufen helfen würde mir es auch nicht wenn es mir einer als Hex Version abspeichert, da ich das Program noch verändern möchte bzw. anpassen möchte.

    Lg
    martin

  2. #2
    Erfahrener Benutzer Robotik Einstein Avatar von Vitis
    Registriert seit
    06.01.2005
    Ort
    Südpfalz
    Alter
    43
    Beiträge
    2.240
    aaaalos ... naja, die 80 Euronen sind ansich sehr gut angelegt, da gibts deutlich (!) teurere Compilers, scheint aber heutzutage das Problem zu sein, alles "Freeware" wenn möglich ...

    Nun zum Problem.
    Was richtig Flash frisst ist die Geschichte mit den Strings, die im Klartext im Flash abgelegt werden.
    Um den Speicherbedarf zu reduzieren musst Du nur Deine Zuordnung von "Ad" zum jeweiligen wert in eine Funktion verpacken, die den Zahlenwert berechnet.
    Dann per Fusing den Wert ausgeben und das " s" anhängen und gut ist.
    Vor den Erfolg haben die Götter den Schweiß gesetzt

  3. #3
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    16.02.2006
    Beiträge
    1.112
    Hallo Martin,
    ich halte es für eine gute Investition, dass du dir die Lizenz kaufst, wenn du bei Bascom bleiben möchtest.
    Nun zu deinem Problem. Müssen die Abstände der Bereiche exakt so sein, wie du sie in den ganzen Abfragen angegeben hast, oder bist du da noch flexibel? Die Intervalle ändern sich, werden mal größer, mal kleiner.
    Wenn du die Intervalle durch eine Funktion beschreiben könntest, dann wäre das ganze über ein paar Befehle zu lösen.

  4. #4
    Erfahrener Benutzer Begeisterter Techniker Avatar von RobbyMartin
    Registriert seit
    31.12.2009
    Ort
    Leverkusen
    Alter
    24
    Beiträge
    206
    Das mit der Funktion habe ich ir auch schon so überlegt doch die werte sind festgelegt und ich kann sie nicht ändern.

    @ Vitis

    kannst du mir für einen Wert ein Beispiel schreiben bin nicht so der beste im Programieren ich bastel lieber an der Hardware.
    lg
    martin

  5. #5
    Erfahrener Benutzer Begeisterter Techniker Avatar von RobbyMartin
    Registriert seit
    31.12.2009
    Ort
    Leverkusen
    Alter
    24
    Beiträge
    206
    Mir ist grade die idee gekommen eine hex datei würde mir auch fürs ertse reichen wenn jeand so lieb sein würde und mir die erstellen würde.

    aber die idee von Vitis will ich auch ausprobieren.

  6. #6
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    16.02.2006
    Beiträge
    1.112
    Noch ein Vorschlag:
    Lege doch die 300 Werte in einer Tabelle im Flash ab. Dann kannst du dir ganz einfach mit lookup den zum AD-Wert zugehörigen Zeit-Wert holen.
    Also etwa so:
    Wenn AD-Wert < 679 dann 100
    Wenn AD-Wert > 1021 dann 0
    Wenn Ad-Wert > 970 dann 10
    Index = AD_Wert - 679 'Vom AD-Wert ziehst du zunächst mal 680 ab, weil die Werte dadrunter immer 100 ergeben.
    'Dann bleiben Werte von 0 bis 291 über. Mit
    Ergebnis = Lookup(Index, Zeit_daten)
    holst du dir den Zeit_wert. Mit
    Print " ";Ergebnis;"s" 'gibst du den Wert aus.
    Fertig.

    Die Tabelle sieht dann so aus:
    Zeit_daten:
    Data 99, 99, 99 'Daten für 679, 680, 681
    Data 98 'Daten für 682
    ...
    Data 11, 11, 11, 11 'Daten für 967, 968, 969, 970

    Die knapp 300 Tabellenwerte zählen dann zwar auch zum Flash, es wird aber trotzdem reichen.
    Im schlimmsten Fall kannst du sie auch noch ins EEPROM legen.

  7. #7
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    18.05.2007
    Ort
    Berlin
    Alter
    46
    Beiträge
    765
    Das ist nicht im Sinne der Lizenz...

    Dann ist der Code nicht fehlerfrei.
    Das Programm "rotzt" den Empfänger mit Daten zu. Es müsste ein Vergleich rein, ob die Daten sich zu den letzten geändert haben.
    Dann könntest Du 1024-ad rechnen.
    Dann noch den Multiplikator rein und das Ergebnis mit einem "s" dahinter abschicken. Könnte unter 2kb Code kommen...
    Wenn das Herz involviert ist, steht die Logik außen vor! \/

  8. #8
    Erfahrener Benutzer Begeisterter Techniker Avatar von RobbyMartin
    Registriert seit
    31.12.2009
    Ort
    Leverkusen
    Alter
    24
    Beiträge
    206
    @ Vitis könntest du mir ein Beispiel füe ein oder zwei Werte schreiben

    Lg
    martin

  9. #9
    Super-Moderator Robotik Visionär Avatar von PicNick
    Registriert seit
    23.11.2004
    Ort
    Wien
    Beiträge
    6.836
    DU kannst einiges sparen, wenn du die Vergleiche umdrehst (du kannst dann jeweils ein "AND" schmeissen):
    Code:
    ----
      elseif Ad < 679
        Print "100 s"
      Elseif Ad < 682 Then
        Print "99 s"
      Elseif Ad < 683 Then
        Print "98 s"
      Elseif Ad < 685  Then
        Print "97 s"
      Elseif Ad < 686 Then
        Print "96 s"
      Elseif Ad < 688 Then
        Print "95 s"
      Elseif Ad < 690  Then
        Print "94 s"
      Elseif Ad < 693  Then
        Print "93 s"
    
    -----etc-------
    
      Elseif Ad < 1022  Then
        Print "10 s"
      Elseif 
        Print "0 s"
      End If
    geht sicher trickreicher, aber es gibt auch das schon eine nette ersparnis
    mfg robert
    Wer glaubt zu wissen, muß wissen, er glaubt.

  10. #10
    Erfahrener Benutzer Lebende Robotik Legende Avatar von PICture
    Registriert seit
    10.10.2005
    Ort
    Freyung bei Passau in Bayern
    Alter
    66
    Beiträge
    10.970
    Hallo!

    @ RobbyMartin

    Wenn die beiden "Ad = Getadc(0)" identisch sind, würde ich sie zwei mal als Unterprogramm aufrufen.

    MfG

Seite 1 von 2 12 LetzteLetzte

Berechtigungen

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