 |
www.elektronik.si Forum o elektrotehniki in računalništvu
|
Poglej prejšnjo temo :: Poglej naslednjo temo |
Avtor |
Sporočilo |
dragoon Član


Pridružen-a: Čet 03 Maj 2007 21:51 Prispevkov: 452 Aktiv.: 2.05 Kraj: Trojane
|
Objavljeno: Sre Avg 27, 2008 10:39 pm Naslov sporočila: freeRTOS in codevision |
|
|
Z avrjem imam namen narest eno večjo aplikacijo (vsaj zame), uporabil bi nek RTOS. Nekaj sem gledal freeRTOS, pa nekak ne najdem porta za codevision, sem pa skoraj 100% da je to že nekdo naredil. imam prav, ali naj se vržem v predelavo headerjev za GCC oz IAR? ali obstaja kak drug podoben rtos za CV?
to bo tudi moj prvi projekt z OSom, pa si z določenimi stvarmi še nisem čisto na jasnem;
sheduler uporablja nek timer interrupt, ta pa potem nalaga na stack naslove posameznih taskov, dela time sliceing?
taski so v obliki posameznih funkcij, kako jih najavim shedulerju?
globalne spremenljivke so še vedno globalne, vidne vsem taskom? oz kako prenašat podatke med taski?
kaj se zgodi če se task ne izvede do konca, ga prekine naslednji? ko spet pride na vrsto se izvaja od tam naprej (če se, kako je z variablami), ali od začetka? če mu nastavim večjo prioriteto dobi na voljo več time sliceov?
zaenkrat hvala, verjetno je večiino vprašanj nesmiselnih, pa vendar bodo odgovori verjetno marsikomu koristili.
_________________ LP, Mitja |
|
Nazaj na vrh |
|
 |
Glitch Član

Pridružen-a: Pet 07 Apr 2006 11:40 Prispevkov: 1477 Aktiv.: 6.32
|
Objavljeno: Sre Avg 27, 2008 11:15 pm Naslov sporočila: |
|
|
Codevison AVR in freertos? eeeeeh... ne vem no.
Preden se lotiš tega projekta si preberi dokumentacijo na freertos strani, fundamentals. Če se ne motim in me spomin ne vara je ravno za AVR avtor napisal članek, kako zadeva deluje. Ker ga na freertos.org strani nisem našel, sem ga poiskal na avrfreaks: http://www.avrfreaks.net/modules/FreaksArticles/files/14/Multitasking%20on%20an%20AVR.pdf
Dolžan si mi pivo.
|
|
Nazaj na vrh |
|
 |
vilko Član



Pridružen-a: Pet 13 Feb 2004 10:26 Prispevkov: 3360 Aktiv.: 14.18 Kraj: Dragomer
|
Objavljeno: Čet Avg 28, 2008 7:21 am Naslov sporočila: Glitch |
|
|
Glitch,
Kot je videti, o tem veliko veš, in predvidevam, da imaš tudi izkušnje z RTOS. Ali bi jih prosim malo delil z nami, kaj si vse naredil s tem, kakšne mikroprocesorje si uporabil, in kako si zadovoljen.
Vedno, kadar najdem kako novo pot v svet, popvrašam rad, tiste, ki o tem kaj več vedo, kam ta pot pelje..
Pivo dobiš tudi od mene!
Pozdrav
_________________ Nihče ni za vojno in vsi so za mir,
vsi so za bratstvo, nihče za prepir.
Od same ljubezni vsak čas na granatah
bo vtisnjeno geslo: "Darilo za brata"
Janez Menart |
|
Nazaj na vrh |
|
 |
bolha95 Član


Pridružen-a: Pet 14 Dec 2007 21:33 Prispevkov: 296 Aktiv.: 1.39 Kraj: Križe / Tržič
|
Objavljeno: Čet Avg 28, 2008 12:22 pm Naslov sporočila: Re: Glitch |
|
|
vilko je napisal/a: |
Glitch,
Kot je videti, o tem veliko veš, in predvidevam, da imaš tudi izkušnje z RTOS. Ali bi jih prosim malo delil z nami, kaj si vse naredil s tem, kakšne mikroprocesorje si uporabil, in kako si zadovoljen.
Vedno, kadar najdem kako novo pot v svet, popvrašam rad, tiste, ki o tem kaj več vedo, kam ta pot pelje..
Pivo dobiš tudi od mene!
Pozdrav |
Jaz se tudi pridružujem tistim, ki bi radi zvedeli kaj na temo freeRTOS
LP
Robi
..
|
|
Nazaj na vrh |
|
 |
dragoon Član


