PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Wie schnell ist Bascom ?



dwod
27.08.2006, 12:30
Hallo,

ich kenne mich ein klein wenig mit den Microcontrolern der ersten Generation aus (8051 und 68HCxx). Damals waren Compiler unerschwinglich und der Basic-Interpreter des 8051AH war für viele Anwendungen zu langsam.
Ich habe jetzt vor ein kleines Projekt mit dem AVR zu verwirklichen.
C möchte ich mir nicht mehr antun, Assembler für AVRs ist teilweise auch undurchsichtig.

Es sollen 4 Analoge Eingänge gemessen werden, der Wert jedes Einganges wird in eine Tabelle geschrieben, wobei der älteste Eintrag gelöscht wird.So habe ich vier Tabellen mit 8 oder 16 Einträgen. Dann wird für jede Tabelle der Mittelwert berechnet so dass ich jeweils die mittlere Eingangsspannung habe.
Dann noch einige logische Operationen und einig Ausgänge setzen.

Ich habe mich für Bascom entschieden, da hier das einlesen der Analog-Eingänge mit einem Vierzeiler möglich ist (dieser Teil ist mir in Assembler zu kompliziert).

Frage : Ich habe absolut keine Ahnung wie schnell der Compiler ist. Gibts evtl. eine Faustregel wie -- Assembler ist 500x schneller ?
Die Tabellenauswertung bekäme ich wohl noch in Assembler hin, würde sich der Aufwand lohnen?

2) Wie kann ich die internen Pull-Up Widerstände an den I/Os mit bascom zu/abschalten ?

Es reicht mir eine grobe Abschätzung der Geschwindigkeit.Wenn der Compiler zu langsam ist, kann ich mir das mit dem Mittelwert evtl. sparen, bzw. ist er zu schnell, muss ich die Tabelle erweitern.

Ziel ist max 0,5sec Zykluszeit (das Progamm läuft in einer Endlosschleife).

Gruss

Wolfgang

PicNick
27.08.2006, 12:46
1) 500x ? Aber wo.
Aufwand: bei deinen Anforderungen und Vorraussetzungen zahlt sich das überhaupt nicht aus.
In 0,5 sec macht ein AVR mit 8 MHZ 4 Mio. Instruktionen. Das wird sich ja wohl ausgehen.
2) Ganz normal. Ports auf 1 setzten UND Pins auf Input.

chr-mt
27.08.2006, 20:48
Hi,
mit 0.5 Sekunden kommst du sicher hin.
Und hast noch viel Zeit für andere Aufgaben. ;)

Gruß
Christopher

Hanni
27.08.2006, 23:05
Ich habe absolut keine Ahnung wie schnell der Compiler ist. Gibts evtl. eine Faustregel wie -- Assembler ist 500x schneller ?
Die Tabellenauswertung bekäme ich wohl noch in Assembler hin, würde sich der Aufwand lohnen?

1. Der Bascom Compiler scheint mal von einigen "Macken" abgesehen recht brauchbaren Code zu erzeugen. Das Problem an der Programmgeschwindigkeit liegt übrigens eher vor dem Rechner ....
Der Grund? Naja, solange man sich keine Gedanken darüber macht, was eigentlich mit welchem Befehl auslöst wird oder mal ebend irgendwelche Fließkommaoperationen verwendet werden - am besten noch in der Division, dann ist es kein Wunder, wenn ein Bascom Program um den Faktor 10000 (kA aus der Luft gegriffen) langsamer sein kann als eines mit wohldurchdachtem Code.

2. Wenn dich die Hardware interessiert - nimm den Weg über Assembler, willst du schnelle Ergebnisse - nimm Bascom.

Grüße,
da Hanni.

Vitis
28.08.2006, 02:44
Sicher hat Bascom Schwächen, wenns also auf absolutes Timing ankommt und der µC vom Takt her voll ausgereizt wird kommste um ASM nicht rum,
aber wenn man mal flott n Code braucht ists super.
Wie schon beschrieben sitzt die größte Schwachstelle vor dem Rechner.
Gleitkomma, print usw. das sind bremsen.
x=x/2 anstatt shift x,right,1 z.B. bremst auch, weil halt größerer Code erzeugt wird beim kompilieren.

Ports ein aus geht zunächst übers DDRx (Data Direction Register)
z.B. DDRA=&B11111111
Dann Porta.0 = 1 und schon ist Porta.0 auf high

Alicik
28.08.2006, 12:13
Ich arbeite mit Bacom und ATmega8 mit 11,xxx MHz. Lese alle 100 ms aus einem Sensor Temperatur und Druckwerte. Sie werden in einem EEPROM gespeichert, an einem LCD angezeigt und zum PC übertragen. Die Aufgabe ist einigermassen verteilt auf diese 100-ms-Takt.
Spasseshalber habe ich die Zyklen während der 100-ms-Takt gezählt:
Die Schlefe wird 6000 bis 7500 mal durchlaufen.
So gesehen habe ich eine Zykluszeit von 13 bis 16 Mikrosekunden.

Gruss

Ali

dwod
28.08.2006, 13:23
Hi,
danke für die Hilfen.
Ich hab da immer noch den 8051AH mit seinem Basic-Interpreter im Hinterkopf.Das absolute Maximum an Geschwindigkeit war hier --- Ausgang setzen ; Ausgang löschen ---- 100Hz oder 10ms Zykluszeit.
Wie gesagt, ich hab mich nur für den Bascom entschieden, weil ich Probleme mit den Analogen Eingängen hab und die sind hier einfach zu programmieren.

Danke für den Hinweis mit dem schieben, deshalb ist meine Tabelle ja auch 2^n bit gross.Ich bin davon ausgegangen, das der Compiler bei einer Division durch 2^n selbst schiebt und nicht die ganze Prozedur durchläuft.

Gruss

Wolfgang