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?
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.
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.
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.
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?
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.
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".
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.