PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Unterschied micro-ide / bascom avr



meldano
15.04.2007, 05:31
Hallo,

vorweg: Ich bin absoluter Anfänger.

Ich programmiere meine Programme mit Bascom AVR, jetzt bin ich über den Basic Compiler von Micro-IDE gestolpert.
Komischerweise ist die *.hex Datei, bei gleichem Quelltext, beim Mikro-IDE kleiner als bei bascom avr.

Arbeitet/Rechnet die Software von Micro-IDE effiezienter und ist demnach auch eher zu empfehlen?

Welche Unterschiede gibt es noch?


Gruß
Daniel

Ratber
15.04.2007, 13:16
Ich programmiere meine Programme mit Bascom AVR, jetzt bin ich über den Basic Compiler von Micro-IDE gestolpert.
Komischerweise ist die *.hex Datei, bei gleichem Quelltext, beim Mikro-IDE kleiner als bei bascom avr.

Ohne direkten Vergleich ist da schwer was zu sagen.

Gib mal dein Beispiel an und Zahlen wie groß die einzelnen Compilate waren.




Arbeitet/Rechnet die Software von Micro-IDE effiezienter und ist demnach auch eher zu empfehlen?

Ist möglich.
Kann aber auch sein das Micro wesentlich weniger zu bieten hat und deswegen schlankeren Code liefert.

Kann aber auch sein das dein Bascom-Programm nicht gerade Effizienzt ist.
Wie gesagt,ohne konkrete Daten was du gemacht hast kann man da garnichts sagen.


Wenn die Codegröße für dich wichtig ist und du allgemein einen sehr effizienten Code möchtest dann solltest du gleich mit Assembler anfangen.
Da hast du volle Kontrolle und mit etwas übung den effizientesten Code aber auch die meiste Einarbeitungszeit.

Als Alternativen gibt es auch noch FastAVR.
Der bietet einen ähnlichen Funktionsumfang und etwas schlankeren Code.

meldano
15.04.2007, 15:14
Hi,

hier der Programmtext:

$regfile = "ATtiny2313.dat"

'Tell the compiler which crystal frequency was used
$crystal = 4000000 '4.000000 MHz

'############# LED´s
Config Portd.5 = Output
Config Portd.6 = Output

'#############PWM Ausgänge
Config Pinb.2 = Output
Config Pinb.3 = Output


'#############Eingänge

Config Pind.2 = Input 'Pin D2 als Eingang konfigurieren
Taster1 Alias Pind.2 'Taster1
Portd.2 = 1 'Interner Pull-Up Widerstand EIN


'################### Variablen

Dim Ein As Bit 'Variable "EIN" als Bit deklarieren
Dim A As Integer 'Variable "A" als Integer deklarieren
Dim B As Integer 'Variable "B" als Integer deklarieren

'#############Timer1 für PWM
Config Timer1 = Pwm , Pwm = 8 , Compare A Pwm = Clear Up , Compare B Pwm = Clear Up , Prescale = 1

Enable Timer1 'PIN 15 0CR1a PortB.3 >> PWM Ausgang!!!!!!!


'#############
'### Hauptroutine
'#############
Compare1a = 255 'lampe dunkel
Main1:
Do
If Taster1 = 0 Then
Waitms 2500
If Taster1 = 0 Then
Goto Schalten
End If
End If
If Ein = 1 Then 'Wenn "EIN" true
Goto Main2 'gehe zu "Main2"
End If
Loop

'###########################
'### Nebenroutine Auswahl Dimmstufe ###########################

Main2:
Do
If Taster1 = 1 Then 'wenn Taster wieder false
Select Case A
Case 0 : Goto Stufe0 'zu Stufe 0...2 springen
Case 1 : Goto Stufe1
Case 2 : Goto Stufe2
Case 3 : A = 0 'Variable "A" wieder auf 0
Goto Stufe0
End Select
End If
Loop


'#########
'### Softstart
'#########

Soft:
Do
Compare1a = 255 - B
Incr B
Loop Until B = 155
Goto Main2

'############
'### Einschalten
'############

Schalten:
Toggle Ein ' "EIN" auf true oder false
Compare1a = 255
A = 0
B = 0
Portd.5 = 0
Portd.6 = 0
If Ein = 1 Then ' "EIN" = true >> Soft
Goto Soft
End If
If Ein = 0 Then ' "EIN" = false >> main1
Goto Main1
End If



