Einen Code, den man nich schrumpfen/verkleinern kann gibts nicht
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.
Einen Code, den man nich schrumpfen/verkleinern kann gibts nicht
Vor den Erfolg haben die Götter den Schweiß gesetzt
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
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
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:
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!!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
So, genug gepostet, jetzt dürft ihr antworten ob es einfachere Abfragen gibt \/
MfG Killer
sollen die immer das gleiche ERgenbis haben also bit1-10 immer das gleiche sein dann probier mal eine funktionmit 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)
?
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
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![]()
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.Zitat von Killer
Wer ne Sprache fuer Beginner waehlt muss halt bisschen mehr schreiben...
[glaskugel_auspack]
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.0000000001
das geht weiter bis.
0000001010
dies ist das Synonym für die Ziffer 9.
Oder nimm gleich C++
Also wenn ihr alle so codet ist es klar das der Speicher nicht reicht.du könntest nochmal das ganze runtersetzen indem du es zu nem BOOL [...]
aber du kannst ne funktion schreiben die 10 paramater hat
Effizienz Leute!![]()
so war das gemeint aber am schönsten wäre es mit strukturen....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 }
und das verbraucht viel wenigser speicher als 10 mal das ganze
btw so rufst dus dann auf
und das ist schon effizenter oder und warum BOOLCode:if(check(0,0,0,0,0,0,0,0,0,1)==0) { tu was verdammt }
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
Lesezeichen