Pridružen-a: Čet 03 Maj 2007 21:51 Prispevkov: 452 Aktiv.: 2.05 Kraj: Trojane
|
Objavljeno: Čet Avg 28, 2008 2:16 pm Naslov sporočila: |
|
|
zakaj naj ne bi šlo v codevisionu? zaradi 8bitnika, ali ti samo codevision smrdi? no, hvala za .pdf, vidim da bo narest rtos zame kar velik zalogaj..
komunikacija med taski, queue, "semaforji", to se dela z globalnimi spremenljivkami?
kam gcc shranjuje variable? CV jih, kolikor mi je znano globalne v registre, lokalne pa v ram (stack?) ?
kako dobi pointer (naslove) taskov? kako ve kaj naložit v program counter?
uff, ogromno stvari mi še ni jasnih. kaj res nihče ne uporablja CV? mislim da ni tako drag da si ga firme ne bi mogle privoščit, omogoča pa dosti več od free alternativ.
_________________ LP, Mitja |
|
Nazaj na vrh |
|
 |
alessio Član

Pridružen-a: Pon 04 Dec 2006 8:39 Prispevkov: 363 Aktiv.: 1.61 Kraj: Ljubljana
|
Objavljeno: Čet Avg 28, 2008 3:18 pm Naslov sporočila: |
|
|
dragoon je napisal/a: |
zakaj naj ne bi šlo v codevisionu? zaradi 8bitnika, ali ti samo codevision smrdi? |
Razlog je v različnih nastavitvah toolchain-a, linker scripte, makefilei...
Sigurno se da zadevo portat na CV, ki pa ni podprt out-of-the-box.
Na razpolago imaš demo programe za GCC in IAR toolchain.
Za začetek lahko poizkusiš IAR, ki je mogoče bolj user friendly s svojim
fancy GUI. Demo verzija podpira ali 16 ali 32kB exe kode. Z GCC toolchainom
te omejitve seveda nimaš. Poigraj se s katero koli od teh dveh možnosti,
potem pa se lahko lotiš portanja na CV.
Citiram: |
komunikacija med taski, queue, "semaforji", to se dela z globalnimi spremenljivkami?
|
Sort of. Z raznimi API funkcijami si za te zadeve rezerviraš prostor na heap memoryju.
Citiram: |
kam gcc shranjuje variable? CV jih, kolikor mi je znano globalne v registre, lokalne pa v ram (stack?) ? |
GCC ni v tem nič drugačen od ostalih C prevajalnikov. Globalne in statične spremenljivke imajo konstantno lokacijo v ramu, za lokalne pa se sproti dodeli
mesto na stack-u. Pri RISC procesorjih pa se vsa obdelava na spremenljivkah dogaja v registrih, tako velja za globalne in lokalne spremenljivke.
Citiram: |
kako dobi pointer (naslove) taskov? kako ve kaj naložit v program counter? |
Vse je razloženo v tistem PDF-ju, ki ti ga je poslal Glitch. Odogovor je TCB (Task Control Block). Zavihaj rokave,
preberi PDF in www.freertos.org, zalaufaj in razumi kak demo primer. Vsi so zelo
dobro dokumentirani.
Citiram: |
uff, ogromno stvari mi še ni jasnih. kaj res nihče ne uporablja CV? mislim da ni tako drag da si ga firme ne bi mogle privoščit, omogoča pa dosti več od free alternativ. |
Odvisno koga vprašaš, kaj ti več omogoča. Sicer pa je od komercialnih toolchain-ov za AVR-je sigurno bolj razširjen IAR, zelo zanimiv pa je tudi Rowleyjev Cross Studio.
|
|
Nazaj na vrh |
|
 |
bolha95 Član


Pridružen-a: Pet 14 Dec 2007 21:33 Prispevkov: 296 Aktiv.: 1.39 Kraj: Križe / Tržič
|
Objavljeno: Čet Avg 28, 2008 7:03 pm Naslov sporočila: |
|
|
Kakšne imate pa kaj izkušnje z Eclipse IDE in plug-inom za WinAVR. Zadevo sem si samo instaliral in na hitro preletel, ker ni bilo časa, ampak mi deluje dokaj na nivoju. Glede na to da sam upravlja z makefile, kakšna je praktičnost uporabe z freeRTOS?
...
|
|
Nazaj na vrh |
|
 |
dragoon Član


Pridružen-a: Čet 03 Maj 2007 21:51 Prispevkov: 452 Aktiv.: 2.05 Kraj: Trojane
|
Objavljeno: Ned Avg 31, 2008 9:21 am Naslov sporočila: |
|
|
alessio tnx!
no, našel sem še nekaj stvari, csRTOS, debata na avrfreaks, tukaj sta dva,...
zaenkrat mi zgleda csrtos še najbolj enostaven in mislim da se bom začel igrat kar s tem.
_________________ LP, Mitja |
|
Nazaj na vrh |
|
 |
dragoon Član


