Forum: Mikrocontroller und Digitale Elektronik RTOS für ATmega640


von typ (Gast)


Lesenswert?

Hallo,

Ich habe ein ATmega640 Board und such jetzt ein RTOS dafür.

Da ich vor einem halben Jahr mal eine weile mit uC/OS II auf einem 
ATmega128 gearbeitet habe favorisiere ich natürlich jetzt uC/OS II.

Allerdings gibt es nur einen Port für den ATmega128. Ist es 
wahrscheinlich das dieser Port ohne Modifikationen auch auf einem 
ATmega640 läuft?


Falls nicht gibt es dann andere RTOS die quasi "Out of the box" auf 
einem ATmega640 laufen?

von 900ss (900ss)


Lesenswert?

typ schrieb:
> Allerdings gibt es nur einen Port für den ATmega128. Ist es
> wahrscheinlich das dieser Port ohne Modifikationen auch auf einem
> ATmega640 läuft?

Hmmm... ohne es ausprobiert zu haben... ich denke dass das geht.
Die beiden haben ja sogar dasselbe Datenblatt und unterscheiden
sich scheinbar nur in ihren Speichergrößen. Der CPU-Core Registersatz
ist der gleiche. Ich denke es geht.

Woher hast du den 128-er Port für uc/OS-II? Ich hab bisher nur
fehlerhafte gefunden oder nur für alte GCC bzw. uc/OS-Versionen.
Die anderen waren fehlerhaft. Jedenfalls die, die es für den GCC
gibt. Da wurden entweder nicht alle Register gerettet oder die Parameter
beim starten der Taskfunktion wurden nicht richtig übergeben (Task-
Stack wurde falsch angelegt) oder oder oder. Jedenfalls waren
sie buggy.

typ schrieb:
> Falls nicht gibt es dann andere RTOS die quasi "Out of the box" auf
> einem ATmega640 laufen?

Es gibt für FreeRtos einen Port für den ATMEGA324. Den kann man leicht
anpassen, wenn man das Prinzip verstanden hat. Es sind eigentlich
nur Änderungen der Makros für das Retten und Wiederherstellen der
Register notwendig und die Routine zum Erstellen eines Taskstacks
muß angepaßt werden. Dann sollte es gehen. Timertick muß natürlich
auch laufen. Das ist aber das wenigste. Ich habe den 324-er Port
gerade auf den ATMEGA1281 umgebaut und er scheint zu laufen allerdings
hab ich ihn bisher nur sehr grob getestet.

von typ (Gast)


Lesenswert?

900ss D. schrieb:
> Woher hast du den 128-er Port für uc/OS-II? Ich hab bisher nur
> fehlerhafte gefunden oder nur für alte GCC bzw. uc/OS-Versionen.

Ich hab in meiner Hochschule mit uCos auf dem 128-er gearbeitet, weiß 
also nicht wo der Port her ist, ich glaub der Prof. hat den selber 
gemacht. Ich musste immer nur eine Projektdatei laden und die dann 
modifizieren, das war natürlich super bequem für mich :) (nagut vorher 
noch das board an usb anschließen aber das wars dann auch schon :D)

Per Google habe ich einen Port für gcc 3.xx gefunden (auf der 
micrium.com seite), weiß aber nicht ob der geht.

Ich bin morgen wieder an der HS dann werde ich mir das ganze uCos 
betreffende zeug mal kopieren.
Ich weiß jetzt nicht wie es da mit den Urheberrechten aussieht für so 
einen Port, würde dir den natürlich gern zukommen lassen wenn du einen 
funktionierenden brauchst.

von 900ss (900ss)


Lesenswert?

typ schrieb:
> würde dir den natürlich gern zukommen lassen wenn du einen
> funktionierenden brauchst.

Danke, ich würde ihn mir gerne der Neugierde halber ansehen. Ich habe 
mir selber einen gemacht. Der scheint stabil zu funktioneren. Hab ihn 
schon ziemlich gequält. :-)
Wenn du mir den Port schicken darfst, dann poste ihn hier oder unter
bastler ät quantentunnel punkt de
Danke schön.

von typ (Gast)


Lesenswert?

Ok der Port den wir in der HS verwendet haben ist von dort:
http://ee.lut.fi/staff/Julius.Luukko/ucos-ii/index.html
(link geht gerade bei mir nicht), dieser Port war auch auf micrium.com 
verlinkt.

(Weiß aber nicht ob noch Veränderungen vorgenommen wurden an dem Port)


auf jeden fall kennt mein compiler TCCR0, TIFR und TIMSK nicht.
1
*********************************************************************************************************
2
*                                        SETUP THE TICK RATE
3
*
4
* Note(s): 1) OCR0 = CPU_CLK_FREQ / (2 * Prescaler * OC_freq) - 1
5
*          2) The equation actually performs rounding by multiplying by 2, adding 1 and then divising by 2
6
*             in integer math, this is equivalent to adding 0.5
7
*********************************************************************************************************
8
*/
9
10
static  void  BSP_InitTickISR (void)
11
{
12
-    TCCR0  = (/*CS*/ 7) | (/*WGM01*/ 0 << 3) | (/*WGM00*/ 0 << 6);
13
    TCNT0  = 256-(CPU_CLOCK_HZ/OS_TICKS_PER_SEC/1024);
14
    TIFR  |= 0x01;                                                      /* Clear  TIMER0 compare Interrupt Flag                     */
15
    TIMSK |= 0x01;                                                      /* Enable TIMER0 compare Interrupt                          */
16
}

Müssten die Namen für Timer usw. nicht in der avr\io.h definiert sein?

von 900ss (900ss)


Lesenswert?

typ schrieb:
> Müssten die Namen für Timer usw. nicht in der avr\io.h definiert sein?

Sind sie auch. Aber wenn du eine andere CPU wählst, dann haben die 
Register und Bits evtl. andere Namen. Bei dir ist das dann der Fall. Du 
mußt dir das Datenblatt des Controllers schnappen und die richtigen 
Namen ermitteln und dein Programm entsprechend ändern.

Ob der verlinkte Port OK ist, bin ich mit nicht sicher. Ich meine ich 
hatte mal reingesehen und auch einen Fehler entdeckt. Dieser tritt 
allerdings nur auf, wenn man das System überlastet, dann stürzt es ab. 
Das passiert nicht, wenn man es richtig macht. Ich habe den Fehler in 
mehreren Ports auch auf der Homepage Micrium gesehen. Die haben das 
nicht ausreichend getestet. Macht keinen guten Eindruck.

von typ (Gast)


Lesenswert?

ok hab den Fehler gesehen, und zwar das minus vor TCCR0  =....

(Sowas passiert wenn man seine Teamspeak mute-Mikrofon Taste auf 
Numpad-Minus legt xD)

Hab mir jetzt erstmal FemtoOS installiert, da benötigt ein einfaches 
Testprogramm nur 3% Flash (uCos2 13%) und 0,9% RAM (uCos 59,5% !!!).

Wie es ist kann ich noch nicht sagen, hab noch nix programmiert aber es 
läuft zumindest schon mal "out of the box".

von 900ss (900ss)


Lesenswert?

typ schrieb:
> 3% Flash (uCos2 13%) und 0,9% RAM (uCos 59,5% !!!)

Du kannst das uc/OS recht schmal bekommen, wenn du dich mit der 
Konfiguration befasst und damit mal spielst. Auch die Stackgrößen wollen 
überlegt sein. Allerdings ist Femto-OS mit Sicherheit kleiner, das 
glaube ich auch.

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.