'###########
'### Stufe 0...2
'###########

Stufe0:
Do
Portd.5 = 1 'LED´s schalten
Portd.6 = 0
Compare1a = 100 'Dimmstufe
If Taster1 = 0 Then 'Wenn Taster betätigt
Waitms 50 'Taster entprellen
If Taster1 = 0 Then
Incr A 'A incrementieren
Goto Main1 'wieder in Hauptroutine
End If
End If
Loop


Stufe1:
Do
Portd.5 = 0
Portd.6 = 1
Compare1a = 50
If Taster1 = 0 Then
Waitms 50
If Taster1 = 0 Then
Incr A
Goto Main1
End If
End If
Loop

Stufe2:
Do
Portd.5 = 1
Portd.6 = 1
Compare1a = 0
If Taster1 = 0 Then
Waitms 50
If Taster1 = 0 Then
Incr A
Goto Main1
End If
End If
Loop


Das Programm ist noch nicht entgültig getestet.
Es soll eine Steuerung für eine Taschenlampe werden.
Einschalten durch 3S drücken des Tasters, Dimmstufenwechsel durch Tasten und Softstart. Zusätzlich soll der Status der Dimmstufe durch zwei LED´s angezeigt werden Portd.5 & Portd.6.

Hexfile erstellt durch Bascom-AVR:1,93kB
Hexfile erstellt durch Micro-IDE:1,54kB

Klar sucht man einen Kompromiss aus knappen Code und einfacher Programmierung. Doch bin ich mit Bascom-AVR schon am Limit des ATtiny 2313.

Wie kriege ich durch Änderung meines Programms den Quelltext noch schlanker?

Gruß
Daniel

Ratber
15.04.2007, 16:08
Wie kriege ich durch Änderung meines Programms den Quelltext noch schlanker?

Eine Testcompilierung gibt einen Fehler mit Timer1 aus.
Bascom hat da so seine Probleme bei einigen Controllern mit der direkten Unterstützung diverser Hardware.
Kann sein das der Timer1 des Tiny2313 mit dazugehöhrt.
Mangels Tiny2313 kann ich das jetzt aber weder bestätigen noch ausschließen.
Im Zweifelsfalle mußt du die Register eben "Händisch" setzen.
Dafür hab ich jetzt keine Zeit also hab ich den Quelltext einfach mal für den Mega8 compiliert.
Da komme ich auf 756 Bytes.
Wie kommst du da auf 1.93k ?



Ansonsten habe ich jetzt nicht genauer hingesehen aber es läst sich meist was am Code drehen.
Eine Operation läst sich ja meist mit mehreren Methoden und Befehlen erledigen aber die Befehle verbrauchen unterschiedlichen Platz im System.
Da kann man ansetzen.

meldano
15.04.2007, 16:38
Hi Ratber,

meine Compilierung gibt keinen Fehler raus. Womit Compilierst du denn?
Wie ich die Register händisch setze weiß ich leider nicht. Bin eben absoluter Anfänger.
Um die Größe des Hexfiles zu bestimmen habe ich einfach unter Windows > Eigenschaften geguckt wie groß der File ist. Ist das falsch?

Gruß
Daniel

Ratber
15.04.2007, 18:12
meine Compilierung gibt keinen Fehler raus. Womit Compilierst du denn?

Bascom 1.11.8.5
Scheint aber nen Bug zu sein denn die 1.11.8.1 und 8.3 geben den Fehler nicht aus.
Muß ich mal die Def durchsuchen ob da einer nen Fehler eingebastelt hat.



Wie ich die Register händisch setze weiß ich leider nicht. Bin eben absoluter Anfänger.

Ein Grun mehr das Datenblatt des Controllers zu studieren.
Bascom ist nett aber ohne hintergrundwissen über die einzelnen Hardwarefunktionen fällt man viel zu oft auf die Nase.
Die Arbeit wird einem da nicht abgenommen.


Um die Größe des Hexfiles zu bestimmen habe ich einfach unter Windows > Eigenschaften geguckt wie groß der File ist. Ist das falsch?

Ja,das Hexfile beinhaltet ja nicht nur die Nutzdaten sondern auch noch die Projektbeschriebung usw.

