Forum: Mikrocontroller und Digitale Elektronik AVR bootloader kernel ATmega32 *nix


von Kai S. (Firma: ZeuSWarE GmbH) (zeusosc)


Lesenswert?

Ein kurzer linksammel und schnell drüberlaern thread,.. g

Also ich möchte mit einem ATmega32, einen ENC28j60 IC, einer SD-card ein 
kleines system zusammenbasteln,..

Da ich mit einem Bootloader nix zu tun hatte, kommt hier die frÄg:
Bootloader loaded den kernel,.. wie muss nun der kernel aussehen 
(aufgebaut sein) das ich ein ,in einem speicherbereich abglegten, prog 
aufrufen und ausführen kann,.. gibts dazu irgendwo n link wie ich das 
aufzubauen hab?? wie sehen die schnittstelle zwischen programm und vom 
kernel verwaltete peripherie aus etc??
grüüüße

von Kai S. (Firma: ZeuSWarE GmbH) (zeusosc)


Lesenswert?

Will mir den keiner antworten?? sooowas wie: "hmm es gibt doch schon 
Nut/OS" oder "probiers doch mal pico]OS, das filesystem musste dir bei 
Ulrich radig abgucken,.." oder soooo???
andere frage, klingt zwar a bissl blöde aber kann mir jemand sagen 
wodurch sich die einzelnen kernel gänzlich unterscheiden?
mfg

von veloist (Gast)


Lesenswert?

klingt fuer mich irgendwie so:
soll ich in mein fahrrad besser diesel oder super tanken?

von antworter (Gast)


Lesenswert?

@Kai:

Meinst Du mit "kernel" ein (RT-)OS ?

Bitte versuche Deine Gedanken so auszuformulieren, daß logische 
Einheiten entstehen, die einem erkennbaren roten Faden folgen (denn ich 
werde aus Deinem Gebrabbel partout nicht schlau).

von Kai S. (Firma: ZeuSWarE GmbH) (zeusosc)


Lesenswert?

hmm sry @all wenn ich mich undeutlich ausgedrückt habe,..

@antworter: ja
@veloist: wasserstoff ;)

mit system meine ich ein eingebettetes system, mit rs232, und 
speicher,..

meine erste frage(n) bezog sich auf die software: welches RT OS? kann 
ich das selber schreiben? welche kommponenten beinhaltet ein (dieses) 
OS? wenn der kernel (RT-OS) läuft, wie ruft ein programm auf und führt 
es aus? wie kommunitiert OS und prog?



von Peter D. (peda)


Lesenswert?

Wozu brauchst Du denn einen Kernel ?

Beschreib mal, was Du mit dem AVR eigentlich machen willst.

Die übliche Programmierung eines MC ist ne Main-Loop ganz ohne 
irgendwelchen Schnullifax.

Dazu ist in 32kB auch nicht so richtig Platz, wenn daneben ja noch eine 
Applikation mit rein soll.


Peter

von antworter (Gast)


Lesenswert?

@Kai Scheddin

Hey... das kann man ja lesen ;-)

Ein RTOS wird typischerweise benutzt, wenn man so viele nebenläufige 
Aufgaben benutzt, daß ein manuelles "anspringen" der Funktionen zu 
aufwändig wird.

Mit einem RTOS gibt es die Möglichkeit der Task-/Thread-Wechsel - es 
wird also (sofern time-slicing benutzt wird), laufend zwischen den 
Aufgaben hin-und-her-gesprungen (mit Registersicherung, Stack-Frames 
usw.), so daß jede mal rankommt.

Bei mir bestand noch nicht die Notwendigkeit, ein solches zu benutzen, 
obwohl ich schon durchaus größere Projekte gestemmt habe...

...bevor Du eines einsetzt, solltest Du genau überlegen, ob es mit 
Interrupts allein nicht doch zu lösen ist...

http://www.freertos.org/
http://barello.net/avrx/
Nut/OS RTOS

von Kai S. (Firma: ZeuSWarE GmbH) (zeusosc)


Lesenswert?

@ peda & GAST:
auf dem ATMEga32 soll als webserver dienen
zusätzlich soll der Webserver eine/mehrere Application (á la compiled 
CGI) aufrufen können, die auch zugriff auf die perepherie/PORTS haben, 
die CGI's sollen via POST uploadbar sein

wegen dem Fehlenden Platz: da dachte ich an eine SD Speicherkarte 
(Ulrich Radig &CO)

gibt es da schon andere lösungen ?
danke g

von Michael W. (mictronics) Benutzerseite


Lesenswert?

Beim AVR ist es unmöglich Programmcode aus einem externen (oder internen 
RAM EEPROM) Speicher zu laden und aus zuführen.

von Pflorz (Gast)


Lesenswert?

Das stimmt nun hinwieder nicht. Der Bootloader kann das. Allerdings 
nicht unendlich oft. Fuer'n CGI wuerde man's nicht machen.

Pflorz

von Kai S. (Firma: ZeuSWarE GmbH) (zeusosc)


Lesenswert?

@Michael & Pflorz:
Also mit SPM kann ich ausführbaren Code ausm datensegment auslesen und 
in den flash legen,..
>Beitrag "SPM AVR"
Das währen dann bei 1000x zugriffe pro Tag gerade mal eine Lebensdauer 
von 100 Tagen,..

