Atmel ATMega128 Fuse- und Lockbits in Betrieb auslesen

Do you have a question? Post it now! No Registration Necessary

Translate This Thread From German to

Threaded View
Hallo @ all,
ich hoffe, das ist die passende NG für meine Frage. Ich habe die Aufgabe,  
einen ATMega128 in Hochsprache (CVAVR-Compiler) dazu zu bringen, den  
Inhalt der Fuse- und Lockbits auszulesen. In Assembler sind das ein paar  
simple Befehle, das wäre meine bevorzugte Methode. Aber es soll nun  
unbedingt in C sein. Ich habe bereits sämtliche Libraries angesehen, ob  
es schon eine passende Funktion gibt, aber ich habe nichts gefunden.

Hat da jemand einen Tip?

Es muss *unbedingt* der CVAVR-Compiler genutzt werden. Momentan bin ich  
auf dem Erkenntnisstand, die Abfrage mit Inline-Assembler zu lösen. Das  
entspricht natürlich nicht der Anforderung. Was kann man sonst machen?  
Wie übergibt man (konstante) Parameter im Z-Register, oder muß man das  
erst aus dem Stack kopieren? Und wie bringt man den Compiler dazu, den  
LPM- bzw. ELPM-Befehl zu verwenden? Ist es vielleicht besser, ein Makro  
zu bauen, das wie eine Funktion aufgerufen wird?

--  
MfG Andreas

Re: Atmel ATMega128 Fuse- und Lockbits in Betrieb auslesen
Quoted text here. Click to load it

Aber der Vernunft.


Re: Atmel ATMega128 Fuse- und Lockbits in Betrieb auslesen
Am Wed, 26 Dec 2012 22:29:35 +0100 schrieb Edzard Egberts:

Quoted text here. Click to load it

Da sprichst Du nicht nur mir aus der Seele, sondern auch ein wahres Wort  
gelassen aus. Leider hilft mir das nicht weiter, es handelt sich um einen  
Auftrag.

Ich bin wie gesagt kein Hochsprachenmensch, aber das Leben ist nun mal  
kein Ponyhof...

Ich hatte schon häufig das Problem, funktionierende Assemblerroutinen in  
C zu übersetzen. Was manche Compiler so an Code erzeugen, ist schon  
abenteuerlich. Für eine Unsigned-Division durch 256 wurden zweimal acht  
Schiebebefehle erzeugt, anstatt einfach das Highbyte zu benutzen. Ein  
Compiler hat sogar die Divisions-Library bemüht, trotz Optimierungs-
Pragma.

--  
MfG Andreas

Re: Atmel ATMega128 Fuse- und Lockbits in Betrieb auslesen
Quoted text here. Click to load it

Rein vom Verständnis: was treibt einen Auftraggeber dazu, zu verlangen,  
einen Befehl, der sich vorzugsweise in Assembler darstellen lässt, in  
einer Hochsprache hinzubiegen? Im worst case bastelt der Compiler da  
sonst noch was draus und man kann sich nicht sicher sein, das Gewünschte  
zuverlässig zu erreichen (zB weil für einen rein hypothetischen Zugriff  
auf so ein Register ein Write und ein darauffolgender Read nötig sind),  
im Idealfall genau das, was man in Inline-ASM auch geschrieben hätte.



Re: Atmel ATMega128 Fuse- und Lockbits in Betrieb auslesen
Am Thu, 27 Dec 2012 00:44:31 +0100 schrieb Stefan Huebner:

Quoted text here. Click to load it

Das verstehe ich genauso wenig. Ist halt so. Die fürchten Assembler wie  
der Teufel das Weihwasser. "Heutzutage braucht man keine Assemblersprache  
mehr" ist deren Devise. Und da der Auftraggeber immer Recht hat, mache  
ich also geistige Turnübungen, damit der Compiler genau den Code erzeugt,  
den ich in Assembler schreiben würde.

Und wenn es mit dem nächst größeren Prozessor nicht mehr funktioniert,  
habe ich dann einen Folgeauftrag. Kleinvieh macht auch Mist.

--  
mfG Andreas

Re: Atmel ATMega128 Fuse- und Lockbits in Betrieb auslesen
Am Wed, 26 Dec 2012 20:48:40 +0000 schrieb Andreas Graebe:

Quoted text here. Click to load it

Ich mach mal die Ingrid: ist es möglich, einen Pointer aufs Codesegment  
zu deklarieren, dem die passende Adresse zuzuweisen, dann die beiden Bits  
zum Auslesen von Lock- bzw. Fuse- zu setzen, und dann mittels des Pointers  
den Wert zu lesen? Muß ja laut Datenblatt innerhalb vier Taktzyklen  
passieren.

