-         

Seite 1 von 3 123 LetzteLetzte
Ergebnis 1 bis 10 von 28

Thema: Bascom im vergleich zu C ?

  1. #1
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    29.10.2004
    Ort
    GRAZ
    Alter
    51
    Beiträge
    576

    Bascom im vergleich zu C ?

    Anzeige

    Hallo Leute

    Habe jetzt erstmals beim MegaXX die Grenze von 16 kByte an Programmcode überschritten --> Darum musste ich dann einen Mega32 , statt 16er nehmen.

    Jetzt würde mich interessieren, wie Speicherintensiv ist eigentlich C für den AVR, gegenüber dem Bascom?!

    Vielleicht kann ja jemand C UND Bascom und hat da Erfahrung im Speicherhaushalt

    l.G. Roberto

  2. #2
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    04.01.2005
    Ort
    Rendsburg
    Alter
    32
    Beiträge
    306
    soweit ich weiß ist C nicht so speicher aufwendig!

    Dafür soll Basic leichter zu erlernen sein!

    Kann nur C aber das mit Bascom habe ich schonmal gelesen versuche denn link nochmal zu finden!
    Wenn etwas klemmt, wende Gewalt an.

    Wenn es kaputt geht,
    hätte es sowieso erneuert werden müssen.

  3. #3
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    12.02.2006
    Beiträge
    164
    kann c und Bascom ein bissel, muss dieses semester assembler machen (komme gerade aus der vorlesung) .... also speicher sparen kannst mit assembler am besten.

    find c am mikrocontroller immer so aufwendig. da muss man immer auf soviel zeugs achten. nervt mich. aber geschmackssache.

  4. #4
    Super-Moderator Robotik Visionär Avatar von PicNick
    Registriert seit
    23.11.2004
    Ort
    Wien
    Beiträge
    6.836
    Durch den Optimizer und die Eigenschaft, soweit wie möglich auf den sram zu verzichten und in den Registern zu bleiben. spart der GCC schon einigen Platz. Aber Wunder gibt's auch nicht, ein kleines Gulasch bleibt ein kleines Gulasch, du kannst höchstens mehr Semmeln einbröckeln.
    (ich übersetz' das jetzt nicht)
    mfg robert
    Wer glaubt zu wissen, muß wissen, er glaubt.

  5. #5
    Erfahrener Benutzer Robotik Einstein Avatar von SprinterSB
    Registriert seit
    09.06.2005
    Ort
    An der Saar
    Beiträge
    2.801
    Neben den Optimierungen die ein Compiler macht bzw machen kann ist auch der Code entscheidend, den man schreibt.

    Wenn man einem optimierenden Compiler durch ungünstige Programmierung keine Chance zum Optimieren lässt, kann der auch nix tun...

    16kB sind ne Menge Holz, aber es kommt immer darauf an, was du darin codieren willst.

    Einen Vergleich der erzeugten Codes fänd ich auch mal interessant, ein entsprechender Wiki-Artikel ist angeregt, aber bisher leider noch nicht entstanden...

    Ich progge in C und in meinen ATmega8 passt endlos viel C-Code rein. Aber wie gasagt, wenn man schlecht proggt, hilft auch C nicht...

    Generell kann man nur sagen, daß der Quellcode um so hässlicher wird, je besser der erzeugte Code sein soll
    Disclaimer: none. Sue me.

  6. #6
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    29.10.2004
    Ort
    GRAZ
    Alter
    51
    Beiträge
    576
    16kB sind ne Menge Holz,
    Ja, dachte auch nicht das es so gross wird..
    Zuerst Mega8 dann 16er und dann der 32er
    Jetzt bin ich bei ca. 17kB

    Steuerung von 4 Geräten unabhängig, mit Menue Struktur zum ändern aller Parameter u.s.w. u.s.w.
    -

    Also würdet Ihr sagen, dass C schon wenniger Platz braucht als Bascom ?!

    Bezogen jetzt auf eine Standardprogrammierung...
    Wie viele % übern Daumen wenniger ?


    Derzeit habe ich ja noch ein bisschen Luft
    Aber ich kann mir jetzt gut vorstellen, wenn man einen umfangreichen Roboter programmieren will, dass es da schon mit dem Speicher eng werden könnte.

  7. #7
    Erfahrener Benutzer Robotik Einstein Avatar von SprinterSB
    Registriert seit
    09.06.2005
    Ort
    An der Saar
    Beiträge
    2.801
    Nur mal als Beispiel eines meiner momentanen Projekte: eine Nixie-Uhr (ATmega8 mit avr-gcc):
    • DCF77-Decoder mit Check von Parity Taktzeiten
    • RC5-Decoder
    • Menüstruktur zur Konfiguration. Menüsteuerung sowohl über RC5 als auch über 4 angeschlossene Taster
    • Taster werden abhängig vom Menupunkt und unanhängig voneinander rekonfiguriert
      -- Kurzer Druck
      -- Kurzer o. langer Druck
      -- Auto-Repeate
    • Zwei Hard-PWM-Kanäle
    • Datenausgabe über ein SPI-Bus: 32 Bit parallel mit einer Ausgaberate von 20kHz
    • Am SPI-Bus hängen
      -- Ein Lautsprecher
      -- 2 Kanäle Soft-PWM (LEDs)
      -- 6 BCD-Kanäle (je 4 Bit) Auf diesen Kanälen liegt zudem eine zeitmultiplexte(!) PWM der BCD-Kanäle
      -- weiteres Zeug (digtitale Ausgänge)
    • Ausgabe von Zuständen/Menu-Punkten durch Morse-Codes am Lautprecher
    • Anzeige von Systeminformationen:
      -- RAM-Speicherverbrauch (Stack, etc)
      -- Laufzeiten verschiedener Tasks/Funktionen
      -- Umrechnung und Anzeige eine Spannung (ADC)
      -- Anzeige von Systemregister, Status-Infos etc via UART
      -- Anzeige der empangenen RC5-Codes (falls man mal einen anderen Sender proggen will und die Codes wissen muss)
    • Abspeichern und Recall der Systemkonfiguration (Duty der Soft- und Hard-PWMs, Spannungstrigger, IRQ-Rate, Rampenzeiten für Soft-PWMs, etc) in/aus EEPROM
    • Standart Funktionalitäten
      -- Anzeige von Uhrzeit / Datum /Wochentag
      -- Automatisches Umschalten auf Quarz, wenn kein DCF-Signal verfügbar


    Dabei sind nicht nur die Funktionen zu implementieren, sondern auch harte Echtzeitbedingungen einzuhalten. Die Ausgabe nach SPI-Bus muss strikt alle 50µs erfolgen. Die auszugebenden SPI-Daten müssen 20000 mal pro Sekunde neu berechner werden. Bereits kleinste Anweichungen wären als Flackern erkennbar bzw. würden Fehlfunktionen verursachen.

    Quasi gleichzeitig werden also erledigt:
    • SPI-Ausgabe mit 20kHz (Rampen von zeitmultiplexten(!) Soft-PWM), Lautsprecher
    • Auswertung/Ausführung von: RC5-Empfang, UART-Empfang, DCF-Empfang, Tasterdrucken
    • ADC-Auswertung
    • Sammeln von System- und Laufzeit-Informationen


    Das ganze belegt momentan knapp 4600 Bytes an Flash (0x1200 von 0x2000, also 56%) und verteilt sich auf ca 3000 Zeilen C-Code.
    Disclaimer: none. Sue me.

  8. #8
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    28.03.2004
    Beiträge
    185
    @SprinterSB: 4k wären mit Bascom definitiv nicht zu schaffen

    Ich beobachte den Resourcenhunger von Bascom auch seit einer Weile.
    Die größte Gefahr besteht bei Bascom darin, unbedarft komplexe Biblioteken zu linken (z.B. trigon. Funktionen mit Gleitkomma) und fleißig Variablen an Funktionen (Unterprogramme) weiterzureichen.

    Dafür kann Bascom nix - ist halt nur verlockend.

    Man sollte bei großen Projekten immer im Hinterkopf behalten, dass die Zielgröße 1 Byte Variablen in Assembler ist. D.h. soviel wie möglich Variablen Global als Byte und Word definieren, möglichst keine Variablen bei Funktionsaufrufen übergeben, möglichst wenige Hochsprachenfunktionen verwenden (Stringfunktionen, formatierte Ausgaben auf das LCD!!) und zum Konvertieren OVERLAY benutzen.
    (Array ist gut, Single ist Gift)

    Im Zweifelsfalle zwischendurch Compilieren und den Codezuwachs bei bestimmten Bascom-Funktionen beobachten. Komplexe Funktionen nicht mehrfach in den Code reinschreiben, sondern in einem Unterprogramm 1x anfahren (ohne vorher übermäßig viel mit den Variablen hin und her zu schaufeln).
    Wenn man sich daran hält, ist Bascom recht effizient.

    Nur die ersten 1,5kByte frisst Bascom praktisch pauschal bei einer Grundkonfiguration mit LCD auf...

  9. #9
    Erfahrener Benutzer Robotik Einstein Avatar von SprinterSB
    Registriert seit
    09.06.2005
    Ort
    An der Saar
    Beiträge
    2.801
    Zitat Zitat von -tomas-
    Die größte Gefahr besteht bei Bascom darin, unbedarft komplexe Biblioteken zu linken (z.B. trigon. Funktionen mit Gleitkomma) und fleißig Variablen an Funktionen (Unterprogramme) weiterzureichen.

    Dafür kann Bascom nix - ist halt nur verlockend.
    Stimmt dafür kann Bascom nix.
    Und C ist da auch nicht besser. Was man reinlinkt, linkt man eben rein und es ist da.

    Mit einem einzigen Kommando wie
    printf ("%f", sin(x));
    belegt man schon weit mehr als die 2kB Flash eines ATtiny2313! Und da ist noch kein Startup-Code dabei oder Ausgabe-Routinen oder sonstwas...

    µC proggen ist eben ne andere Liga als für PC zu programmieren, wo man sich gerade mal nebenher 1 MBye an RAM allokieren kann...
    Disclaimer: none. Sue me.

  10. #10
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    29.10.2004
    Ort
    GRAZ
    Alter
    51
    Beiträge
    576
    @Sprinter
    Schöner Umfang

    Musst ja direkt mal schauen, wie viel Zeilen ich da habe
    Sind 2500 Zeilen aber mit Kommentaren..

    Passt nicht ganz zum Thema, aber wie behaltet ihr(Du) da noch den Überblick?!
    Z.B. wenn man mal in einem Jahr wieder was ändern soll ?!

    Soweit ich weiß, sollte man da ja zuerst ein FlowChart machen u.s.w.
    Ich habe aber da einfach mal angefangen.... ohne obiges..

    Aber wenn ich das auch mit dem Flowchart machen würde, müsste man bei jeder Änderung im Code auch den Flowchart ändern..?!

    Wer macht so was ??
    Wie macht ihr das ??

    Ps.:
    Praktisch wäre es noch bei Bascom, wenn man das Fenster Teilen könnte.
    Obiges Fenster z.B. die Variablen und unten der Code..
    So ähnlich wie im Excel.
    Auch Einfärbungen für verschiedene Programmteile währe praktisch..
    Ich glaube ich muss mal dem Mark Alberts schreiben.

Seite 1 von 3 123 LetzteLetzte

Berechtigungen

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