- C:\> cd \OSA\test\test1
- C:>picc --asmlist --chip=12F675 -D_PIC12 -I\OSA -I. test1_osa.c \OSA\osa.c
- HI-TECH PICC COMPILER (Microchip PICmicro) V9.60PL2
- Copyright (C) 1984-2008 HI-TECH SOFTWARE
- licensed for evaluation purposes only
- this licence will expire on Fri, 30 Jan 2009
- test1_osa.c
- \OSA\osa.c
- Memory Summary:
- Program space used DAh ( 218) of 3FFh words ( 21.3%)
- Data space used 11h ( 17) of 40h bytes ( 26.6%)
- EEPROM space used 0h ( 0) of 80h bytes ( 0.0%)
- Configuration bits used 0h ( 0) of 1h word ( 0.0%)
- ID Location space used 0h ( 0) of 4h bytes ( 0.0%)
Fórum témák
» Több friss téma |
Fórum » PIC FreeRTOS Hogyanok...
Igen, a PIC18F utasításai 16 bit szószélességűek. A Linker meg a Memory gauge jószág kiírásai kozott láttam egy bájt diszkrepanciát. Erre mondtam, hogy biztosan átugrottáka 13-a sorszámú bájtot...
Komolyabbra fordítva a szót: Néhány RTOS összehasonlítása (Thread-Metric benchmark) olvasható ebben a cikkben. Egy kicsit elszomorító, hogy a FreeRTOS több tesztben is alulmarad, ugyanakkor öröm, hogy a cikk alapján egy újabb nyilforrású (ha jól emlékszem BSD licensz?) RTOS is előkerült. A Microchip MCU-k közül PIC24/dsPIC33-ra portolták.
Csak a lényeget felejtettem le: TNKernel a neve...
Ismét okosabb lettem néhány nappal (meg öregebb is...)! KIderült,hogy az MPLAB IDE Tools menüjében mit csinál a RTOS Viewer menüpont. Ez arra jó, hogy az MPLAB által támogatott RTOS-okkal készített programok debug-olásakor mindenféle okosságokat mutasson. Például a taskok állapotát, a timerek állapotát, a várakozó sorok,szemaforok, mutexek és egyebek listáját (egyszóval bizonyos rendszerváltozók strukturált és interpretált értékét.
A jelenleg támogatott rendszerek:
Eredetileg nincs a listán, de a demo mellé az MPLAB RTOS Viewer plugint is adja az AVIX, tehát gyakorlatilag az is támogatott. (fizetős, demo van) A mellékelt képen az RTOS Viewer ablak látható, s az, hogy az AVIX demo2 programjában a taskok (vagy programszálak) hogyan váltogatják egymást. A D0 bit magas állapota a rendszer tétlen állapotát jelzi, a D1,D2,D3 bitek pedig három bugyuta task ténykedését mutatja. Az AVIX a Microchip vezérlőiből a PIC24,dsPIC, és PIC32 vezérlőket támogatja. A demováltozat néhány paraméterében korlátozott...
Esetleg linkeket küldenél???
Kíváncsi vagyok az RTOS tulajdonságaira.
Küldhetek, persze. Bár nekem sem kevesebb munka beírni a keresőbe, hogy pl. CMX RTOS, stb....
CMX AVIX Micrium uOS-iiMicrium uOS TNKernelTNkernel ThreadX embOS FreeRTOS Erika Enterprise (Megjegyzem, hogy az Erika Enterprise rendszert négyszeri nekifutásra sem sikerült úgy feltelepíteni, hogy lefordítsa a saját demóját. Windowsos környzetben Linux-ot játszik Cygwin-nel, de behülyül a szóközt tartalmazó könyvtárnevektől, mint pl. a Program Files. Lehet, hogy angol vagy olasz windows-sal jobban menne?) Forráskód a Micrium uOS-II, TNKernel és FreeRTOS-hoz van, a többi többé vagy kevésbé lebutított demo, belinkelhető bináris könyvtárral.
Kicsit megzavarodtak a linkek, de már nem tudom javítani a szépséghibákat...
Letölthető az embOS demója is, csak nem az általam korábban megadott linken kell keresgélni, hanem ide kell kattintani!
A letöltött és kicsomagolt demóban a Release.html tartalmazza azt az információt, hogy a demó milyen korlátozásokat tartalmaz: Az első 15 percben akárhány taszk indítható, de a türelmi idő leteltével hibajelzéssel leáll a rendszer, ha háromnál több taszkot hoztunk létre. Ez is csak bináris könyvtárakat biztosít, a Salvohoz hasonlóan százféle változatban (kis- és nagy memóriamodel, rendszer-szolgáltatások, debug-olás stb. függvényében más-más könyvtárak kell használni). Az olcsó fejlesztői változat (csak bináris) 2500 Euró, a forráskódot is felfedő változat ára 5000 Euró.
Egy USB-RS232 konverter beszerzése után visszatértem a Micrium uC/OS-II demójának nézegetéséhez. Van hozzá ugyanis egy uC/Probe nevű Windowsos alkalmazás (30 napos próbaváltozat tölthető le a Micrium honlapjáról), ami a soros porton kommunikál az Explorer16 kártya mikrovezérlőjén futó uC/OS-II demoval.
Ennek a kommunikációnak az a lényege, hogy a demo firmware-be épített satisztikai és kommunikációs modulok segítségével FUTÁS KÖZBEN ki lehessen kérdezni az RTOS rendszert a pillanatnyi állapota felől (mit csinálnak a taszkok, hány taszkváltás volt, mekkora a CPU terheltsége, hogy néz ki a RAM felhasználás, és a többi...). Az eszme zseniális, fejlesztés közben biztosan hasznos, de a kivitelezése helyenként gagyi. A kommunikációhoz Windows oldalon szükséges program (uc/Probe) tulajdonképpen saját lekérdezések és riportok összeállítására alkalmas program, a RAD programtervezéshez hasonlóan helyezhetünk el grafikus vagy táblázatos elemeket. A mellékelt demo futtatásához el kell indítani a uC/Probe programot, kattintani kell a bal felső sarokban elhelyezkedő kerek gombra (afféle File menü...). Ott az Open gombra kattintva betölthetjük az OS-Probe-Workspace.wsp állományt, ami a Program Files/Micrium/uC-Probe/Target/Plugins/uCOS-II/Workspaces mappában van eldugva. Rögtön utána egy hozzátartozó .elf állományt is vár a program, ez pedig nem más, mint az Explorer16 demóprogramja. Ez nálam a c:\Micrium_P24\Software\EvalBoards\Microchip\PIC24FJ18\MPLAB_C30\OS-Probe\Output mappa mélyén található. Ha ez megvan, ismét a bal felső sarokban kerek gombra kattintva, a felbukkanó panel jobb alsó sarkában találjuk meg az Options menüt. (Hogy mit összekerestem,mire megtaláltam!!!). Ezen be kell állítani az RS-232 kapcsolat tulajdonságait (38400 Baud, 8 bit, NP, 1 STOP), de külön be kell állítani azt is, hogy a kommunikáció az RS232 vonalon zajlik (van erre egy rádiógomb). Ezután a Play gombbal (bal felső sarok, zöld háromszög) elindítható a kommunikáció, s az egyes paneleken sorra megjelenek és frissülnek az adatok. (lásd mellékelt képek) Megpróbáltam feltenni egy grafikont, s megjeleníteni benne a CPU terheltség időbeli változását. A grafikon automatikusan skálázta magát, ahogy változtak az adatok, de mindig csak ráírta a tengelyre az új skálát, sohasem törölte a régit. Néhányszor behalt a Windows-os uC-Probe. Ezek közül volt,ami az USB-soros konverterre fogható, de volt, amikor egyszerűen a File menüre történő kattintás után exitált a program. A fentebb említett grafikon frissítése közben a kommunikáció rendszeresen megszakadt (ezt írta ki alul), majd automatikusan újra kapcsolódott. Rendszergazdai jogosultságok nélkül el sem indult (csak a splash képet mutatta meg). Az is idegesítő, hogy a report lapok nem férnek ki a képernyőre (pedig a legkisebb képernyőfelbontást állítottam be), s minden lapváltáskor a lapok ALJÁRA ugrik, a hol csak a uC/OS-II logója látszik. Na, ezek miatt tartom egy kicsit gagyinak a kivitelezést. Pedig láthatóan sok munka fekszik benne... Idézet: „Megjegyzem, hogy az Erika Enterprise rendszert négyszeri nekifutásra sem sikerült úgy feltelepíteni, hogy lefordítsa a saját demóját.” Hosszas nyomozás után úgy tűnik, hogy nem az Erika Enterprise telepítésével van baj, hanem az a bibi, hogy a Microchip fordítóm túlságosan friss neki, s ezzel nem tud szót érteni (máshol vannak az include állományok a Microchip\MPLAV C30\support bugyraiban).
A Microchip számos RTOS fejlesztést reklámoz a honlapján, melyek közül a Rowebots DSPnano és UNISON óperenciás rendszerei most 1 dollárcentért ($0.01) megvásárolhatók forráskóddal és llicensszel.
Mindkettő afféle mini-tini Linux-nak mondott POSIX kompatibilis rendszer. A DSPnano PIC24, dsPIC30 és dsPIC33-hoz való. Az Unison pedig a PIC32-höz való. Én most vettem egy DSPnano licenszet (2 Ft-ot talán megér...) melynek előnyei között azt emlegetik, hogy többszálú alkalmazások írását támogatja (ha valakinek ismerős Linuxból: pthreads), s hogy kiterjedt I/O könyvtár van hozzá SPI, Grafika, Touch Screen, TCP/IP, UDP, A/D,D/A, PWM, CAN, CANopen, USB és I2C kezelésére.
Hali!
Belelkesültem megvettem, feltelepítettem, de hiányzik a futtatható exe fájl, amit a start/programok közé berak. Ami username/passwordot küldtek a progival, az mire kell? nem kérte telepítés közben Idézet: „Belelkesültem megvettem, feltelepítettem, de hiányzik a futtatható exe fájl, amit a start/programok közé berak.” Nem is tudom, hogy mit futtatna, hiszen csak forrásfájlok, MPLAB projekt fájlok, dokumentáció, és néhány előre lefordított programkönyvtár a csomag tartalma. Ezeken kívül csak az ingyenesen letölthető MPLAB és a C30 kell hozzá a Microchip-től. Én nem rendszergarázdaként használom a gépet (csak telepítéskor), így nálam (szerencsére) meg sem jelenik a menüben...
Ja, a jelszó nem tudom, mire kell(ett). Lehet, hogy régebben (amikor még PÉNZÉRT adták) a letöltéshez meg kellett adni.
PThreads témakörben itt található egy rövidebb (26 oldalas) bevezető:
PthreadTutorial.pdf Emitt pedig egy kimerítő (alig 370 oldalas) olvasmány.
a Micrium uC/OS-II RTOS rendszeréhez is találtam egy jó könyvet! Jean J. Labrosse: MicroC OS II - The Real Time Kernel
A Google Books-nál bele lehet olvasni, számos helyen meg lehet vásárolni, néhány szakkönyvtárból pedig ki lehet kölcsönözni. Bár a könyvben leírtak nem a PIC programozásáról szólnak, a rendszer filozófiájáról és a szinkronizáláshoz, kommunikációhoz használt eszközeiről hasznos információt talál benne az olvasó.
Sok kínlódás és némi fórumozásután sikerült kideríteni, hogy az Evidence Erika Enterprise RTOS 1.4.3 verziójának mi a baja a legújabb MPLAB C30 3.11b fordítóval: máshol keresi az include fájlokat (pontosabbana Microchip tette át máshová azokat).
1. Megoldás: régebbi verziójú fordító felrakása 2. Megoldás: oda kell másolni a hiányzó fájlokat, ahol az Erika RT-Druid-ja keresi. Nevezetesen a C30/Support/inc/dsPIC33/h és inc könyvtárát eggyel fentebbi szintre kell másolni (valójában lehet, hogy csak a p33FJ256GP710.inc hp33FJ256GP710.h fájlok kellenek). Hasonlóan a libp33FJ256GP710-elf.a állományt is eggyel feljebbi szintre kell másolni: C30/lib/dsPIC33F-ből a C30/lib-be. Végül egy sikertelen Build project után a p30f2010.inc állományt be kel csempészni a projektbe a workspace/testdemo/Debug/frommchp könyvtárba (a crt0.s, valamint a fentebb már említett p33FJ256GP710.inc, p33FJ256GP710.h fájlok mellé). Fenti módosításokkal sikerült lefordítani az Explorer 16-hez való Device Demo mintaprogramját. Sok köszönet ugyan nem volt benne, mert az LCD-re zagyvaságokat írt. Valószínűleg az LCD-re való íráskor használt késleltetéseket kellene módosítani, denem volt kedvem játszani. Jó hír, hogy a következő kiadásban (1.5.0) az Oil Compiler forráskódját is nyitottá teszik, s talán megoldható a két fordítás (OIL-ból C kód, majd a C kód lefordítása az MPLAB-bal) különválasztása, ami megoldja a fentihez hasonló szerencsétlenkedéseket. Én egyelőre kevés lehetőséget látok a debug-olásra, s RTOS nézegető sincs az Erikához. Ugyanakkor a forráskód nyitottá tétele megérdemel egy nagy piros pontot.
Új RTOS a láthatáron!
OSA – кооперативная многозадачная операционная система реального времени для микроконтроллеров фирмы Microchip - azaz: OSA - kooperatív, többfeladatos, valósidejű rendszer a Microchip mikrovezérlőihez. Ízlelgessük ezeket a veretes cirill betűket! Annál is inkább, mert a dokumentáció jelentős része és a forráskód megjegyzései egyelőre csak orosz nyelven vanak meg. Az OSA-RTOS kooperatív (tehát nem preemptív...) többfeladatos RTOS, ami elvileg PIC12, PIC16, PIC18, PIC24 és dsPIC-en is használható. A kisebbeken HT PICC, a nagyobbakon a Microchip C fordítójával fordítható. Az OSA szabad forráskódú rendszer, ingyenes alternatívája lehet tehát a Hi-Tech Salvo-nak. A multitaszkos program létrehozása elvileg egyszerű: az új projektben létrekell hozni egy OSAcfg.h állományt, amiben a rendszer konfigurációja beállítható. A forráskód elején pedig be kell csatolni az osa.h állományt. A főprogram váza pedig így néz ki:
A rendszerhívások számos szinkronizációs, időzítési és üzenetküldési funkciót biztosítanak. Linkek:
Hitech C-vel megpróbálhatod lefordítani hozzá az OSA-RTOS-t. Ha nagyon kell...
Idézet: Itt található egy OSA mintaprojekt PIC10F222-re!„PIC10-re nincs még RTOS?” Пример использования OSA: 3LEDS_PIC10F Négy gombbal három ledet lehet vilogtatni, 4 sebességfokozatban.
Hello!
I am autor of RTOS OSA. If anybody interested, OSA documentation translated in english: http://wiki.pic24.ru/doku.php/en/osa/ref/intro All comments in source code now in english too: http://wiki.pic24.ru/doku.php/en/osa/ref/download/intro I hope OSA will be usefull for someone. Best regards, Victor Timofeev. Russia, SPb. (Sorry, I don't speak hungarian)
Hi Victor,
Thank you for your efforts in the development of OSA, and also for this message about the good news!
Nem triviális az OSA fordítása PIC12/PIC16-ra, legalábbis nekem sehogy sem akart összebarátkozni az MPLAB 8.15a és a Hi-Tech PICC STD V9.60PL2. Ezért az MPLAB-ot hanyagoltam, és nyitottam egy DOS... akarom mondani cmd parancsablakot.
OSA/test/test1 mintapélda fordítása: Magyarázat: ~~~~~~~~ --asmlist ha kíváncsiak vagyunk,hogy mit fordított a C --chip=12F675 a PIC12F675-re fordítottam -D_PIC12 HiTech PICC és PIC12 esetén ez kell megadni -I\OSA -I. Az include könyvtárak test1_osa.c \OSA\osa.c A forrásfájlok
Added example of RTOS OSA usage to generate 4-channels polyphonic melody on PIC16F628A. Source, scheme and sound example here:
http://wiki.pic24.ru/doku.php/en/osa/ref/appendix/quartet Program consists of 5 tasks: conductor and four musicants. I think it will be interesting to beginners. Best regards, Victor Timofeev.
Sziasztok, én is gondolkodtam azon, hogyan lehetne a PIC-ben több programot párhuzamosan futtatni.
Az ún. cooperatív multitasking programok valójában nem állnak másból csak az egyes taskokat hívó szubrutinhívásokból. Ebben az esetben ráadásul úgy kell megírni az egyes taszkokat, hogy azok egy bizonyos időn belül visszaadják a vezérlést, különben a "taszkváltás" is késni fog. Ha sima végtelen ciklusos programot írunk abból ugye sosem fog visszakerülni a vezérlés. Hát akkor csináljunk preemtív multitaszkot. Először úgy tünt ezt nem lehet megoldani egy 18f-es PIC-el, mert az rendben van hogy a megszakítás elveszi a vezérlést a főprogramtól, de a megszakítás után azt utána egy másik programnak kell visszaadni. Azután megnéztem a PIC-ek veremkezelő regisztereit, és rájöttem hogy ez simán megvalósítható. Csináltam egy kis ASM mintaprogramot, ami 3 ledet villogtat egymástól eltérő sebességgel, közben meg a soroson bejövő adatokat minimális módosítással továbbküldi. Persze egy összetettebb programnál illik menteni/visszaállítani a BSR és FSR regisztereket is. Ha valamelyik taszknak nincs szüksége a procira a továbbiakban, 2 utasítással rá lehet bírni az ütemezőt a taszkváltásra. Ha sleep-el a taszkok hurokjainak a végén elküldjük a procit aludni azzal meg energiatakarékos alkalmazást készíthetünk. Még nem gondolkodtam azon hogyan lehetne C-re átvinni, de azt kell kitalálni hogy hogy a taszkhoz tartozó FSR-eket milyen kezdőértékre állítsuk be. C-ben ugye így csinálják a szoftveres vermet, amivel a függvényhívások során a paraméterátadások történnek, valamint a lokális változók is itt tárolódnak. Az fontos hogy mindegyik taszknak külön verme legyen mert anélkül csúnyán egymásba rondítanának. A szubrutinhívásokat sem lehet olyan nagy mélységig egymásba ágyazni, mert a hardver-verem 31-es mélységén is osztozni kell a taszkoknak. Sajnos a vermek egymásba csordulását, ezáltal az egymásba rondítást nem lehet figyelni, ezért a taszkokba olyan programot kell írni amikben nincsenek túl mélyen egymásba ágyazott függvények. BUÉK mindenkinek Idézet: „Ha sima végtelen ciklusos programot írunk abból ugye sosem fog visszakerülni a vezérlés.” Visszakerül az, ha minden ciklusba beiktatunk egy OS_Yield() utasítást, vagy egy késleltetést,vagy egy várakozást egy eseményjelzőre. Persze, necces dolog, ebben igazad van. Idézet: „Hát akkor csináljunk preemtív multitaszkot.” Ez szép kezdeményezés! Külön erénye a munkádnak, hogy assembly nyelven még nem láttam hasonló programot PIC-re. Idézet: Érdemes megnézni a hasonló célú, C-ben írt programokat. PIC18-ra az alábbiakat tudom ajánlani:„Még nem gondolkodtam azon hogyan lehetne C-re átvinni”
Idézet: „A szubrutinhívásokat sem lehet olyan nagy mélységig egymásba ágyazni, mert a hardver-verem 31-es mélységén is osztozni kell a taszkoknak.” Ez egy érdekes probléma, mert preemptív multitaszkos környezetben (amikor egy szubrutin közepén is megszakadhat a futó taszk) nem garantálható {1}, hogy helyes sorrendben történik a visszatérési címek visszaszedegetése, tehát a hardver-vermen való osztozkodást nehezen tudom elképzelni.... {1} J. J. Labrosse: MicroC/OS-II, The Real Time Kernel c. könyvében említ pl. olyan esetet, amikor az erőforrásokért versengő taskok között megfordul a prioritási sorrend... Idézet: „tehát a hardver-vermen való osztozkodást nehezen tudom elképzelni” Pedig ott van a példában. A verem 0..7 szintje az 1. taszké, a 8..15 szint a 2. taszké és így tovább. Ha megszakítás történik az annak a taszknak a vermét fogyasztja, ami éppen a megszakításkor futott. A probléma az hogy ha az 1. taszk veremhasználata eléri a 8. szintet, akkor összeomlasztja a 2. taszkot. A PIC18-assal azért nem lehet taszkvédelmeket és egyéb nyalánkságokat összehozni, mert nem erre készült, de sztem nem is ez a cél. |
Bejelentkezés
Hirdetés |