Constante wird nicht neu geschrieben (Bascom)

Blatzi

Neues Mitglied
28. März 2010
1
0
0
Sprachen
Hallo,

dies ist Heute mein Einstand in diesem Forum. Es ist immer wieder toll, dass es für so viele Dinge so tolle Foren gibt.
Ich hab nun vor kurzem beschlossen, mich ein bischen mit den AVR's zu beschäftigen. Ich habe den USB MK2 programmer und arbeite mit Bascom.

Ich bastle gerade an einem Codeschlossprogramm und da habe ich folgendes Programm verfasst:

Code:
$regfile = "m8def.dat"                                      'ATmega8-Deklarationen
$crystal = 1000000                                          'Taktfrequenz: 3,6864 MHz
'

$baud = 1200                                                ' use baud rate

'dimension a variable that receives the value of the pressed key

Dim B As Byte

Dim Code As String * 6


Config Kbd = Portb , Debounce = 2 , Delay = 50 , Rows = 6 , Row5 = Pind.6 , Row6 = Pind.7



Config Portc.5 = Output



Code = ""
Const Oeffnen = "123459"



Do

 B = Getkbd()
 If B <> 24 Then
 Select Case B
Case 0
Code = Code + "7"
Case 1
Code = Code + "4"
Case 2
Code = Code + "1"
Case 3
Code = Code + "0"
Case 4
Code = Code + "8"
Case 5
Code = Code + "5"
Case 6
Code = Code + "2"
Case 7
Code = Code + "."
Case 8
Code = Code + "9"
Case 9
Code = Code + "6"
Case 10
Code = Code + "3"
Case 11
Code = Code + "-"
Case 12
Code = Code + "A"
Case 13
Code = Code + "B"
Case 14
Code = ""
Case 15
Code = Code + "#"
Case 16
Code = Code + "C"
Case 17
Code = Code + "D"
Case 18
Code = Code + "E"
Case 19
Code = Code + "F"
End Select

Do
B = Getkbd()
Loop Until B = 24


'If B = 15 Then
'Gosub Auswerten
'End If
If Len(code) = 6 Then
Gosub Auswerten
End If

End If

Loop

Auswerten:
If Code = Oeffnen Then
Gosub Opentuer
Else
End If
Code = ""
Return

Opentuer:
Set Portc.5
Wait 2
Reset Portc.5
Return


End
----------------------------------

Momentan alles noch in der Testphase. Gestern war ich überglücklich, wie es endlich funktionierte.

Nun mein Problem: Ihr seht die Festlegung der Code-Konstante:
Const Oeffnen = "123459"

(Ich weiss, dass ich das später noch über die Tastatur veränderbar machen sollte)

Wenn ich nun allerdings in meinem Programm in Bascom diesen Code verändere, dann kompaliere und übertrage, dann ist immer noch der alte Code auf meinem ATMEGA8.

Erst mit dem Trick "komplett anderes Programm übertrage" und dann das Programm mit veränderter Constante im Anschluss übertragen, bringt mir diesesn neuen Code in den Atmel.

Ich hatte auch bereits ERASE Chip probiert, funktionierte allerdings auch nicht.

Hat hier vielleicht jemand ein Erklärung?

Danke
 
Hi Blatzi,

dies ist Heute mein Einstand in diesem Forum.
na denn mal herzlich willkommen hier im Forum :flowers:

wolln mal sehen wie wir dein kleines Problemchen lösen können ;)

Wenn ich nun allerdings in meinem Programm in Bascom diesen Code verändere, dann kompiliere und übertrage, dann ist immer noch der alte Code auf meinem ATMEGA8.

Erst mit dem Trick "komplett anderes Programm übertrage" und dann das Programm mit veränderter Constante im Anschluss übertragen, bringt mir diesen neuen Code in den Atmel.

Ich hatte auch bereits ERASE Chip probiert, funktionierte allerdings auch nicht.

Hat hier vielleicht jemand ein Erklärung?
Ich vermute mal, du überträgst nach dem kompilieren immer noch die alte
Binärdatei zum Atmel. Das schließe ich aus dem fett geschriebenen Teil.
Dabei nimmst du eine andere Binärdatei und danach wieder die deines
Codeschloß-Programms.

