Atmel ATMega128 Fuse- und Lockbits in Betrieb auslesen

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
Reply to
Andreas Graebe
Loading thread data ...

Am Wed, 26 Dec 2012 22:29:35 +0100 schrieb Edzard Egberts:

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
Reply to
Andreas Graebe

Am Wed, 26 Dec 2012 20:48:40 +0000 schrieb Andreas Graebe:

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
Reply to
Andreas Graebe

Andreas Graebe ( snipped-for-privacy@beuth-hochschule.de):

Versuch es doch einfach mal hier:

formatting link
formatting link

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
Reply to
Thomas 'Tom' Malkus

Am Wed, 26 Dec 2012 23:47:47 +0100 schrieb Thomas 'Tom' Malkus:

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
Reply to
Andreas Graebe

Und so sprach Andreas Graebe:

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

Reply to
Roland Ertelt

Und so sprach Roland Ertelt:

Sorry, was vergessen:

extern const uint16_t cuiFuseBits @ 0xabcd

Roland

Reply to
Roland Ertelt
[...]

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:

formatting link

Rauschfunk?

--
Gruesse, Joerg 

http://www.analogconsultants.com/
Reply to
Joerg

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.

Reply to
Stefan Huebner

Andreas Graebe ( snipped-for-privacy@beuth-hochschule.de):

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

Yahoo ist bei technischen Dingen oft wesentlich treffsicherer.

Auf 144MHz? ;-)

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

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
Reply to
Thomas 'Tom' Malkus

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.

Reply to
Heiko Nocon

Am Thu, 27 Dec 2012 00:44:31 +0100 schrieb Stefan Huebner:

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
Reply to
Andreas Graebe

Am Thu, 27 Dec 2012 01:10:23 +0100 schrieb Thomas 'Tom' Malkus:

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.

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

--
mfG Andreas
Reply to
Andreas Graebe

Am Thu, 27 Dec 2012 08:12:53 +0100 schrieb Heiko Nocon:

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
Reply to
Andreas Graebe

Andreas Graebe ( snipped-for-privacy@beuth-hochschule.de):

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
Reply to
Thomas 'Tom' Malkus

Am Thu, 27 Dec 2012 10:21:09 +0100 schrieb Thomas 'Tom' Malkus:

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

--
mfG Andreas
Reply to
Andreas Graebe

Am 27.12.2012 10:05, schrieb Andreas Graebe:

Danke, ich auch!

Butzo

Reply to
Klaus Butzmann

Und so sprach Heiko Nocon:

Ja, so genau hatte ich mich in den AVR32 damals (noch) nicht eingelesen. Ist natürlich schlecht, wenn ein Konfig-Register (nix anderes sind ja die FuseBits) so umständlich auszulesen ist. Klingt für mich etwas nach "wurde vergessen" und muss jetzt improvisiert werden.

Andererseits habe ich bisher aber auch noch nicht versucht, den Programmspeicher des MSP430 oder meines PIC selber auszulesen. Ich weiss also nicht, ob dort auch so ein Aufstand nötig ist, oder ob ich da einfach einen Zeiger nehmen kann.

Roland

Reply to
Roland Ertelt

ElectronDepot website is not affiliated with any of the manufacturers or service providers discussed here. All logos and trade names are the property of their respective owners.