dann gäbe es doch noch die interpreter variante?
also man interpretiert den 16bit opcode
 á la
1111 01kk kkkk ksss =>brbc s,k

wobei dann ja k relative pos vom offset, dann springt der dateizeiger 
dahin,...

wenn ich mich nicht verzählt habe gibt 110 befehle für den ATmega32,...
das wären rund 6 zeilen pro befehl,.. is zwar heftig aber dürfte doche 
gehen oder?
mfg

von Karl H. (kbuchegg)


Lesenswert?

Also wenn ich mir schon einen Interpreter bauen müsste,
dann würde dessen Sprache ganz anders aussehen als
der Maschinencode eines AVR.

von Feadi (Gast)


Lesenswert?

Klar geht das mit dem Interpretar, aber warum möchtest Du den AVR 
Befehlssatz interpretieren?
Bau Dir doch Deinen eigenen.

Gruß, Feadi

von Kai S. (Firma: ZeuSWarE GmbH) (zeusosc)


Lesenswert?

ich denke es ist schwieriger ein klartextinterpreter zu basteln als den/ 
einen precompiled code zu lesen und auszuführen, da der befehlssatz ja 
eindeutig ist. Ausserdem dürfte ein klartextinterpreter ziemlich groß 
sein (für den ATmega).

Aber zu dieser art interpreter (wenn man das an dieser stelle sagen 
darf) kann man noch zusätzlich kontrollstrukturen einbauen z.B.:

darf das prog auf diesen register zugreifen? u.Ä.

eine virtuelle speicher zuweisung wäre auch möglich, das prog denkt 
dieser greift gerade auf $60 zu,. da dieser, im jetzigen beispiel, aber 
von einem anderen prog reserviert wär, hat er in wirklichkeit einen 
anderen speicherbereich,..

ich glaube tatsächlich wir kommen in die nähe eines eigenen OS freu

morgen abend fange ich mal damit an das grob zu strukturieren,..
grüüße

von nop (Gast)


Lesenswert?

"Multitasking" und Virtuelle Speicherverwaltung auf dem ATMega32? Bei 
32kByte Flash und 2kByte RAM? Ist das nicht wie mit Kanonen auf Spatzen 
zu schießen? o_O

Hast Du eigentlich schon mal das Datenblatt vom ATMega32 angeschaut?

* Thema Bootloader, Auszug aus dem Datenblatt, erste Seite:
– Optional Boot Code Section with Independent Lock Bits In-System
 Programming by On-chip Boot Program
 True Read-While-Write Operation

Der Bootloader ist somit ein ->optionaler<- Code. Man sollte allerdings 
bedenken, daß die Operation "SPM" ausschließlich aus dem Boot Segment 
funktioniert. Bei Deinem Vorhaben müßte somit irgendwie sichergestellt 
werden, daß jedes gewünschte Update einen Reset auslöst damit der 
Bootloader überhaupt gestartet werden kann.

* Thema Kernel:
Wie schon Peter Dannegger geschrieben hat. Wozu? Der ATMega ist ein 
kleiner Mikrocontroller, da braucht man kein vollständiges 
Betriebssystem und/oder Applikationen. Der AVR kann bedingt durch seine 
Architektur nur Code aus dem Flash ausführen, nicht aus dem RAM. Will 
man das, so sollte man eine andere Controllerfamilie verwenden.
Es gibt eine Main-Schleife, die "Applikationen"/"Programme" sind als 
Unterfunktionen ausgeführt. Man bedient sich der Timer und Interrupts 
zur Triggerung der Aufgaben.

* Thema Webserver und ENC28j60:
Schon mal gesucht? Beitrag "winziger Webserver mit enc28j60+mega32"

Viele Grüße

von Feadi (Gast)


Lesenswert?

Kai möchtest Du etwa die 'Nachteile' des AVR's umgehen, indem Du einen 
virtuellen AVR in den (echten) AVR programmierst?

Das hätte dann den Vorteil, dass man den virtuellen AVR z.B. mit WinAVR, 
in C, programmieren kann. Aber interpretierter Maschinencode ist um den 
Faktor 100-500 langsamer als direkt ausgeführter Code.

Dann wünsche ich Dir noch viel Erfolg, und halte uns auf dem laufenden.

von Karl H. (kbuchegg)


Lesenswert?

Kai Scheddin wrote:
> ich denke es ist schwieriger ein klartextinterpreter zu basteln als den/
> einen precompiled code zu lesen und auszuführen, da der befehlssatz ja
> eindeutig ist. Ausserdem dürfte ein klartextinterpreter ziemlich groß
> sein (für den ATmega).

Oh. Klartext würde ich nicht machen.
Virtuelle CPU definieren, Compiler dafür schreiben.
Virtuelle CPU als Stackmaschine ausführen.

Ev. würde ich sogar reinbeissen und Forth lernen. Kommt drauf
an wie weit du das CGI treiben möchtest.

von Kai S. (Firma: ZeuSWarE GmbH) (zeusosc)


Lesenswert?

@nop & Peter:
>Wozu?
Ich habe hier schon mehrmals in verschiedenen threads gesehen das leute 
code ausm sram aus den unterschiedlichsten gründen ausführen möchten,..