Hat jemand so etwas schon mal gemacht?

Heute habe ich keine Lust mehr, teste ich morgen mal. Immerhin ist ja  
noch Weihnachten.

--  
MfG Andreas

Re: Atmel ATMega128 Fuse- und Lockbits in Betrieb auslesen
Andreas Graebe (graebe@beuth-hochschule.de):
Quoted text here. Click to load it

Versuch es doch einfach mal hier:
http://www.mikrocontroller.net/topic/95882#827101
http://www.avrfreaks.net/index.php?name=PNphpBB2&file=printview&t75%495&start=0

Das hat jetzt mit Google keine 10s gedauert ;-)

73 de Tom
--  
DL7BJ * DL-QRP-AG #1186 * DARC  OV I19 * FISTS #15933 * ARRL
http://www.dl7bj.de https://twitter.com/dl7bj

Re: Atmel ATMega128 Fuse- und Lockbits in Betrieb auslesen
Am Wed, 26 Dec 2012 23:47:47 +0100 schrieb Thomas 'Tom' Malkus:

Quoted text here. Click to load it
name=PNphpBB2&file=printview&t75%495&start=0
Quoted text here. Click to load it

Jau, danke, man muß wohl wissen, wonach man suchen sollte. Der erste Link  
ist zwar für einen anderen Compiler, aber der zweite trifft das ganze  
schon recht gut. Da werde ich drauf aufbauen.

Eigentlich mag ich Gockle nicht so, aber ich werde wohl mal an meinen  
Vorurteilen arbeiten müssen.

Na dann, guts Nächtle, ich geh jetzt auf 2m.

--  
MfG Andreas

Re: Atmel ATMega128 Fuse- und Lockbits in Betrieb auslesen
Andreas Graebe wrote:

[...]


Quoted text here. Click to load it

Oder mach es wie ich, benutze eine andere Suchmaschine. Diese hier
gefaellt mir mit den Regeln zur Privatsphaere und von der
Funktionalitaet her recht gut:

https://duckduckgo.com/html


Quoted text here. Click to load it

Rauschfunk? <duck und schnell wech>

--  
Gruesse, Joerg

http://www.analogconsultants.com/

Re: Atmel ATMega128 Fuse- und Lockbits in Betrieb auslesen
Joerg ( snipped-for-privacy@invalid.invalid):
Quoted text here. Click to load it


Da kann man ganz schnell sehen, wer Funkamateur ist und 2m  
gleich mit 144MHz assoziiert ;-)

73 de Tom

PS: Duckduckgo ist wirklich eine gute Alternative, vor allem weil Google
seit Einführung der lokalen Suche immer etwas überlistet werden muss.  
Technische Dinge nur im Umkreis zu suchen ist sowas von daneben...
--  
DL7BJ * DL-QRP-AG #1186 * DARC  OV I19 * FISTS #15933 * ARRL
http://www.dl7bj.de https://twitter.com/dl7bj

Re: Atmel ATMega128 Fuse- und Lockbits in Betrieb auslesen
Am Thu, 27 Dec 2012 01:10:23 +0100 schrieb Thomas 'Tom' Malkus:

Quoted text here. Click to load it

Gerade von Funkamateuren hätte ich erwartet, das Idiom "auf 2m gehen" in  
diesem Zusammenhang anders zu deuten ;-)

Ich bin übrigens keiner, ich lausche nur im 3m-Band. Allerdings immer  
seltener, seit dort so übel komprimiert wird, daß man die Geräte "atmen"  
hört.

Quoted text here. Click to load it

Wieder was gelernt. Das werde ich mal ansehen, danke für den Tip.

--  
mfG Andreas

Re: Atmel ATMega128 Fuse- und Lockbits in Betrieb auslesen
Andreas Graebe (graebe@beuth-hochschule.de):
Quoted text here. Click to load it

Das sind die CB-Funker. Bei Funkamateuren ist das eher unüblich, die  
Bezeichnung für ein Amateurfunk-Band so zu verwenden.  

73 de Tom
--  
DL7BJ * DL-QRP-AG #1186 * DARC  OV I19 * FISTS #15933 * ARRL
http://www.dl7bj.de https://twitter.com/dl7bj

Re: Atmel ATMega128 Fuse- und Lockbits in Betrieb auslesen
Am Thu, 27 Dec 2012 10:21:09 +0100 schrieb Thomas 'Tom' Malkus:

Quoted text here. Click to load it

