abclinuxu.cz AbcLinuxu.cz itbiz.cz ITBiz.cz HDmag.cz HDmag.cz abcprace.cz AbcPráce.cz
AbcLinuxu hledá autory!
Inzerujte na AbcPráce.cz od 950 Kč
Rozšířené hledání
×
    včera 20:11 | Nová verze

    Bylo vydáno Ubuntu 24.04.4 LTS, tj. čtvrté opravné vydání Ubuntu 24.04 LTS s kódovým názvem Noble Numbat. Přehled novinek a oprav na Discourse.

    Ladislav Hagara | Komentářů: 0
    včera 17:44 | Pozvánky

    V pátek 20. února 2025 se v pražské kanceláři SUSE v Karlíně uskuteční 6. Mobile Linux Hackday, komunitní setkání zaměřené na Linux na mobilních zařízeních, kernelový vývoj a uživatelský prostor. Akce proběhne od 10:00 do večera. Hackday je určen všem, kteří si chtějí prakticky vyzkoušet práci s linuxovým jádrem i uživatelským prostorem, od posílání patchů například pomocí nástroje b4, přes balíčkování a Flatpak až po drobné úpravy

    … více »
    lkocman | Komentářů: 4
    včera 13:33 | IT novinky

    Evropská rada vydavatelů (EPC) předložila Evropské komisi stížnost na americkou internetovou společnost Google kvůli její službě AI Overviews (AI souhrny), která při vyhledávání na internetu zobrazuje shrnutí informací ze zpravodajských serverů vytvořená pomocí umělé inteligence (AI). Evropská komise již v prosinci oznámila, že v souvislosti s touto službou začala firmu Google vyšetřovat. Google obvinění ze strany vydavatelů

    … více »
    Ladislav Hagara | Komentářů: 12
    včera 04:44 | Komunita

    Ubuntu 26.04 (Resolute Raccoon) už nebude v desktopové instalaci obsahovat GUI nástroj 'Software & Updates'. Důvodem jsou obavy z jeho složitosti pro běžné uživatele a z toho plynoucích bezpečnostních rizik. Nástroj lze doinstalovat ručně (sudo apt install software-properties-gtk).

    NUKE GAZA! 🎆 | Komentářů: 22
    včera 04:33 | IT novinky

    Thomas Dohmke, bývalý CEO GitHubu, představil startup Entire - platformu pro spolupráci vývojářů a agentů umělé inteligence. Entire získalo rekordních 60 milionů dolarů na vývoj databáze a nástrojů, které mají zefektivnit spolupráci mezi lidmi a agenty umělé inteligence. Dohmke zdůrazňuje potřebu přepracovat tradiční vývojové postupy tak, aby odpovídaly realitě, kdy většinu kódu produkuje umělá inteligence.

    NUKE GAZA! 🎆 | Komentářů: 0
    včera 04:22 | Zajímavý projekt

    Toyota Connected North America oznámila vývoj open-source herního enginu Fluorite, postaveného na frameworku Flutter. Pro renderování grafiky využívá 3D engine Filament od společnosti Google a dle svého tvrzení cílí na konzolovou kvalitu her. Fluorite je zřejmě navržen tak, aby fungoval i na méně výkonném hardware, což naznačuje možnost použití přímo v ICE systémech vozidel. Zdrojový kód zatím zveřejněný není.

    NUKE GAZA! 🎆 | Komentářů: 3
    včera 04:11 | Bezpečnostní upozornění

    Byl vytvořen nástroj a postup pro překonání věkového ověření platforem Discord, Kick, Twitch, Snapchat (a možná dalších), kód je open-source a dostupný na GitHubu. Všechny tyto sítě používají stejnou službu k-ID, která určuje věk uživatele scanem obličeje a na původní server posílá pouze šifrovaná metadata, ty ale sociální síť už nedokáže sama nijak validovat, 'útok' spočívá ve vygenerování a podstrčení legitimně vypadajících ověřovacích metadat.

    NUKE GAZA! 🎆 | Komentářů: 12
    11.2. 14:11 | IT novinky

    Jihokorejská kryptoměnová burza Bithumb přiznala vážné selhání interních systémů, které ji vystavilo riziku sabotáže a nezabránilo chybné transakci v hodnotě přes 40 miliard dolarů (814 miliard Kč). Druhá největší kryptoměnová burza v Koreji minulý týden při propagační akci omylem rozeslala zákazníkům zhruba 620 000 bitcoinů místo 620 000 wonů (8700 Kč). Incident vyvolal pokles ceny bitcoinu o 17 procent. Většinu

    … více »
    Ladislav Hagara | Komentářů: 9
    11.2. 13:55 | Nová verze

    Google Chrome 145 byl prohlášen za stabilní. Nejnovější stabilní verze 145.0.7632.45 přináší řadu novinek z hlediska uživatelů i vývojářů. Podrobný přehled v poznámkách k vydání. Zpátky je podpora grafického formátu JPEG XL, viz Platform Status. Odstraněna byla před třemi lety. Nový dekodér JPEG XL jxl-rs je napsán v Rustu. Zobrazování JPEG XL lze vyzkoušet na testovací stránce. Povolit lze v nastavení chrome://flags (Enable JXL image format).

    Ladislav Hagara | Komentářů: 0
    10.2. 22:44 | Nová verze

    Byla vydána nová verze 1.26 programovacího jazyka Go (Wikipedie). Přehled novinek v poznámkách k vydání.

    Ladislav Hagara | Komentářů: 0
    Které desktopové prostředí na Linuxu používáte?
     (19%)
     (6%)
     (0%)
     (11%)
     (26%)
     (3%)
     (4%)
     (2%)
     (12%)
     (28%)
    Celkem 853 hlasů
     Komentářů: 25, poslední 3.2. 19:50
    Rozcestník

    Dotaz: C++ smyčka s opakováním o určité frekvenci

    7.4.2014 12:17 gld17 | skóre: 4 | blog: GLDiuv_blog
    C++ smyčka s opakováním o určité frekvenci
    Přečteno: 510×
    Dobrý den, mám následující problém:
    
    
    int loop()
    {   
        qTimer.start(); // QElapsedTimer
        while(shtDwn != 1)
        {
            GyroModule::gyroUpdate(gVal, aVal);
            if(pthread_mutex_trylock(&srvBufMutex) == 0)
            {
                parseSrvMesg();
                pthread_mutex_unlock(&srvBufMutex);
            }
            printf("Gyro y: %3.2f,", gVal.y);
            setMotorsPid();
            if(lopCnt % 1 == 0)
            {
                //for(int i = 0; i < loopTns/1000000; i++)
                //    cout << "#";
                cout << ", loopt: " << loopTns+waitTime*1000+500; // ZDE VYPISUJI CAS SMYCKY
            }
    
            cout << endl;
            /************* FREQUENCY STABILISATION ****************************/
            loopTns = qTimer.nsecsElapsed();
            waitTime = ((1/FREQ)*1000000000 - loopTns) / 1000 ;
            if(waitTime > 1000)
            {
                usleep(waitTime-500); //
            }                         
            qTimer.restart();
            /******************************************************************/
        }
        return 0;
    }
    
    
    No a problem je tento: pokud nastavím modul gyra, které je pripojeno k Raspberry Pi pres I2C na 66Hz, dám si frekvenci smyčky na 70Hz a všechno je ok. Když si ten modul nastavím na 100Hz a nastavím si frekvenci smyčky na 110Hz (zkoušel jsem klidně i víc), nastane problém, že Gyro hlásí FIFO OVERFLOW! což znamená, že k němu nepřistupuju rychleji než 100Hz (FIFO OVERFLOW je problém a nesmí se objevovat). Přičemž na obrazovku vypisuju různé údaje v každém kole smyčky. Pakliže vypisování na obrazovku zruším, tak FIFO OVERWLOF nenastane.

    Tak možná si říkáte, že to je tím, že to vypisování na obrazovku to moc brzdí, jenomže jak mi vysvětlíte, že doba smyčky je přesná na +-0.1ms (viz řádek v kódu s výpisem) ať už s vypisováním, nebo bez něj? :-O

    Pokiud nastavím frekvenci gyra na 200Hz, tak už mi nepomůže ani přestat vypisovat cokoliv na obrazovku, klidně si můžu dát frekvenci smyčky na 900Hz (a je jí fakt dosaženo a navíc stabilně) ale hlásí to pořád FIFO OVERFLOW.

    Neví někdo co by to mohlo způsobovat?

    Používám QT Creator.

    Děkuji

    Odpovědi

    7.4.2014 12:36 gld17 | skóre: 4 | blog: GLDiuv_blog
    Rozbalit Rozbalit vše Re: C++ smyčka s opakováním o určité frekvenci
    Jeej teď mi to docvaklo že vypisuju kravinu, omg :-)

    Změnil jsem vypis času čistě na čas jedné smyčky bez waititme a nedosahuju těch frekvencí :-/

    No to nevadí, tak trochu přetransformuju dotaz - myslíte že těch 200Hz je na Raspberry Pi moc? Nebo že by to tak brzdilo to I2C?

    Nejnáročnější operace co tam mám jsou:

    -získání dat z Gyra přes I2C -2x zápis do /dev/servoblaster -v posix vlákně běží naslouchání ze serveru, zkoušel jsem dát delay z 30ms (není toho dosaženo, mám tam takový heartbeat) na 300ms a na čas smyčky zdá se to nemá vliv -zbytek je takové sčítání, odečítání, násobení a ani ho není zase tak moc
    7.4.2014 12:45 gld17 | skóre: 4 | blog: GLDiuv_blog
    Rozbalit Rozbalit vše Re: C++ smyčka s opakováním o určité frekvenci
    Tak jsem zkusil nastavit 100Hz a čas smyčky je 6ms +-0.3ms (zbytek se čeká). Časy jsou stejné ikdyž vypnu Xka.

    Samozřejmě zkusím ten profiler jak už jste mi tu doporučovali :-)
    rADOn avatar 7.4.2014 12:50 rADOn | skóre: 44 | blog: bloK | Praha
    Rozbalit Rozbalit vše Re: C++ smyčka s opakováním o určité frekvenci
    A jak rychle se to teda pousti? Nekoliduje to s frekvenci planovace v kernelu? (CONFIG_HZ). A hlavne, neni tohle presne duvod proc jsem se ti v jinym dotazu snazil vysvetlit ze fifo ne-e?
    "2^24 comments ought to be enough for anyone" -- CmdrTaco
    7.4.2014 17:09 gld17 | skóre: 4 | blog: GLDiuv_blog
    Rozbalit Rozbalit vše Re: C++ smyčka s opakováním o určité frekvenci
    Jeden loop trvá cca 6ms +-0.1ms, což dává maximální použitelnou frekvenci cca 166Hz.

    Po CONFIG_HZ jsem pátral a v /boot/ jsem našel jen soubor config.txt který tento atribut nemá.

    Za to FIFO nemůžu, to je pokud vím hardwarově na tom modulu MPU6050 a s tím já nic neudělám (asi).
    7.4.2014 18:19 gld17 | skóre: 4 | blog: GLDiuv_blog
    Rozbalit Rozbalit vše Re: C++ smyčka s opakováním o určité frekvenci
    Tak už vím, CONFIG_HZ=100 Asi malo co? :-)
    rADOn avatar 7.4.2014 19:22 rADOn | skóre: 44 | blog: bloK | Praha
    Rozbalit Rozbalit vše Re: C++ smyčka s opakováním o určité frekvenci
    Malo je dobre, jak jsem ti vysvetloval uz jinem dotazu, prepinani ma jistou rezii a kdyz budes prepinat moc casto tak tim stravis vic casu nez necim uzitecnym. Na desktopy se dava 300 nebo 1000 kdyz chces aby lip reagovaly pod zatezi. Jestli mas na raspi 100 tak bude bezpecnejsi predpokladat ze ten kdo to kompiloval vedel co dela.

    Neni problem cekat ve smycce kratsi dobu, ale jakmile pustis cpu musis pocitat ze se nedostanes k lizu driv nez zase za 1/CONFIG_HZ sekund. A to jen kdyz na dalsi slice nevybere planovac zase jinou ulohu. Proto se taky v manstrance usleep() i nanosleep() pise ze se bude _nejmene_ zadany cas, ale muze to byt vice. Do techhle veci moc nevidim, ale zni mi to jako ze potrebujes RT kernel. Nebo zmenit pristup, na standartnim planovaci je afaik nemozny garantovat dostupny cas. I kdyz bys prisel na nejakej trik jak z toho kratkodobe vymackat vic, tak ti nikdo neslibi ze nejaky jiny proces s vysokou prioritou te treba na desetinu sekundy neodstavi.
    "2^24 comments ought to be enough for anyone" -- CmdrTaco
    7.4.2014 20:41 Andrej | skóre: 51 | blog: Republic of Mordor
    Rozbalit Rozbalit vše Re: C++ smyčka s opakováním o určité frekvenci

    Volba HZ nemá žádný vliv na frekvenci plánování. Nemá žádný vliv na odezvu systému. Nemá žádný vliv na nic. Většina pověr, které o ní kolují, pochází asi tak z dávných dob, kdy ještě nějaký vliv měla. Donedávna na ní třeba záviselo, jak moc často RCU spouští své drobné „reclamation“ úlohy na pozadí a další „housekeeping“. Ale ani to už dnes neplatí. Kernely jsou dnes většinou tickless; nicméně i v době, kdy nebyly, se uspávání, probouzení a plánování dělo s granularitou nesrovnatelně menší než 100 Hz, 1000 Hz nebo cokoliv podobného. Dojde-li k migraci vlákna na jiný procesor, kde se má vlákno zase spustit, stane se to okamžitě, ne až za chvíli. Paket ze sítě, požadavek od uživatele a obecně všechno, co vyvolá IRQ, se vyřeší okamžitě, bez ohledu na volbu HZ. Hardwarové časovače, které se používají někde v implementaci API jako je nanosleep(), taktéž nemají absolutně žádnou souvislost s volbou HZ. IRQ (nebo jiný typ přerušení) od časovače i případné probuzení procesu, který spal, se ošetří okamžitě, tedy přesněji řečeno, hned, jakmile to bude možné. Nikdy se nikde nečeká setinu vteřiny nebo něco takového. Volba HZ je dnes spíš relikt z minulosti než cokoliv užitečného.

    Neni problem cekat ve smycce kratsi dobu, ale jakmile pustis cpu musis pocitat ze se nedostanes k lizu driv nez zase za 1/CONFIG_HZ sekund.

    Naprostý nesmysl.

    A to jen kdyz na dalsi slice nevybere planovac zase jinou ulohu.

    Naprostý nesmysl. Tohle už je fakt ve stylu Vesmírní Lidé.

    Do techhle veci moc nevidim, ale zni mi to jako ze potrebujes RT kernel.

    Tento výrok přichází se zpožděním několika dnů. Hodil by se na 1. dubna. Ale vážně, kdyby platilo cokoliv z toho, co tu tvrdíš, nikdo by dnes nepoužíval počítače a raději by dal přednost telegrafu.

    rADOn avatar 8.4.2014 11:41 rADOn | skóre: 44 | blog: bloK | Praha
    Rozbalit Rozbalit vše Re: C++ smyčka s opakováním o určité frekvenci
    To je vsechno hezky a naprosta pravda, ale ja jsem nikde nepsal ze jadro prepina podle CONFIG_HZ a nevyuzitej cas se kope do prdele. Kdyz je cas se kopat do prdele tak ani neni problem… ale kdyz je system zatizenej tak ma CONFIG_HZ docela velkej vliv. Experimentalne vyzkouseno. Nekde vys jsem psal (a pravda, mel jsem to v tom poslednim prispevku asi zduraznit) ze mluvim o systemu pri zatezi. A kdyz se rekne "zatez" uvedom si ze tady neni rec o vicejadrove multigigahertzove bestii.
    …se ošetří okamžitě, tedy přesněji řečeno, hned, jakmile to bude možné.
    Jo, ale "okamžitě" a "jakmile to bude možné" není vždy totéž. Ano, me to taky prislo nejdriv streleny, proto jsem se taky ptal na nastaveni a casy. Ale jestli mu to zacina ujizdet kolem 100Hz tak to nebude nahoda.
    "2^24 comments ought to be enough for anyone" -- CmdrTaco
    7.4.2014 20:25 Andrej | skóre: 51 | blog: Republic of Mordor
    Rozbalit Rozbalit vše Re: C++ smyčka s opakováním o určité frekvenci

    To nemá absolutně žádný vliv na jakékoliv časování. Zaprvé, plánování, uspávání a probouzení se už minimálně patnáct let neděje s touto granularitou, ale s granularitou mnohem jemnější, kterou hardware umožňuje. Zadruhé, současné kernely jsou buď částečně nebo (stále častěji) úplně tickless, takže plánování i veškeré další úkony probíhající v systému se dějí zcela nezávisle na této volbě. Přísně vzato je volba HZ v konfiguraci kernelu spíš matoucí než užitečná. Nemá žádný smysl. Dokonce ani nemění přírůstek virtuálních tiků do /proc/stat, protože ten je vždycky 100 Hz na procesor, tedy u 16-procesoru přibude 1600 virtuálních tiků za vteřinu, u mého 8-procesur 800 virtuálních tiků za vteřinu, a tak dále a tak podobně, zcela bez ohledu na nastavení HZ.

    8.4.2014 02:01 gld17 | skóre: 4 | blog: GLDiuv_blog
    Rozbalit Rozbalit vše Re: C++ smyčka s opakováním o určité frekvenci
    Takže co můžu udělat praktikcy pro to, abych měl rychlejší frekvenci smyčky? Zkušel jsem i vypnout Xka a jela mi jenom má aplikace a frekvence smyčky nejde nad cca 166Hz.

    A přitom když jedou Xka, tak to nemá na rychlost mojí aplikace vliv, tzn. to musí znamenat že ten Raspi ze sebe musí umět vymáčkout víc.

    Co se týče frekvence 200Hz na MPU6050, pokud ji nastavím a spustím demo aplikaci MPU6050 knihovn která prostě jenom čte dmp data a vypisuje je na obrazovku, píše to taky FIFO overflow, což znamená že ta moje aplikace není kdoví jak zasekaná záležitost. Ještě můžu zkusit u té zapliakce zastavit výpisy na obrazovku, jestli to pojede pořádně pak.

    Jinak momentálně cpu jede na 950Mhz.
    8.4.2014 02:23 gld17 | skóre: 4 | blog: GLDiuv_blog
    Rozbalit Rozbalit vše Re: C++ smyčka s opakováním o určité frekvenci
    ještě jsem zkusil nastavit tomu procesu, co čte jenom data z gyra a nic víc, prioritu na 0 a bez výsledku; až po odtranění všech výpisů na obrazovku se výsledek zlepšil a FIFO OVERFLOW to vypisuje asi 10x méně často... ale vypisuje. Příkaz top ukazuje u toho procesu využití CPU jen na 7%.
    8.4.2014 07:36 Petr
    Rozbalit Rozbalit vše Re: C++ smyčka s opakováním o určité frekvenci
    Zdravím,

    nevím jaký typ gyra používáte, takže napíšu své zkušenosti s ITG-3200 a ADXL345 připojené k Arduinu.

    - Základní frekvence I2C signálu SCL je 100kHz. Na Arduinu lze zvýšit až na 400kHz. Dle dokumentace k RPi je to rovněž 100kHz (nutno ověřit). Pro větší množství přenášených dat se vyplatí frekvenci zvýšit. Čas nutný pro přenesení dat lze pak jednoduše spočítat z dokumentace ke gyru.

    - Pokud chcete načítat data s vyšší frekvencí než 100Hz, je vhodné využít časovač v gyru a data načítat přes přerušení. Až se buffer (FIFO) zaplní, gyro nastaví přerušení a RPi načte všechna data z bufferu (postup záleží na konkrétním typu gyra). Při vyšších frekvencích bych do toho netahal časovače operačního systému, ale využil bych přímo hw gyra. Uvědomte si, že jádro Linuxu není hard real time. To FIFO je tam právě pro tyto účely.

    - Nevím, na co budete gyro používat, ale nejprve odhadněte, jaké maximální frekvence dosahuje kmitání mechanického systému. Stejně budete muset naměřená data filtrovat. Vyplatí se rovněž nastavit dolnopropustné filtry, které jsou většinou už v gyru.
    8.4.2014 09:02 Petr
    Rozbalit Rozbalit vše Re: C++ smyčka s opakováním o určité frekvenci
    Doplnění.

    Tak už vidím typ gyra MPU6050. Dle dokumentace tam je DTY_RDY_INT a FIFO_COUNT.

    Pro měření času na RPi používám funkci gettimeofday. Vrací čas s rozlišením mikrosekund. Zkuste vypisovat tento absolutní čas a ne nějaké přepočty přes time elapsed.

    Založit nové vláknoNahoru

    Tiskni Sdílej: Linkuj Jaggni to Vybrali.sme.sk Google Del.icio.us Facebook

    ISSN 1214-1267   www.czech-server.cz
    © 1999-2015 Nitemedia s. r. o. Všechna práva vyhrazena.