@nop:
>webserver enc
Jo habe ich mir schon angeschaut,.. sind ein paar coole projekte 
dabei,..

@Feadi:
>Vorteil das man den virtuellen AVR in C proggen kann
Jo und auch in ASM und bascom,..
>100->500 mal langsamer
Ja,.. wenn die cmp routinen aller befehlsätze direkt hintereinander 
ausgeführt werden schon,.
Ich denke man kann das aber mit Optimierung den teiler auf ca. 50 
reduzieren
(so grob geschätzt 7 bit zu vergleichen mal (compare + brne max 
cycle)=7*(1+2)=21 dann noch den source rund 50)
d.h.: ein ATmega32 mit 16MHz wäre dann ca.: 0.32MHz 'schnell'

@Karl heinz:
>Virtuelle CPU definieren
jo,. da könnte man noch zusätzliche 17 asm befehle einführen (der AVR 
hat ja 110?) die das ganze dann ein bisschen schneller machen als 
0.32MHz,.. das könnte sich zum beispiel um spezial befehle für die 
peripherie handeln
>compiler dafür schreiben
jaaaa,.. für asm währ das machbar,. oder per macro ein zwei neue befehle 
zaubern,.. (z.b.:
.MACRO kai
.db 0b1111,@0,@1
.endmacro
kai 0xf,1)

> wie weit du das CGI trieben möchtest
naja meine bisherigen cgi's waren mit c compiliert,...

ich schreib euch heute nachmittag nochmal wie die virtuelle cpu ungefähr 
aussehen soll,.. etc
danke und grüüße an euch



von antworter (Gast)


Lesenswert?

Wenn man unbedingt externen Programmcode ausführen möchte, sollte man in 
den saueren Apfel beissen, und sage-und-schreibe +5€ für einen ARM7 
ausgeben...

Der kann Code direkt aus dem RAM ausführen, und erspart einem oben 
angedachte Arbeit für eine virtuelle Maschine.

...meine 0.02€

von Peter D. (peda)


Lesenswert?

Kai Scheddin wrote:

> Ich habe hier schon mehrmals in verschiedenen threads gesehen das leute
> code ausm sram aus den unterschiedlichsten gründen ausführen möchten,..

Ich kann mich nicht erinnern, daß dieses Ansinnen hier mit relevanter 
Häufigkeit gepostet wurde.
Und daß dafür auch sinnvolle und nachvollziehbare Gründe genannt wurden.
Eher, daß vor dem Posten wenig über den Sinn nachgedacht wurde, also 
mehr so als lustiges Feature ohne praktischer Notwendigkeit.


Ein Programmloader für SRAM ist aber überhaupt nichts, was einen Kernel 
oder OS benötigt.
Dann sollte man aber auch Architekturen nehmen, die Code-SRAM 
unterstützen. Z.B. der DS80C410 ist dafür gedacht (interner 
Ethernet-Loader):

http://www.maxim-ic.com/quick_view2.cfm/qv_pk/3609


Peter

von Kai S. (Firma: ZeuSWarE GmbH) (zeusosc)


Lesenswert?

gut ich habe mir einen sample vom ds80c400 bestellt,.. mal gucken wann 
dieser hier ist,.. solange mach ich mal weiter g

nett ist vor allem die keil c libary, die sehr umpfangreich ist,..

von Kai S. (Firma: ZeuSWarE GmbH) (zeusosc)


Lesenswert?

http://www.jogis-roehrenbude.de/Leserbriefe/Erhards_Scope-Clock/HS_ScopeClock.htm#Programmierung
ich habe leider ansonsten keine minimalschaltbilder für den ds80c400 
gefunden, hier ist das aber gut für den 80c420 aufgeführt,...

>Ein Programmloader für SRAM ist aber überhaupt nichts, was einen Kernel
>oder OS benötigt.
ne das nicht aber der nächste schritt wäre doch gleich ein memory 
management und software interruptmanagment(bios) reinzubasteln, da rückt 
doch ein os sehr nahe,..

>Dann sollte man aber auch Architekturen nehmen, die Code-SRAM
>unterstützen. Z.B. der DS80C410 ist dafür gedacht (interner
>Ethernet-Loader):

ja gut, das hat man ja nicht gleich zur hand g

von Rahul, der Trollige (Gast)


Lesenswert?

Wie dynamisch soll der Server sein?

>Das währen dann bei 1000x zugriffe pro Tag gerade mal eine Lebensdauer
>von 100 Tagen,..

Alle paar Stunden eine neue Software reinbrennen? Warum?

von Kai S. (Firma: ZeuSWarE GmbH) (zeusosc)


Lesenswert?

die idee war ja programme die extern gespeichert sind zur ausführung zu 
bringen, da war einmal die methode des selbst flashen, aber nach obiger 
rechnung hält dann das ganze nicht mal ein jahr,...
also interpreter,...

von Rahul, der Trollige (Gast)


Lesenswert?

>die idee war ja programme die extern gespeichert sind zur ausführung zu
>bringen, da war einmal die methode des selbst flashen, aber nach obiger
>rechnung hält dann das ganze nicht mal ein jahr,...
>also interpreter,...