Pridružen-a: Čet 03 Maj 2007 21:51 Prispevkov: 452 Aktiv.: 2.05 Kraj: Trojane
|
Objavljeno: Ned Avg 31, 2008 10:15 pm Naslov sporočila: |
|
|
prosim za malo pomoči v asembliju. Lotil sem se predelave csRTOS za codevision. avtor trdi da je to sicer že naredil, da deluje, kode pa ni objavil. trdi tudi da je cv hroščat,... vendar mislim da vse to sledi iz nepoznavanja compilerja. težave so bile s pointerji na funkcije v flashu, pa z načinoim dostopa do flasha. cv ima vse to elegantno rešeno, pri gcc rabiš neke funkcije..
no problem mi predstavlja koda za shranjevanje restoranje taskov, shraniti moram stack pointer in return adress (adr).
koda je za gcc taka:
Koda: |
U8 saveTask(U16 adr) { // saves data stack pointer and return address
#asm("mov r26,r24"); // get address of current task
#asm("mov r27,r25");
#asm("pop r24"); // get return address
#asm("pop r25");
#asm("push r25"); // put RA back on return stack
#asm("push r24");
#asm("st x+,r24"); // save RA in taskSpace array
#asm("st x+,r25");
#asm("st x+,r28"); // save data stack pointer
return 0; //
}
U8 restoreTask(U16 adr) { // restores data stack pointer and return address
#asm("mov r26,r24"); // get address of current task
#asm("mov r27,r25"); // this will always be zero on AT90S4433
#asm("ldi r28,0xDF"); // reset return stack pointer
#asm("out 0x3D,r28");
#asm("ld r24,x+"); // get return address
#asm("ld r25,x+");
#asm("push r25"); // note: could use an indirect jump here
#asm("push r24");
#asm("ld r28,x+"); // get data stack pointer
return 1;
}
|
pri cv funkcija prejme parameter iz stacka, vrne pa v R30, R31. kako bi zgornji kodo preoblikoval da bi delovala pravilnov codevisionu? prosim tudi za razlago te kode, ni mi jasno od tretje vrstice dalje; najprej vzame vreednost iz sklada in naloži v r24, r25, potem pa le to naloži (push) nazaj? kaj je s tem dosegel? st x+ ??
prilagam še komentar avtorja o portanju na druge compilerje:
Citiram: |
PORTING csRTOS TO OTHER COMPILERS
Remember that for each task it is necessary for csRTOS to save the stack pointer and the return address. When resuming a task csRTOS resets the stack pointer and recovers the stored return address and jumps to it. It turns out that there are routines in the standard c library to do this: setjmp() and longjmp(). A data type called jmp_buf is defined to hold the stored values. You can code csRTOS entirely in c by using setjmp() and longjmp(), but those routines typically save some or all of the registers, so the buffer space required is more than is necessary for csRTOS.
The csRTOS shortened versions of setjmp and longjmp are called saveTask() and restoreTask(). Both are called with a 16 bit parameter that is the address of the buffer used to store the task state information, and both return a single byte (setjmp and longjmp return integers, but on an 8 bit micro bytes are more efficient).
In order to port csRTOS to another compiler, start by looking at the documentation and the assembly language the compiler generates for setjmp() and longjmp(). Typically the address parameter passed to each routine will be contained in a register pair. The WinAVR compiler uses R24 and R25 for this purpose, the ICC compiler uses R16 and R17, while the Codevision compiler passes parameters on the data stack (the Codevision data stack pointer is R28 and R29). A quick look at the short csRTOS assembly code for these functions should make clear how to proceed. Note that the Codevision compiler has many bugs - I'd not recommend it if something else is available.
With some compilers (including the Codevision compiler) there may be an issue with the constant array of task starting addresses that is used to initialize each task. As a workaround, each task can be initialized in the main routine before multitasking is started:
thisTask = 0;
blinkTask();
thisTask = 1;
clockTask();
thisTask = 2;
randomBlinkTask();
... etc ...
|
preemptive pomeni da se lahko vrne v katerokoli pozicijo v tasku? csrtos ni, torej se vedno vrne na začetek taska?
kodo za tole bom, če bo delala vsekakor objavil, mislim da bo marsikomu prišla prav. rabim le malce pomoči v ASM ^^.
_________________ LP, Mitja |
|
Nazaj na vrh |
|
 |
dragoon Član


Pridružen-a: Čet 03 Maj 2007 21:51 Prispevkov: 452 Aktiv.: 2.05 Kraj: Trojane
|
Objavljeno: Čet Nov 27, 2008 2:20 pm Naslov sporočila: |
|
|
nekaj sem našel, dela na mega16, codevision. menda tudi na icc, sprobal sem samo cv.
probajte ;D
Opis: |
|
 Download |
Ime datoteke: |
pr_rtx.zip |
Velikost datoteke: |
17.01 KB |
Downloadano: |
13 krat |
Opis: |
|
 Download |
Ime datoteke: |
PR_RTX.pdf |
Velikost datoteke: |
84.16 KB |
Downloadano: |
11 krat |
_________________ LP, Mitja |
|
Nazaj na vrh |
|
 |
|
|
Ne, ne moreš dodajati novih tem v tem forumu Ne, ne moreš odgovarjati na teme v tem forumu Ne, ne moreš urejati svojih prispevkov v tem forumu Ne, ne moreš brisati svojih prispevkov v tem forumu Ne ne moreš glasovati v anketi v tem forumu Ne, ne moreš pripeti datotek v tem forumu Ne, ne moreš povleči datotek v tem forumu
|
Uptime: 494 dni
Powered by phpBB © 2001, 2005 phpBB Group
|