Wenn du Compiliert hast dann schau unter "Show Result" (ctrl-W) nach.
Da bekomst du alle nötigen Informationen.

meldano
15.04.2007, 19:13
Hi,


Ja,das Hexfile beinhaltet ja nicht nur die Nutzdaten sondern auch noch die Projektbeschriebung usw.

Wenn du Compiliert hast dann schau unter "Show Result" (ctrl-W) nach.
Da bekomst du alle nötigen Informationen.


Das wusste ich garnicht. Hab vorhin das Buch von Rowalt.de bestellt.
Vielleicht komm ich dann nicht mehr mit so dummen Fragen :-#

Also ich betätige Ctr + w und dann gucke ich unter:ROMImage z.B. 2BE (hex).
Dann den windows Rechner auf, auf hex gecklickt, 2BE eingegeben und dann auf Dezimal?
Also 702B die in den Flash gladen werden???

Werden diese 702B dann auch nur in den Flash geladen wenn ich den Hex-File mit einem anderen Programm (z.B. Pony) in den Controller lade?


Gruß
Daniel

Ratber
15.04.2007, 19:45
Das wusste ich garnicht. Hab vorhin das Buch von Rowalt.de bestellt.
Vielleicht komm ich dann nicht mehr mit so dummen Fragen Silenced

Naja,bei den vorhandenen Büchern zu Bascom (Ich schnüffel manchmal in den Verlagen meiner Stadt) habe ich noch nichts wirklich brauchbares gefunden.
Eigenständiges Arbeiten und Suchen plus Fragen in nem Forum halte ich für ergibiger.



Also ich betätige Ctr + w und dann gucke ich unter:ROMImage z.B. 2BE (hex)......usw.


Ja,das Fenster gibt eine Menge Informationen aus.
Unter anderem die Tatsächliche Codegröße in Hex und Dec usw.

Dnerb
15.04.2007, 20:21
Das wusste ich garnicht. Hab vorhin das Buch von Rowalt.de bestellt.
Vielleicht komm ich dann nicht mehr mit so dummen Fragen Silenced

Naja,bei den vorhandenen Büchern zu Bascom (Ich schnüffel manchmal in den Verlagen meiner Stadt) habe ich noch nichts wirklich brauchbares gefunden.
Eigenständiges Arbeiten und Suchen plus Fragen in nem Forum halte ich für ergibiger.

Da muß ich wiedersprechen. Das Buch von Rowalt kann ich für Anfänger empfehlen.
Die anderen kann man sich allerdings sparen.
Einzig die Deutsche Hilfeübersetzung (Bascom AVR Sprachbefehle) habe ich zusätzlich hier liegen. Ich schaue lieber in Papier als auf den Monitor.

Ratber
15.04.2007, 21:47
Da muß ich wiedersprechen. Das Buch von Rowalt kann ich für Anfänger empfehlen.

Ich bin es gewohnt mir die nötigen Infos selber zu suchen und der Rest ist Nachdenken,Versuch/Irrtum usw.

Vermutlich haben mir die Bücher in die ich reingesehen habe nichts mehr bringen können.

meldano
16.04.2007, 15:36
Hi,

ich wollte nochmal meine Frage in den Focus bringen:


Also ich betätige Ctr + w und dann gucke ich unter:ROMImage z.B. 2BE (hex).
Dann den windows Rechner auf, auf hex gecklickt, 2BE eingegeben und dann auf Dezimal?
Also 702B die in den Flash gladen werden???

Werden diese 702B dann auch nur in den Flash geladen wenn ich den Hex-File mit einem anderen Programm (z.B. Pony) in den Controller lade?

Ich bitte um Antwort.

Danke
Daniel[/right]

Ratber
16.04.2007, 17:48
Hab ich doch schon beantwortet.

Du kannst aber auch selber mit etwas logik auf die Antwort kommen.

Wie muß denn das Image sein um in diesem Controller zu funktionieren ?

Eben !
Genaus mit den Befehlen die der jeweilige Controller versteht.
also spielt es keine Rolle womit du das Programm in den Controller lädst denn am Code ändert sich nichts.

Der Programmer muß nur das Format lesen können sonst nichts.

Da die allermeisten IDE's externe Programmer zulassen (zb. das bekannte STK500 nebst seiner Software) hat man sich auf einen Quasistandard geeinigt.