Da müssen die Programme ja mächtig komplex sein, dass sie so groß sind.
Im Regelfall ist ein µC-basierter Webserver ein Sklave, der sich mit 
irgendwelchen simplen Aufgaben beschäftigt. Diese Aufgaben sind in der 
Regel auch noch mit der Hardware um den Controller herum vorgegeben.
Ein Mikrocontroller ansich ist ein recht dynamisches Gebilde, aber 
sobald er in eine bestimmten Hardwareumgebung eingebunden ist, ist er 
bis auf eine Parametrierung ziemlich festgelegt.
Wieso können die Programme nicht gleichzeitig im Controller-Flash 
liegen?
Man muß sie ja nicht alle benutzen.
Ein Befehlsinterpreter wird dir vermutlich auch nicht die Butter vom 
Brot in Sachen Geschwindigkeit nehmen (da gab es mal eine 
JAVA-Portierung auf den AVR... schön, dass es sie gibt...).
Vielleicht sehe ich das zu "schwarz-weiß", aber µC-basierte Webserver 
ändert man nicht 100000 Mal.

von Kai S. (Firma: ZeuSWarE GmbH) (zeusosc)


Lesenswert?

jo, der code zur generierung des dynamischen html ist nicht gerade 
klein,...
allein eine 'roh' cgi ist 9kb groß,...

von Rahul, der Trollige (Gast)


Lesenswert?

>allein eine 'roh' cgi ist 9kb groß,...

Und warum willst du mit sowas einen AVR quälen?
Hast denn schon einen AVR-Webserver zum Laufen gebracht? So mit 
TCP-Stack und so?

Das kommt mir irgendwie wie der Zweitprüfer bei mein Kolloquium vor: Der 
wollte auch nicht glauben, dass es Webserver in der Grösse eines 
2-Euro-Stücks gibt. Die natürlich sehr undynamisch sind, aber ihre 
Aufgabe sehr schön erledigen.

Damit will ich eigentlich nur das Gleiche wie oben ausdrücken: Son 
Quatsch!

von Kai S. (Firma: ZeuSWarE GmbH) (zeusosc)


Lesenswert?

>Und warum willst du mit sowas einen AVR quälen?
naja,.. einen anderen µC hatten wir hier noch net zur hand,..
da dieser flexibel ist, und es schon ein paar projekte wobei avr'S als 
webserver, und an avr's sd memory cards angeschlossen wurden,..
ergab halt eins plus eins zwo,..
die alternative wie zum ds80c410 ist mir bis heute ja auch noch 
unbekannt gewesen schäm


hier nochmal eine os die auch auf 8-bit µC's läuft,..
http://www.nilsenelektronikk.no/neproc.html

ich bastele mal weiter am interpreter,... grüüüße

von Kai S. (Firma: ZeuSWarE GmbH) (zeusosc)


Angehängte Dateien:

Lesenswert?

jo,.. ich habe hier mal groben asm satz wie ich mir das ungefähr 
vorstelle,, muss jetzt los,.. ich bin morgen wieder doa,.. greetz

von Kai S. (Firma: ZeuSWarE GmbH) (zeusosc)


Angehängte Dateien:

Lesenswert?

habe jetzt über die paar funkt. jeweils eine beschreibung eingefügt,..
hier eine davon:
;in r16,r17 is the executable code stored, VPC points to it (relativ)
;example hex code 0F 70 is 00001111 01110000 swaped 01110000 00001111
;andi opcode is 0111 KKKK dddd KKKK K-> 00001111=> 128 d-> 0000 =>r16
; ==> andi r16,0x0f

oh bei ein paar routinen hatte ich vergessen das die regs ja erst ab r16 
anfangen, das habe ich ausgebessert

ich habe den source noch um ORI,SBR ergänzt, bei rjmp bin ich hängen 
geblieben da ich mir gerade nicht sicher bin wie das mit dem 
wertebereich -2k<=K<=2K war,.. ich habe das noch so im kopf das 
-1=0xFFFFFD ist

die sortierung (eine übersichtskizze als jpeg beigelegt)
braucht maximal 20 cycles (die ersten 4 bit)
die emulation eines cpi befehls dauert 14 cycles, mit VPC, VSP, VSREG, 
VREG braucht 38 cycles (bitte dazu source code ansehen)
das sind schon mal 58
kommt das laden des 2byte großen code's ausm sram oder eeprom dazu 
werden's nochmal ca. 40 also sind wir jetzt bei ca 100 cylces

es wär nett wenn ihr mich auf semantische fehler hinweisen würdet,.. 
mehr augen sehen mehr,..

grüüüße


von Peter D. (peda)


Lesenswert?

Beschreib einfach mal verbal (mit Worten), was der Code überhaupt machen 
soll und wozu das nütze sein soll.


Hast Du schon mal den IJMP-Befehl gesehen (wegen dieser komischen 
RJMP-erei) ?


Peter

von Kai S. (Firma: ZeuSWarE GmbH) (zeusosc)


Lesenswert?

ijmp               ; Jump to routine pointed to by r31:r30

sagt ja schon allet,.. rjmp ist aber ein relativer jmp der von der 
momentanen position +- k springt,..

rjmp-erei, meinst du bei der sortierung/auswahl?