Ich kenne diesen Ausdruck von einem Bekannten, der lizensierter  
Funkamateur ist und mit CB nichts am Hut hat.

--  
mfG Andreas

Re: Atmel ATMega128 Fuse- und Lockbits in Betrieb auslesen
Thomas 'Tom' Malkus wrote:
Quoted text here. Click to load it

Funkamateure sagten zumindest in den 80ern "Ich schalte jetzt fuer ein
paar Stunden auf horizontale Polarisation um".

--  
Gruesse, Joerg

http://www.analogconsultants.com/

Re: Atmel ATMega128 Fuse- und Lockbits in Betrieb auslesen
Am 27.12.2012 10:05, schrieb Andreas Graebe:

Quoted text here. Click to load it
Danke, ich auch!


Butzo


Re: Atmel ATMega128 Fuse- und Lockbits in Betrieb auslesen
Andreas Graebe (graebe@beuth-hochschule.de):
Quoted text here. Click to load it

Naja, Du musst Dir avrfreaks und mikrocontroller.net, evtl. roboternetz merken.
Meist findet man da ziemlich schnell, was man sucht.  

Quoted text here. Click to load it

Yahoo ist bei technischen Dingen oft wesentlich treffsicherer.

Quoted text here. Click to load it

Auf 144MHz? ;-)  

73 de Tom
--  
DL7BJ * DL-QRP-AG #1186 * DARC  OV I19 * FISTS #15933 * ARRL
http://www.dl7bj.de https://twitter.com/dl7bj

Re: Atmel ATMega128 Fuse- und Lockbits in Betrieb auslesen
Und so sprach Andreas Graebe:

Quoted text here. Click to load it

Also ich hatte mal den AVR32 in den Fingern. Dort waren die "Fusebits"
ein Register an einer Adresse. Das lässt sich normalerweise jederzeit
auslesen, sofern es nicht dagegen geschützt ist.

Musstu mal im Handbuch zum kern schauen, welche Adresse die Fusebits
haben. Dann kannst du einen cons char/int darauf adressieren, und ihn im
Code normal verwenden.

Beim MSP430 wäre das so in der Art:
const uint16_t cuiFuseBits @ 0xabcd

Musstu mal schauen, ob dein Compiler etwas ähnliches kann.

Roland

Re: Atmel ATMega128 Fuse- und Lockbits in Betrieb auslesen
Und so sprach Roland Ertelt:

Quoted text here. Click to load it

Sorry, was vergessen:

extern const uint16_t cuiFuseBits @ 0xabcd

Roland



Re: Atmel ATMega128 Fuse- und Lockbits in Betrieb auslesen
Roland Ertelt wrote:

Quoted text here. Click to load it

Das ist beim AVR eben nicht so. Zwar sind die Fusebits im weitesten
Sinne auch Register, aber zum Auslesen ist ein spezielles Verfahren
nötig, was am ehesten noch dem Datenzugriff auf den Programmspeicher
entspricht.

Zwar wäre es möglich, analog zu deinem Beispiel einen Daten-"Pointer" zu
basteln, der das richtige Register addressiert, aber das allein genügt
leider nicht, denn vor dem Auslesen ist zwingend eine Art Freischaltung
nötig. Die selber ist zwar kein Problem, denn es handelt sich um eine
einfache Registerausgabe, aber sie muß höchstens vier Takte vor dem
eigentlichen Lesezugriff geschehen. Diese zeitliche Einschränkung ist
mit einer Hochsprache zumindest nicht _zuverlässig_ einhaltbar.


Re: Atmel ATMega128 Fuse- und Lockbits in Betrieb auslesen
Am Thu, 27 Dec 2012 08:12:53 +0100 schrieb Heiko Nocon:

Quoted text here. Click to load it

Das deckt sich mit meinen Befürchtungen. Aber wie ich schon schrieb, wenn  
es dann mit dem nächst größeren Prozessor nicht klappt, weil der anstatt  
LPM dann ELPM sehen will, und der ganze Kram dann nicht mehr innerhalb  
von vier Taktzyklen fertig wird, habe ich einen Folgeauftrag.

Vielleicht mache ich auch eine Library auf, die diese eine Funktion  
enthält, natürlich in Assembler. Sieht man ja hinterher nicht mehr. Das  
wäre wohl die eleganteste Methode. Natürlich muß ich erst mal nachlesen,  
wie man bei diesem Compiler eigene Librarys einbindet.

Auf jeden Fall werde ich nachher den uralten Laptop anwerfen, auf dem  
noch Windows drauf ist. CVAVR unter Wine ist die Hölle.

--  
mfG Andreas

Site Timeline