Überträgst du direkt mit Bascom oder mit nem anderen Programm ?
Arbeitest du bei deinem Programm mit dem selben Dateinamen oder hast du
ihn für die Änderung verändert ? zB von Schloss_v1.bas auf Schloss_v2.bas ?

Also irgendwie änderst du wohl den Bascom-Code und kompilierst das auch
neu. Aber übertragen wirst du wohl dann immer die alte vorherige Version.
Das könnte an einem Fehler in deinem Arbeitsablauf liegen (tippe ich mal).

Gruß
Dino
 
Hallo Blatzi!

Auch von mir ein herzliches Willkommen im AVR-Praxis Forum! :ciao:

Zu deinem aktuellen Problem habe ich leider auch keine Lösung parat.....
Da aber eine Konstante immer nur ein "Zeiger" ist, sollest du deinen "Öffnercode" besser in einer Variable speichern und nicht als Konstante anlegen.

Wenn du später den "Öffnercode" einmal per Tastatur ändern möchtest, dann hilft dir eine Konstante sowieso nicht weiter..... ;)

Besser wäre also eine ganz normale String-Variable!
Code:
Dim Oeffner_code As String * 6       'je nach Anzahl der Ziffern

Schöne Grüße,
Cassio
 
Hi,

Da aber eine Konstante immer nur ein "Zeiger" ist, sollest du deinen "Öffnercode" besser in einer Variable speichern und nicht als Konstante anlegen.
wär für die spätere Änderung sinnvoll. Vor allem weil der Code dann ja wohl
irgendwann ins EEPROM kommt.

In der Referenz steht folgendes ...
Assigned constants consume no program memory because they only serve as a reference to the compiler. The compiler will replace all occurrences of the symbol with the assigned value.
Also ist das nur ein Platzhalter / Symbol / Benannter Wert. So wie man zB
für 3,14159265 auch PI schreiben könnte oder für 9,81 auch G (Erdbeschleunigung).
Der Compiler benutzt an den Stellen in deinem Programm an denen das Wort
"Oeffnen" steht in Wirklichkeit den String "123459". Also ist
"Oeffnen" sozusagen ein Alias für den String "123459".
In Assembler wird das mit ".equ" gemacht. ;)

You can use a constant to give a value a more meaningful name.
For example : variable = 1

const optHeaterOn = 1
variable = optHeaterOn
...
..
See also
ALIAS
Das steht auf den Seiten 513+514 der Bascom-Referenz.

Gruß
Dino
 
Hallo zusammen,

Achtung ... soweit ich das sehe verletzt Ihr die Regel, dass ein String immer um 1 größer definiert werden muss als er wirklich lang ist. Ein String wird mit NULL abgeschlossen. Wenn Ihr den String mit 6 definiert und dann "123456" reinpackt dann überschreibt die NULL irgend etwas im Speicher bzgl. der String rennt unterminiert im Speicher rum.

Da würde ich mal genauer hinschauen bzw. den String Code auf jeden Fall mal mit *7 definieren!

Grüße,
Markus
 

Über uns

  • Makerconnect ist ein Forum, welches wir ausschließlich für einen Gedankenaustausch und als Diskussionsplattform für Interessierte bereitstellen, welche sich privat, durch das Studium oder beruflich mit Mikrocontroller- und Kleinstrechnersystemen beschäftigen wollen oder müssen ;-)
  • Dirk
  • Du bist noch kein Mitglied in unserer freundlichen Community? Werde Teil von uns und registriere dich in unserem Forum.
  •  Registriere dich

User Menu

 Kaffeezeit

  • Wir arbeiten hart daran sicherzustellen, dass unser Forum permanent online und schnell erreichbar ist, unsere Forensoftware auf dem aktuellsten Stand ist und der Server regelmäßig gewartet wird. Auch die Themen Datensicherheit und Datenschutz sind uns wichtig und hier sind wir auch ständig aktiv. Alles in allem, sorgen wir uns darum, dass alles Drumherum stimmt :-)

    Dir gefällt das Forum und unsere Arbeit und du möchtest uns unterstützen? Unterstütze uns durch deine Premium-Mitgliedschaft!
    Wir freuen uns auch über eine Spende für unsere Kaffeekasse :-)
    Vielen Dank! :ciao:


     Spende uns! (Paypal)