>Beschreib einfach mal verbal (mit Worten), was der Code überhaupt machen
>soll und wozu das nütze sein soll.

Ich wiederhole es gerne g

virtualisierung des AVR befehlsatzes,..
der code gleicht den hexcode mit dem gängigen befehlssatz ab, und führt 
diesen virtuell aus. ich habe einen virtuellen SREG, einen virtuellen PC 
und einen virtuellen stack pointer sowie virtuelle register die alle im 
sram liegen

-----
zitat feadi:
>Kai möchtest Du etwa die 'Nachteile' des AVR's umgehen, indem Du einen
>virtuellen AVR in den (echten) AVR programmierst?

>Das hätte dann den Vorteil, dass man den virtuellen AVR z.B. mit WinAVR,
>in C, programmieren kann.
----

das sortierungs verfahren ist zwei beiträge über diesen im anhang 
skiziert.

Hier ein beispiel der virtualisierung:

>.equ Vsegment=$80
Virtuelles segment ist hier in dem beispiel statisch, das ist der offset 
im sram ab welchem der head anfängt

>;offset  head
>; 0-1    VSTACKPOINTER HIGH-LOW
>; 2      VSREG
>; 3-5    VPC  max prog size 16Mb
>; 6-38   Virtual registers

>;ANDI & cbr statement

>low14151607:    ;0111
 sprungmarke, wenn die ersten 4 bit 0111 sind, dann ist der 
auszuführende befehl ANDI oder CBR

>;example:
>;r16=70 ,r17=0F
>;hex code: 0F 70 is 00001111 01110000 swaped 01110000 00001111
>;andi opcode is 0111 KKKK dddd KKKK K-> 00001111=> 128 d-> 0000 =>r16
>; ==> andi r16,0x0f (andi Rd,k)
das beispiel erläutert grob wie der hexcode zu interpretieren ist

>ldi r19,$00
>mov r18,r17
>andi r18,0xf0
>swap r18

in r18 liegt nun der wert des zielregisters (z.b. 0000 für r16)

>;register starts @ r16 so r18+16(15)+6offset
>ldi r20,0x15
>add r18,r20

wie da steht und im obigen beispiel aufgeführt, ist dddd=0000 so ist der 
register 16 gemeint, da ich die position der virtuellen register 
berechnen muss addiere ich 0x0f + 0x05 zu

>addw r27,r26,r19,r18  ; calculate relative pos, Rd

in XL und XH liegt das offset vom header, auf diesen wird nun die 
register startaddresse und die registernummer addiert


>mov r19,r17
>mov r18,r16
>andi r19,0x0f
>andi r18,0x0f
>swap r18
>and  r19,r18

die low bit von r17 werden zu highbits geswappt und mit den lowbits von 
r16
kombiniert und in r19 gesichert nun hat man k.


>push r16
im realen stack sichern

>ld r16,X
>and r16,r19 ;->andi
>st X,r16
hier wird der wert k und der wert aus dem register
 ge'and'et (doofes wort), und wieder auf die virtuelle register addresse 
zurückgesichert

>ldi r26,low(Vsegment+2)
>ldi r27,high(Vsegment+2)
>ldi r16,SREG
>st X,r16
sicherung des sreg ins virtuelle sreg

>ldi r26,Vsegment+5
>ldi r27,Vsegment+4
>ld r16,X
>ldi r17,1
>add r16,r17
>st X,r16
sowie incrementierung des virtuellen programm counters

>pop r16
>jmp ende
>;ENDANDI&CBR

gut durch diese beschreibung sind mir auch ein paar kleine fehler 
aufgefallen die ich hier gleich beseitigt habe,( ins prog muss es aber 
noch rein)

grüüße

von Peter D. (peda)


Lesenswert?

Kai Scheddin wrote:

> rjmp-erei, meinst du bei der sortierung/auswahl?

Ja genau.

Mit IJMP + Sprungtabelle ist das codesparender und vor allem viel 
übersichtlicher.


Peter

von Kai S. (Firma: ZeuSWarE GmbH) (zeusosc)


Lesenswert?

ich habe darüber ein bisschen gegrübelt,.. wegen der übersichtlichkeit, 
ja aber das ganze würde dann aber bis zu 4 cycles mehr verbrauchen oder?
bei mir springt er von einer entscheidungsmöglichkeit zur anderen bis 
dieser in 4 schritte am ziel ist,..

von Peter D. (peda)


Lesenswert?

Kai Scheddin wrote:
> ich habe darüber ein bisschen gegrübelt,.. wegen der übersichtlichkeit,
> ja aber das ganze würde dann aber bis zu 4 cycles mehr verbrauchen oder?


Naja man könnte tricksen, indem man die Sprungtabelle aligned.
Dann ist man in 7 Zyklen fertig.

Mit Deiner Variante sind es aber 12..16 Zyklen.
1
.nolist
2
.include "m16def.inc"
3
.list
4
5
;input: index = zl.7 ... zl.4   ;upper 4 bits
6
7
jumper:
8
        swap    zl
9
        andi    zl, 0x0F
10
        ldi     zh, high(jumptable)
11
        ijmp
12
13
.org (pc + 0xff) & 0xFF00       ;table alignment
14
15
jumptable:
16
        rjmp    m0
17
        rjmp    m1
18
19
20
m0:
21
m1:


Peter

von Kai S. (Firma: ZeuSWarE GmbH) (zeusosc)


Lesenswert?

mit mov r30,r17 sinds 8 g
danke peter freu

das mit dem pc+0xff bring mich bloß gerade ein bisschen zum grübeln,.
der programm counter ist doch dynamisch? .org weißt doch statische 
addressen zu?
grüüße

von Peter D. (peda)


Lesenswert?

Kai Scheddin wrote:

> das mit dem pc+0xff bring mich bloß gerade ein bisschen zum grübeln,.
> der programm counter ist doch dynamisch? .org weißt doch statische
> addressen zu?

Implizit ist immer ein ".org 0x0000" am Anfang, d.h. nach dem 
Assemblieren hat jeder Befehl eine bestimmte Adresse und ist nicht mehr 
verschiebbar.


Peter

von Kai S. (Firma: ZeuSWarE GmbH) (zeusosc)


Lesenswert?

jo das mit dem .org 0x00 kenn ich ja,..
was mir unklar ist das :
>pc + ..
wieso >pc?
mfg

von Falk (Gast)


Lesenswert?

PC is der PROGRAM COUNTER des Assemblers beim assemblieren, NICHT das 
gleichnamige Prozessorregister! Sozusagen die laufende Adresse, in die 
die einzelenen Befehle geschrieben werden. Kommt nun der Assembler an 
die Stelle

.org (pc + 0xff) & 0xFF00       ;table alignment

macht er genau das, was dort steht. Damit ist das Ganze dahin gehend 
automatisiert (=dynamisch), als dass man sich nicht per Hand um die 
Adresse kümmern muss, wenn man vor dem Label noch Code einfügt. Das 
macht der Assembler bei jedem neuen Durchlauf allein.

MFG
Falk


von Kai S. (Firma: ZeuSWarE GmbH) (zeusosc)


Lesenswert?

ok jetzt habe ich kapiert wieso noch ein .org dazu muss,.. sonst liegt 
bei
>ldi r31,high(jumperlabel)
r31 nur der offset 0x00
k,..

von Peter D. (peda)


Lesenswert?

Wenn Dir noch 2 Zyklen mehr nichts ausmachen, geht auch ne 16 Bit 
Subtraktion und die .org Anweisung entfällt.


Peter

von Kai S. (Firma: ZeuSWarE GmbH) (zeusosc)


Angehängte Dateien:

Lesenswert?

Hi @ all,
im anhang findet ihr eine funktionstüchtige asm file,
die ich mit dem avr studio debuger (cooles teil muss ich mal sagen) 
zewcks simulation durchlaufen lassen habe.

es funktioniert: (mit 64 cycles)
ANDI
CBR
RJMP
SUBI
SBR
ORI
TST

wär nett wenn ihr noch ein statement dazu da lasst,.. grüüße

von Kai S. (Firma: ZeuSWarE GmbH) (zeusosc)


Angehängte Dateien:

Lesenswert?

heute habe ich die
sec
sez
sen
sev
ses
seh
set
sei
clc
clz
cln
clv
cls
clh
clt
cli

befehle dazu gepackt,..
sie anhang grüüüße

von Kai S. (Firma: ZeuSWarE GmbH) (zeusosc)


Angehängte Dateien:

Lesenswert?

sooo,. da ich so guter laune war habe ich noch
mov,and,eor,or,ldi
dazu gepackt,

das Vsegment nun dynamisch in r14,r15 gelegt, und die register r18,r19 
für die 32bit obcode schon mal definiert

es enthält also nun folgende befehle:
mov,and,eor,or,ldi,sec,sez,sen,sev,ses,seh,set,sei,clc,clz,cln,clv,cls,c 
lh,
clt,cli,andi,cbr,rjmp,subi,sbr,ori,tst

ca 78 cycles habe ich bei mov gemessen,..

diese version ist noch ungetestet,.. daher wär es net schlecht wenn ihr 
etwas dazu sagt,..

grüüße

>edit:
ich habe mal nachgezählt, direkter source ist 448 bytes groß,..

von Peter D. (peda)


Lesenswert?

Kai Scheddin wrote:

> diese version ist noch ungetestet,.. daher wär es net schlecht wenn ihr
> etwas dazu sagt,..


Tja, was soll man bloß dazu sagen.
Wenns Dir halt Spaß macht, dann machs eben.


Für mich hat sowas überhaupt keinen Sinn.
Ich programmiere in C, dann jag ichs per Bootloader in den Flash und gut 
is.
Daher nicht böse sein, wenn ichs mir nicht weiter angucke.


Peter


P.S.:
Mich würde eher interessieren, wenn jemand das Programmieren per 
Debugwire rauskriegt und dokumentiert. Wäre net, damit dann auch die 
Clock-Fuses ändern zu können.

von Stefan (Gast)


Lesenswert?

Kai Scheddin schrob:
> Will mir den keiner antworten?? sooowas wie: "hmm es gibt doch schon
> Nut/OS" oder "probiers doch mal pico]OS, das filesystem musste dir bei
> Ulrich radig abgucken,.." oder soooo???
> andere frage, klingt zwar a bissl blöde aber kann mir jemand sagen
> wodurch sich die einzelnen kernel gänzlich unterscheiden?
> mfg

probiers doch mal kaOS

kaOS is a real-time, multithreaded, preemptive operating system for the 
ATmega32 microcontroller, which loads and executes programs from a 
Secure Digital or MMC card. The system waits for you to insert a card 
and press the Reset button, at which point a program is loaded from the 
card and executed. The system supports multiple threads, cross-thread 
messaging, dynamic memory allocation, dynamic thread creation, 
semaphores and much more.

http://www.circuitcellar.com/avr2006/winners/DE/AT3324.htm

Wieviel Platz noch übrig ist für einen TCP/IP Stack weiss ich allerdings 
nicht. Vermutlich nicht mehr genug.

von Stefan (Gast)


Lesenswert?

Ich schrob:
> Wieviel Platz noch übrig ist für einen TCP/IP Stack weiss ich allerdings
> nicht. Vermutlich nicht mehr genug.

Was man hier prüfen könnte. Wenn ich mich nicht vertue mit der 
Interpretation des makelog aus dem Softwarearchiv, sind es ca. 8 KB

avrETH1 Webserver

You can connect an old cellular phone add-on camera to the Internet 
using an ATmega32 microcontroller and an ENC28J60 Ethernet controller. 
The compact system’s hardware can fit in a matchbox (1.25² × 1.88²).

http://www.circuitcellar.com/avr2006/winners/DE/AT2616.htm
http://avr.auctionant.de/avrETH1/index.html

von Stefan (Gast)


Lesenswert?

kaOS mit einem TCP/IP Stack aufblasen... hängt davon ab, ob dann der 
Trick von kaOS noch funktioniert, mit dem es sich jetzt schon als 
grösseres Programm in den Bootloaderbereich und spezielle Flash-Regionen 
quetscht.

von Kai S. (Firma: ZeuSWarE GmbH) (zeusosc)


Angehängte Dateien:

Lesenswert?

sooo:
brcs,brlo,breq,brmi,brvs,brlt,brhs,brts,brie,brcc,brsh,brne,brpl,brvc,br 
ge,
brhc,brtc,brid
mov,and,eor,or,ldi,sec,sez,sen,sev,ses,seh,set,sei,clc,clz,cln,clv,cls,c 
lh,
clt,cli,andi,cbr,rjmp,subi,sbr,ori,tst,rol,adc
das sind 48 von ca. 110 statements,...
also faaast die hälfte
654 bytes groß, das kann ich aber noch reduzieren,...

@stefan:
ich muss noch a bissl warten bis der stuff von segor hier ist,. dann 
schau ich mir das mal an,.. thx

@peter:
http://www.ureader.de/message/601099.aspx

von Kai S. (Firma: ZeuSWarE GmbH) (zeusosc)


Lesenswert?

sooo,. die ds80c400 samples sind doa,.. hat jemand ne 
minimalbeschaltungsbild mit übertrager?
grüüüße

von Kai S. (Firma: ZeuSWarE GmbH) (zeusosc)


Lesenswert?

also aufbau steht,.. nüx läuft, 3,3V, Ponyprog kann beschreiben, Aber 
uart sagt nüx, fuses:CKopt,cksel3..1 sind gesestzt, 8mhz,..
Bevor ich das isolationsmodul von halo, den flash und den Enc28j60 
dazugelötet habe lief der aufbau,
betriebsspannung 3V3
ich habe mich an den aufbau von avreth1 orientiert,
die kondis der Vdd.. (jeweils 100n gegen gnd) weggelassen, da kein PoE 
die entsprechende beschaltung auch weggelassen,
der aufbau saugt rund 1,7W also rund 500mA,..
kann mir da einer vlt helfen? bitte bitte,..
grüüße

von Kai S. (Firma: ZeuSWarE GmbH) (zeusosc)


Lesenswert?

Beitrag "Halo Iso.mod als Eagle.lbr hier"
hier nochmal die eagle lib für den halo mag,..

von Peter D. (peda)


Lesenswert?

Kai Scheddin wrote:

> kann mir da einer vlt helfen? bitte bitte,..

Wenn Du mal beschreiben würdest, wovon Du da eigentlich redest.

Und vor allem mit nem bischen Satzbau und Beachtung der Schreibweise, 
das man es auch lesen und verstehen kann.
Aber mit solchen irgendwie hingekotzten Wortbrocken kann keiner was 
anfangen.


Wenn es sich um Fragen zu ner Schaltung handelt, könnte ein Schaltplan 
ungemein nützlich sein.
Aber dann bitte so, daß ihn auch jemand lesen kann, der nicht Dein 
Spezialschaltplanprogramm hat.


Peter

von Kai S. (Firma: ZeuSWarE GmbH) (zeusosc)


Lesenswert?

,..hmm sry das ich mich so unverständlich ausgedrückt habe:
(ausserdem habe ich kein spezialschaltprog, ich nutze eagle :P )
also, thema ist bekannt, nun habe ich (endlich):
enc28j60, at45DB161d-SU, HALO isolation module TG42 1406N1,
und eine stinknormale 8p8c buchse,
an folgenden schaltplan habe ich mich orientiert:
http://avr.auctionant.de/img/avrETH1_schematic_fullsize.png
(avreth1, siehe forum)
wie gesagt, da ich kein PoE benutze habe ich die diode D1 und die 
condensatoren c7-c11 weggelassen,

ist das soweit verständlich?
grüüße


von Peter D. (peda)


Lesenswert?

Kai Scheddin wrote:
> (ausserdem habe ich kein spezialschaltprog, ich nutze eagle :P )

Nun, das ist doch eines.

Ich benutze ein anderes und wenn ich davon was posten will, mach ich 
einfach PDF draus.


Es mag vielleicht Deinem Ego streicheln, wenn Du voraussetzt, daß alle 
anderen überhaupt nichts anderes zu tun haben, als sich alles zu merken, 
was Du in diesem Thread mal geäußert hast, aber wundere Dich nicht, wenn 
dem eben nicht so ist.

Ich verliere schnell die Lust, wenn ich erstmal überlegen muß, was die 
einzelnen Worte (z.B. "sry") bloß bedeuten sollen.

Wie alt bist Du eigentlich, wenn die Frage erlaubt ist ?


Peter

P.S.:
Einen Schaltplan nachzubauen ist o.k., wenn man keinen eigenen hat.
Aber auf Bauteile zu verzichten, ohne zu wissen warum, würde ich nicht 
machen.

von nix (Gast)


Lesenswert?

>P.S.:
>Einen Schaltplan nachzubauen ist o.k., wenn man keinen eigenen hat.

>Aber auf Bauteile zu verzichten, ohne zu wissen warum, würde ich nicht
>machen.
exakt... zumal die schaltung bzw die von Kai "wegoptimierten" Bauteile
nix mit poe zu tun haben...
guck mal ins Datenblatt vom enc. bzw generell 100nF an jedem 
Spannungsversorgungspin
sind Pflicht...

nix

von Kai S. (Firma: ZeuSWarE GmbH) (zeusosc)


Lesenswert?

Danke für die schnelle Antwort Herr Dannegger,

ich bedaure zutiefst das sie die gegenwärtige Mundsprache nicht 
beherschen, und bin zukünftig bemüht diese zu umgehen.
(sry, engl. von sorry, bedauern; rgds,engl. von regards, empfehlung oder 
grüße; thx, engl. von thank you, danke; k,engl. von ok bzw. okay, in 
Ordnung,.... etc etc. )

>>Each VDD and VSS pin pair should have
>>a 0.1 μF ceramic bypass capacitor placed as close to
>>the pins as possible.
>>Relatively high currents are necessary
>>to operate the twisted pair interface, so all wires
>>should be kept as short as possible and reasonable
>>wire widths should be used on power wires to reduce
>>resistive loss.

in Ordnung, das habe ich übersehen, sie dienen als resonatoren bzgl. der 
TOUT+- und TIN+- Leitung.

Dennoch wundert mich das der ATMega32-16PU nÜx tut, dieses Problem wird 
ja vlt. durch das anlöten diverser Kapazität von magischer hand gelöst 
sein g

Nein, jetzt mal ernsthaft: Danke leuts, werd ich gleich mal anlöten.

@Herr Dannegger:
Ne, aber wenn ich einen Thread 'betrete' verschaffe ich mir einen 
kleinen überblick um was es sich handelt, was geschrieben wurde bzw. was 
ich selber mal geschrieben habe, ich résumiere sozusagen, ich bin aber 
für jeden beitrag von Ihnen dankbar, da diese mir öfters geholfen haben.
Mein alter ist wahrlich weder Grund noch Lösung des Problems.

grüüße und danke :)

von Kai S. (Firma: ZeuSWarE GmbH) (zeusosc)


Lesenswert?

Ich hätte nicht gedacht das der Unterschied zwischen MKS und NP0 bzw. 
X7R so groß ist, denn als die vermutung nahe kam das die MKS 
(metallisierte polyester kondensatoren) für den hohen stromverbrauch 
verantwortlich sind, habe ich sie gegen Keramikkondensatoren 
ausgetauscht, und TATA,... der verbrauch sank enorm, nun stellt sich 
aber eine einfache frage
>WIESO? sind mks für einen so hohen stromfluss verantwortlich?

Ich habe mal ein bisschen rumgerechnet und weiß schon mal das es nicht 
der Isolationswiederstand ist,..
Hier das datenblatt:
http://www2.produktinfo.conrad.com/datenblaetter/450000-474999/455008-da-01-ml-WIMA_MKS_02_de-en.pdf
grüüße

von Peter D. (peda)


Lesenswert?

Kai Scheddin wrote:

>>WIESO? sind mks für einen so hohen stromfluss verantwortlich?

Ich vermute eher einen defekten Kondenator oder ne Zinnbrücke.

Die Folienkondensatoren sind etwas hochwertiger, aber auch größer als 
Keramik, gehen tun aber beide.
Man kann auch Tantals nehmen.

Ich versuche auch Kondensatoren immer reichlich zu dimensionieren, also 
für 5V mindestens 10V, besser 16V-Typen.
Gerade moderne Kondensatoren haben kaum Reserven.


Peter

P.S.:
Deine Bandwurmsatzmonster ohne Großschreibung machen es einem schon 
schwerer, sie zu verstehen.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.