Fórum Root.cz

Hlavní témata => Vývoj => Téma založeno: Teodor 17. 08. 2016, 12:45:15

Název: Prioritizace vláken v C
Přispěvatel: Teodor 17. 08. 2016, 12:45:15
Čau ve spolek,
můj dotaz směřuje k vláknu.
Mám vlákno, co mi scanuje v periodě(cca 100ms) nějaký příchozí data, nicméně se mi stává, že data jsou občas přesná a občas přesná nejsou. Napadlo mne vyřešit to prioritou vlákna?? Nicméně s vlákny začínám a docela v tom tápu.
Je to pro linux Debian 7 wheezy.

Tady je kód:

Kód: [Vybrat]
#include <stdio.h>
#include <unistd.h>
#include <cstdint>
#include <thread>
#include <iostream>
#include <iomanip>
#include "boost/date_time/posix_time/posix_time.hpp"

extern "C" {

#include "libico300.h"

}

using namespace std;
using namespace boost::posix_time;

void wait(int milli_seconds) {

this_thread::sleep_for(chrono::milliseconds(milli_seconds));

}

void threadf(int cas) {

int a = 0;


while(true) {

wait(cas);

uint8_t stav;

ICO300_get_DI(&stav);

if (stav != a) {


cout << " VZESTUPNA HRANA " << endl;

}
else {


cout << " SESTUPNA HRANA " << endl;

     }


a = stav;


}

}


int main() {


char c;

ICO300_set_DIO_mode(0xff);
int parametr_cas;

cout << " Zadejte cas v [ms]: " << endl;
cin >> parametr_cas;


thread t{threadf,parametr_cas};

return 0;

}
Název: Re:Prioritizace vláken v C
Přispěvatel: JSH 17. 08. 2016, 15:44:04
Ahoj, priorita vláken je dost závislá na plattformě. Můžeš zkusit vevnitř vlákna zavolat pthread_self a získat nativní id pro pthread_setschedprio.

... data jsou občas přesná a občas přesná nejsou.

Co tímhle přesně myslíš? Že to občas čeká dýl než těch 100ms? S tím musíš počítat, protože linux v základu není realtime a odezvu nemáš nijak garantovanou. Priority tomu moc nepomůžou.
Název: Re:Prioritizace vláken v C
Přispěvatel: Neviditelný 17. 08. 2016, 15:45:24
Text dotazu mi přijde poněkud zmatený. Domnívám se správně, že potřebuješ, aby se to vlákno probudilo vždy po nějakém čase s co možná nejvyšší přesností, přičemž na té přesnosti závisí správné fungování celého programu? Tenhle problém je totiž v non-realtimových multitaskingových prostředích inherentně neřešitelný tímto způsobem. Mimochodem ten tvůj jednoduchý příklad žádné vlákno ani nepotřebuje.
Název: Re:Prioritizace vláken v C
Přispěvatel: aaa 17. 08. 2016, 22:17:11
Spravne riesenie bez realtime systemu neexistuje. Existuje trochu fungujuce riesenie.

Program spustaj cez chrt so spravnymi parametrami, na zaciatku si uloz cas, aby ti to neuchazalo. Od neho pocitaj, kolko cakat. Takto zadas 100ms a kazda iteracia trva naviac mozno 1ms, niekedy aj viac (scheduler), tak po nejakom case mozno nieco preskocis.

A ako pisu ostatni, vlakno na toto nepotrebujes.
Název: Re:Prioritizace vláken v C
Přispěvatel: JmJ 18. 08. 2016, 10:30:32
a) priority vlaken bych neresil, to mi v praxi nikdy nefungovalo prilis dobre a hlavne to nikdy nebude presne (jak psali vyse)

b) pokud vam jde o monitorovani cca 100ms pulzu, pak zvyste vzrokovaci frekvenci treba na 10 ms nebo i vic, zalezi, jak presne chcete zmeny chytat.

c) muzete take poresit to, ze provadeni samotne kontroly bere nejaky cas. Hned po spanku si zapamatovat/zacit merit cas a dalsi spanek naplanovat na "standardni delka spanku" - "cas zabrany merenim". Tim se co mozna nejvic priblizite presnemu vzorkovani.

d) jsou veci, ktere v ne-realtime multitaskovem systemu na urovni uzivatelske aplikace proste bezchybne ucasovat nejdou. Musi na ne byt bud driver do jadra os, nebo specialni hw.
Název: Re:Prioritizace vláken v C
Přispěvatel: PetrM 18. 08. 2016, 10:53:25
No, pokud bude sedm priorit a standardní čtyřka, tak by priorita 6 fungovala do chvíle, než někdo dá šestku nebo sedmičku do jiné aplikace. Jinak je to v p...

Jedině vyšší vzorkovací frekvence s tím, že delay() zaručuje minimální čas, takže i při nastavení na 10ms to může jet znovu po 150ms. Při požadavku na přesnost řešit na úrovni ovladače nebo železa.
Název: Re:Prioritizace vláken v C
Přispěvatel: Teodor 19. 08. 2016, 10:35:45
Pánové moc děkuji za vyčerpávající odpovědi.
Ale teď mi nejde o přesnost toho vzorkování,  protože jsem se zasekl na de...lním bit shiftu.
Tady je kód a popis chyby.
Přitom scanování to neustále vypisuje 1 a nereaguje na změny stavu jednotlivých pinů. Myslel jsem si, že by to vyřešila priorita vlákna, ale to by na to stejně nemělo vliv.

Kód: [Vybrat]
void threadf() {

while (true) {

wait(200);

unsigned int pins;

ICO300_get_DI(&pins);

for(int i = 0; i <= 8; i++) {

cout << " STAV: " << int(pins & 1) << endl;

pins >> 1;

}


}

}
Název: Re:Prioritizace vláken v C
Přispěvatel: deadmail 19. 08. 2016, 10:46:14
co tak
Kód: [Vybrat]
pins = pins >> 1;
?
Název: Re:Prioritizace vláken v C
Přispěvatel: Teodor 19. 08. 2016, 12:42:01
co tak
Kód: [Vybrat]
pins = pins >> 1;
?

Když provedu logický součin (pins & 1) tak to mi tam přiřadí tu jedničku, což by se nemělo vůbec stát, ne????
Název: Re:Prioritizace vláken v C
Přispěvatel: Neviditelný 19. 08. 2016, 13:09:01
Kód: [Vybrat]
pins >> 1;
Tento kód nic nedělá, asi jsi myslel
Kód: [Vybrat]
pins >>= 1

Kód: [Vybrat]
int(pins & 1)
je trochu zvláštní konstrukt, i když v tomto případě funkční. Nemyslel jsi ale spíše
Kód: [Vybrat]
(int)(pins & 1)
? V C++ správnější použít
Kód: [Vybrat]
static_cast<int>(pins & 1)

Na závěr máš guláš v operátorech. "&" není logický součin, ale bitwise součet. Logický součin by byl "||".
Název: Re:Prioritizace vláken v C
Přispěvatel: Neviditelný 19. 08. 2016, 13:11:17
Na závěr máš guláš v operátorech. "&" není logický součin, ale bitwise součet. Logický součin by byl "||".
Whoops, koukám že s těmi českými termíny mám problém já:) AND = součin = &&, OR = součet = ||.
Název: Re:Prioritizace vláken v C
Přispěvatel: Teodor 19. 08. 2016, 14:18:25
Na závěr máš guláš v operátorech. "&" není logický součin, ale bitwise součet. Logický součin by byl "||".
Whoops, koukám že s těmi českými termíny mám problém já:) AND = součin = &&, OR = součet = ||.

No, já mám spíš návyky z C, v C++ mam trochu guláš, takže já ty chyby už poupravil, ale teď si lámu nad tím, jestli používám správně referenci v tomhle kusu kódu:

Kód: [Vybrat]
uint8_t pins;

ICO300_get_DI(&pins);

uint8_t &stav = pins;

Smysl je načíst osm pinů-bitů přes fci ICO300_get_DI() a referencí to předat další proměnné se kterou už pracuji normálně.
Napadlo mne použít pointer, ale to by byla v tomto případě nejspíš prasárna..
Název: Re:Prioritizace vláken v C
Přispěvatel: Neviditelný 19. 08. 2016, 15:08:42
Ta knihovna, kterou používáš je Cčková, takže o žádných C++ových referencích nemá ani tušení. Unární & na pravé straně výrazu funguje v C++ úplně stejně jako v C, takže ICO300_get_DI(&pins) předá té knihovní funkci ukazatel na proměnnou pins.
Kód: [Vybrat]
uint8_t &stav = pins;
vyrobí referenci stav na proměnnou pins. pins i stav budou tedy přestavovat tutéž proměnnou. Proč všude nepoužiješ akorát tu proměnnou pins? Kopírovat si to někam jinam mi nepřijde nijak užitečné.
Název: Re:Prioritizace vláken v C
Přispěvatel: Teodor 19. 08. 2016, 19:48:19
Ta knihovna, kterou používáš je Cčková, takže o žádných C++ových referencích nemá ani tušení. Unární & na pravé straně výrazu funguje v C++ úplně stejně jako v C, takže ICO300_get_DI(&pins) předá té knihovní funkci ukazatel na proměnnou pins.
Kód: [Vybrat]
uint8_t &stav = pins;
vyrobí referenci stav na proměnnou pins. pins i stav budou tedy přestavovat tutéž proměnnou. Proč všude nepoužiješ akorát tu proměnnou pins? Kopírovat si to někam jinam mi nepřijde nijak užitečné.

To jsem tak měl původně, nicméně mi přijde divný, že to prostě neprovede ten logický součin, ale přiřadí mi to tam 1 a kdybych to násobil třema tak mi to do konzole prostě vytiskne jen číslo tři.
Já to budu schopen zase otestovat v pondělí v práci, na tý specifický mašině.
Název: Re:Prioritizace vláken v C
Přispěvatel: ddfesd 19. 08. 2016, 22:06:24
ty mas osmibitovou promrnnou pins a z ni chces jednotlive bity ne?

neni lepsi modifikovat vyberovou masku a nekazit pins?!

for(maska=1;maska<=8;maska*=2)
  vyber_bit = pins & maska;
Název: Re:Prioritizace vláken v C
Přispěvatel: Teodor 19. 08. 2016, 22:48:33
ty mas osmibitovou promrnnou pins a z ni chces jednotlive bity ne?

neni lepsi modifikovat vyberovou masku a nekazit pins?!

for(maska=1;maska<=8;maska*=2)
  vyber_bit = pins & maska;

Jj, přesně tak.
Zajímavý, já chtěl co nejjednodušší řešení a vymaskování mne nenapadlo.
Nicméně já to stejně mohu otestovat až v pondělí v kanclu na tom HW, doma ho nemam.
Ale díky za tip! :)

Název: Re:Prioritizace vláken v C
Přispěvatel: pb. 21. 08. 2016, 08:51:41
V C by se dala použít i bitová pole, googlujte "c bit fields". Ale pro běžného programátora bude čitelnější případ s maskami. Bitové pole není příliš běžná konstrukce, očekával bych její použití spíše na jednočipech než na PC.
Název: Re:Prioritizace vláken v C
Přispěvatel: Teodor 21. 08. 2016, 13:37:30
V C by se dala použít i bitová pole, googlujte "c bit fields". Ale pro běžného programátora bude čitelnější případ s maskami. Bitové pole není příliš běžná konstrukce, očekával bych její použití spíše na jednočipech než na PC.

S bit fields na mne vyrukovali v práci jako první, jenže v C++. Bitové pole a uniony jsem viděl naposledy na VŠ právě u jednočipů, od té doby jsem to pustil z hlavy. J mám zakázáno dělat to v C++, taže věci z C co jsem měl na škole jsem prostě vypustil z hlavy...
U tý masky teda použít union???
Název: Re:Prioritizace vláken v C
Přispěvatel: pb. 21. 08. 2016, 13:52:36
Union? Spíš takto:

#define NAZEV_BITU_1 0x01
#define NAZEV_BITU_2 0x02
#define NAZEV_BITU_3 0x04
#define NAZEV_BITU_4 0x08

int hodnota_bitu_1 = pins & NAZEV_BITU_1;
int hodnota_bitu_2 = pins & NAZEV_BITU_2;
int hodnota_bitu_3 = pins & NAZEV_BITU_3;
int hodnota_bitu_4 = pins & NAZEV_BITU_4;
Název: Re:Prioritizace vláken v C
Přispěvatel: v 21. 08. 2016, 13:53:24
V C by se dala použít i bitová pole, googlujte "c bit fields". Ale pro běžného programátora bude čitelnější případ s maskami. Bitové pole není příliš běžná konstrukce, očekával bych její použití spíše na jednočipech než na PC.

S bit fields na mne vyrukovali v práci jako první, jenže v C++. Bitové pole a uniony jsem viděl naposledy na VŠ právě u jednočipů, od té doby jsem to pustil z hlavy. J mám zakázáno dělat to v C++, taže věci z C co jsem měl na škole jsem prostě vypustil z hlavy...
U tý masky teda použít union???
osobně bych se použíti union + bitové pole vyhnul, v některých situacích to není moc přenositelné a neřekl bych, že přináší nějaké výhody, určitě není přehlednější, maska je naprosto přímočará
Název: Re:Prioritizace vláken v C
Přispěvatel: Teodor 21. 08. 2016, 19:34:47
V C by se dala použít i bitová pole, googlujte "c bit fields". Ale pro běžného programátora bude čitelnější případ s maskami. Bitové pole není příliš běžná konstrukce, očekával bych její použití spíše na jednočipech než na PC.

S bit fields na mne vyrukovali v práci jako první, jenže v C++. Bitové pole a uniony jsem viděl naposledy na VŠ právě u jednočipů, od té doby jsem to pustil z hlavy. J mám zakázáno dělat to v C++, taže věci z C co jsem měl na škole jsem prostě vypustil z hlavy...
U tý masky teda použít union???
osobně bych se použíti union + bitové pole vyhnul, v některých situacích to není moc přenositelné a neřekl bych, že přináší nějaké výhody, určitě není přehlednější, maska je naprosto přímočará

Chlapi, díky za radu. Protože já si olutně vůbec tyhle věci z VŠ absolutně vůbec nevybavuji.
Zítra to odzkoušim a pak to tu nějak shrnu, snad pozitivně :)
Název: Re:Prioritizace vláken v C
Přispěvatel: hu 21. 08. 2016, 20:18:37
S bit fields na mne vyrukovali v práci jako první, jenže v C++. Bitové pole a uniony jsem viděl naposledy na VŠ právě u jednočipů, od té doby jsem to pustil z hlavy. J mám zakázáno dělat to v C++, taže věci z C co jsem měl na škole jsem prostě vypustil z hlavy...
U tý masky teda použít union???

Šiš, to je materiál. Co to bylo za školu, Teologická fakulta Jihočeský univerzity?
Název: Re:Prioritizace vláken v C
Přispěvatel: Teodor 22. 08. 2016, 09:18:31
S bit fields na mne vyrukovali v práci jako první, jenže v C++. Bitové pole a uniony jsem viděl naposledy na VŠ právě u jednočipů, od té doby jsem to pustil z hlavy. J mám zakázáno dělat to v C++, taže věci z C co jsem měl na škole jsem prostě vypustil z hlavy...
U tý masky teda použít union???

Šiš, to je materiál. Co to bylo za školu, Teologická fakulta Jihočeský univerzity?
Ne, FEL západočeská univerzita -> fůra nepodstatných sraček.
Název: Re:Prioritizace vláken v C
Přispěvatel: Mirek 22. 08. 2016, 14:10:46
S bit fields na mne vyrukovali v práci jako první, jenže v C++. Bitové pole a uniony jsem viděl naposledy na VŠ právě u jednočipů, od té doby jsem to pustil z hlavy. J mám zakázáno dělat to v C++, taže věci z C co jsem měl na škole jsem prostě vypustil z hlavy...
U tý masky teda použít union???

Šiš, to je materiál. Co to bylo za školu, Teologická fakulta Jihočeský univerzity?
Ne, FEL západočeská univerzita -> fůra nepodstatných sraček.

Takže za to, že vůbec nerozumíš céčku může škola? Vlastně asi jo, nechali tě prolézt.
Název: Re:Prioritizace vláken v C
Přispěvatel: Teodor 22. 08. 2016, 14:52:33
S bit fields na mne vyrukovali v práci jako první, jenže v C++. Bitové pole a uniony jsem viděl naposledy na VŠ právě u jednočipů, od té doby jsem to pustil z hlavy. J mám zakázáno dělat to v C++, taže věci z C co jsem měl na škole jsem prostě vypustil z hlavy...
U tý masky teda použít union???

Šiš, to je materiál. Co to bylo za školu, Teologická fakulta Jihočeský univerzity?
Ne, FEL západočeská univerzita -> fůra nepodstatných sraček.

Takže za to, že vůbec nerozumíš céčku může škola? Vlastně asi jo, nechali tě prolézt.

Rejpej si do někoho jiného a o mne se nestarej, k tématu jsi ničím nepřispěl, ale asi jsi student FELu v Plzni....)
Ostatním díky za oživení vědomostí, přeci jen OOP je mi bližší. 
Jinak řešení bylo jinde než v SW, ICO nemá 0V při rozepnutí, ale 4,5, takže proto mi neustále lítala 1. Stačilo propojit dvě země, aby nebyli v luftu.
Název: Re:Prioritizace vláken v C
Přispěvatel: Mirek 22. 08. 2016, 18:31:58
S bit fields na mne vyrukovali v práci jako první, jenže v C++. Bitové pole a uniony jsem viděl naposledy na VŠ právě u jednočipů, od té doby jsem to pustil z hlavy. J mám zakázáno dělat to v C++, taže věci z C co jsem měl na škole jsem prostě vypustil z hlavy...
U tý masky teda použít union???

Šiš, to je materiál. Co to bylo za školu, Teologická fakulta Jihočeský univerzity?
Ne, FEL západočeská univerzita -> fůra nepodstatných sraček.

Takže za to, že vůbec nerozumíš céčku může škola? Vlastně asi jo, nechali tě prolézt.

Rejpej si do někoho jiného a o mne se nestarej, k tématu jsi ničím nepřispěl, ale asi jsi student FELu v Plzni....)

To byla má reakce na tvé duchaplné "Ne, FEL západočeská univerzita -> fůra nepodstatných sraček."

A ne, nejsem student FEL. Ale když jsem ji někdy před skoro 2 desítkami let absolvoval, vůbec by mně nenapadlo tvrdit takové věci o unionu. A upřímně, ani o práci lidí na fakultě...
Název: Re:Prioritizace vláken v C
Přispěvatel: Teodor 23. 08. 2016, 05:51:46
S bit fields na mne vyrukovali v práci jako první, jenže v C++. Bitové pole a uniony jsem viděl naposledy na VŠ právě u jednočipů, od té doby jsem to pustil z hlavy. J mám zakázáno dělat to v C++, taže věci z C co jsem měl na škole jsem prostě vypustil z hlavy...
U tý masky teda použít union???

Šiš, to je materiál. Co to bylo za školu, Teologická fakulta Jihočeský univerzity?
Ne, FEL západočeská univerzita -> fůra nepodstatných sraček.

Takže za to, že vůbec nerozumíš céčku může škola? Vlastně asi jo, nechali tě prolézt.

Rejpej si do někoho jiného a o mne se nestarej, k tématu jsi ničím nepřispěl, ale asi jsi student FELu v Plzni....)

To byla má reakce na tvé duchaplné "Ne, FEL západočeská univerzita -> fůra nepodstatných sraček."

A ne, nejsem student FEL. Ale když jsem ji někdy před skoro 2 desítkami let absolvoval, vůbec by mně nenapadlo tvrdit takové věci o unionu. A upřímně, ani o práci lidí na fakultě...

No doba se změnila, a já jsem rád, že jsem z Plzně odešel dobrovolně pryč.)
Název: Časovač vláken v c++ pod Linuxem
Přispěvatel: Teodor 23. 08. 2016, 13:29:53
Tak znova já,
a zase vlákno.
Potřebuju nějaký brainstorming ohledně vlákna, které čeká na událost a pak ještě využít timer v c++ pod linuxem, který mi bude časovat po zadaný čas.
Název: Re:Časovač vláken v c++ pod Linuxem
Přispěvatel: JSH 23. 08. 2016, 13:45:37
Tak znova já,
a zase vlákno.
Potřebuju nějaký brainstorming ohledně vlákna, které čeká na událost a pak ještě využít timer v c++ pod linuxem, který mi bude časovat po zadaný čas.
A nechtěl bys to radši napsat ještě maďarsky? Takhle možná někoho geniálního může napadnout, na co se vlastně ptáš.
Název: Re:Časovač vláken v c++ pod Linuxem
Přispěvatel: Teodor 23. 08. 2016, 14:09:39
Tak znova já,
a zase vlákno.
Potřebuju nějaký brainstorming ohledně vlákna, které čeká na událost a pak ještě využít timer v c++ pod linuxem, který mi bude časovat po zadaný čas.
A nechtěl bys to radši napsat ještě maďarsky? Takhle možná někoho geniálního může napadnout, na co se vlastně ptáš.

V podstatě mi jde o to, aby vlákno zareagovalo když se na vstupu jakéhokoli pinu objeví log 1(+5V) a timer mi změřil nějaký odchylky, maximální a minimální odchylku od vzorkovací frekvence)
Název: Re:Prioritizace vláken v C
Přispěvatel: Mirek 23. 08. 2016, 14:27:05
Ne, FEL západočeská univerzita -> fůra nepodstatných sraček.

Takže za to, že vůbec nerozumíš céčku může škola? Vlastně asi jo, nechali tě prolézt.

Rejpej si do někoho jiného a o mne se nestarej, k tématu jsi ničím nepřispěl, ale asi jsi student FELu v Plzni....)

To byla má reakce na tvé duchaplné "Ne, FEL západočeská univerzita -> fůra nepodstatných sraček."

A ne, nejsem student FEL. Ale když jsem ji někdy před skoro 2 desítkami let absolvoval, vůbec by mně nenapadlo tvrdit takové věci o unionu. A upřímně, ani o práci lidí na fakultě...

No doba se změnila, a já jsem rád, že jsem z Plzně odešel dobrovolně pryč.)

V jakém ročníku? Jen abych měl představu jak to dneska na FEL vypadá...
Název: Re:Prioritizace vláken v C
Přispěvatel: dword 23. 08. 2016, 14:42:47
V jakém ročníku? Jen abych měl představu jak to dneska na FEL vypadá...
Radši si udělej představu, jak nebýt mentálně zaostalý na úrovni posměvačného děcka.
Název: Re:Časovač vláken v c++ pod Linuxem
Přispěvatel: Neviditelný 23. 08. 2016, 15:14:12
Tak znova já,
a zase vlákno.
Potřebuju nějaký brainstorming ohledně vlákna, které čeká na událost a pak ještě využít timer v c++ pod linuxem, který mi bude časovat po zadaný čas.
A nechtěl bys to radši napsat ještě maďarsky? Takhle možná někoho geniálního může napadnout, na co se vlastně ptáš.

V podstatě mi jde o to, aby vlákno zareagovalo když se na vstupu jakéhokoli pinu objeví log 1(+5V) a timer mi změřil nějaký odchylky, maximální a minimální odchylku od vzorkovací frekvence)

No a co je na tom za problém? Opět myslím, že samostatné vlákno na tohle vůbec nepotřebuješ, ale to je vedlejší, protože ať to poběží v hlavním vlákně nebo někde jinde, logika bude stejná. Prostě s dostatečnou vzorkovací frekvencí čti ze vstupu data a dle potřeby zareaguj. Stačí ti na to if a nanosleep().
Název: Re:Prioritizace vláken v C
Přispěvatel: Mirek 23. 08. 2016, 15:51:08
V jakém ročníku? Jen abych měl představu jak to dneska na FEL vypadá...
Radši si udělej představu, jak nebýt mentálně zaostalý na úrovni posměvačného děcka.

To ale není o posmívání. Trocha sarkasmu ještě nikoho nezabila. Pokud tazatel opravdu objektivně hledá vinu za tento stav, neměl by se takto lehce zbavovat vlastní zodpovědnosti za podíl na ní. To jsem se snažil naznačit. Myslím že mnoha lidem by neuškodila nějaká ta zdravá míra pokory.
Název: Re:Prioritizace vláken v C
Přispěvatel: dword 23. 08. 2016, 17:40:34
V jakém ročníku? Jen abych měl představu jak to dneska na FEL vypadá...
Radši si udělej představu, jak nebýt mentálně zaostalý na úrovni posměvačného děcka.

To ale není o posmívání. Trocha sarkasmu ještě nikoho nezabila. Pokud tazatel opravdu objektivně hledá vinu za tento stav, neměl by se takto lehce zbavovat vlastní zodpovědnosti za podíl na ní. To jsem se snažil naznačit. Myslím že mnoha lidem by neuškodila nějaká ta zdravá míra pokory.

Mi se neospravedlňuj, a začni s tou pokorou třeba u sebe.
Název: Re:Prioritizace vláken v C
Přispěvatel: Mirek 23. 08. 2016, 18:11:16
V jakém ročníku? Jen abych měl představu jak to dneska na FEL vypadá...
Radši si udělej představu, jak nebýt mentálně zaostalý na úrovni posměvačného děcka.

To ale není o posmívání. Trocha sarkasmu ještě nikoho nezabila. Pokud tazatel opravdu objektivně hledá vinu za tento stav, neměl by se takto lehce zbavovat vlastní zodpovědnosti za podíl na ní. To jsem se snažil naznačit. Myslím že mnoha lidem by neuškodila nějaká ta zdravá míra pokory.

Mi se neospravedlňuj, a začni s tou pokorou třeba u sebe.
"Ti" se neospravelňuji, nemám to zapotřebí. Ale když jsi zareagoval na odpověď, která nebyla určena pro tebe, předpokládal jsem, že očekáváš odpověď a chceš vést diskuzi. Zjevně ne.
Název: Re:Prioritizace vláken v C
Přispěvatel: dword 23. 08. 2016, 18:18:09
V jakém ročníku? Jen abych měl představu jak to dneska na FEL vypadá...
Radši si udělej představu, jak nebýt mentálně zaostalý na úrovni posměvačného děcka.

To ale není o posmívání. Trocha sarkasmu ještě nikoho nezabila. Pokud tazatel opravdu objektivně hledá vinu za tento stav, neměl by se takto lehce zbavovat vlastní zodpovědnosti za podíl na ní. To jsem se snažil naznačit. Myslím že mnoha lidem by neuškodila nějaká ta zdravá míra pokory.

Mi se neospravedlňuj, a začni s tou pokorou třeba u sebe.
"Ti" se neospravelňuji, nemám to zapotřebí. Ale když jsi zareagoval na odpověď, která nebyla určena pro tebe, předpokládal jsem, že očekáváš odpověď a chceš vést diskuzi. Zjevně ne.

Přesně tak, řekl jsem svoje a co nejrychleji to utnul, o diskuzi nemám zájem, naopak mám zájem o to ať je fórum zde konstruktivní a věcné.
Název: Re:Časovač vláken v c++ pod Linuxem
Přispěvatel: Teodor 23. 08. 2016, 18:29:05
Tak znova já,
a zase vlákno.
Potřebuju nějaký brainstorming ohledně vlákna, které čeká na událost a pak ještě využít timer v c++ pod linuxem, který mi bude časovat po zadaný čas.
A nechtěl bys to radši napsat ještě maďarsky? Takhle možná někoho geniálního může napadnout, na co se vlastně ptáš.

V podstatě mi jde o to, aby vlákno zareagovalo když se na vstupu jakéhokoli pinu objeví log 1(+5V) a timer mi změřil nějaký odchylky, maximální a minimální odchylku od vzorkovací frekvence)

No a co je na tom za problém? Opět myslím, že samostatné vlákno na tohle vůbec nepotřebuješ, ale to je vedlejší, protože ať to poběží v hlavním vlákně nebo někde jinde, logika bude stejná. Prostě s dostatečnou vzorkovací frekvencí čti ze vstupu data a dle potřeby zareaguj. Stačí ti na to if a nanosleep().

Já jsem se tu ztratil, čekal jsem, že se tu budou problémy řešit věcně a ne, že se tu bude trefovat do mne nějaký anonym ohledně ZČU, na kterou mám svůj názor.
Můžeme to když tak pořešit přes SZ????
Název: Re:Prioritizace vláken v C
Přispěvatel: Teodor 23. 08. 2016, 18:31:06
V jakém ročníku? Jen abych měl představu jak to dneska na FEL vypadá...
Radši si udělej představu, jak nebýt mentálně zaostalý na úrovni posměvačného děcka.

To ale není o posmívání. Trocha sarkasmu ještě nikoho nezabila. Pokud tazatel opravdu objektivně hledá vinu za tento stav, neměl by se takto lehce zbavovat vlastní zodpovědnosti za podíl na ní. To jsem se snažil naznačit. Myslím že mnoha lidem by neuškodila nějaká ta zdravá míra pokory.

Mi se neospravedlňuj, a začni s tou pokorou třeba u sebe.
"Ti" se neospravelňuji, nemám to zapotřebí. Ale když jsi zareagoval na odpověď, která nebyla určena pro tebe, předpokládal jsem, že očekáváš odpověď a chceš vést diskuzi. Zjevně ne.

Odešel jsem ve druháku, takže většinu IT předmětů jsem měl bez problému splněnou, mikroprocesory kupodivu za dva.
Můj názor na FEL ZČU nikdo neveme :) A to jsem byl i členem ak. senátu.)
Název: Re:Prioritizace vláken v C
Přispěvatel: Mirek 23. 08. 2016, 23:45:07

Přesně tak, řekl jsem svoje a co nejrychleji to utnul, o diskuzi nemám zájem, naopak mám zájem o to ať je fórum zde konstruktivní a věcné.

To i já. Proto se mi nelíbí komentáře typu "Ne, FEL západočeská univerzita -> fůra nepodstatných sraček" a řeknu k tomu svůj názor.


Já jsem se tu ztratil, čekal jsem, že se tu budou problémy řešit věcně a ne, že se tu bude trefovat do mne nějaký anonym ohledně ZČU, na kterou mám svůj názor.
Můžeme to když tak pořešit přes SZ????


Šlo o reakci na tvé silné a dost neadekvátní prohlášení k ZČU. To rozhodně nebylo z tvé strany o věcné diskuzi. A, podle mého názoru, neobjektivní. Je to tvůj názor? OK. Neberu ti ho. Ale napsal jsem ti k tomu názor svůj. Neuneseš ho? Tvůj problém.
Název: Re:Časovač vláken v c++ pod Linuxem
Přispěvatel: Mirek 23. 08. 2016, 23:46:57
Já jsem se tu ztratil, čekal jsem, že se tu budou problémy řešit věcně a ne, že se tu bude trefovat do mne nějaký anonym ohledně ZČU, na kterou mám svůj názor.
Můžeme to když tak pořešit přes SZ????

A k tomu anonymovi - jsem úplně stejnej anonym jako ty (Teodor) a nebo kolega, který rád ostatní odkazuje do příslušných mezí a nemá zájem o diskuzi.
Název: Re:Prioritizace vláken v C
Přispěvatel: Mirek 23. 08. 2016, 23:54:14

Odešel jsem ve druháku, takže většinu IT předmětů jsem měl bez problému splněnou, mikroprocesory kupodivu za dva.
Můj názor na FEL ZČU nikdo neveme :) A to jsem byl i členem ak. senátu.)

Takže předpokládám že jsi měl Základy programování v elektronice a Programování v elektronice s Baslem. To samé jsem absolvoval i já před mnoha a mnoha lety. Jasně, je to takový úplný základ pro prváky a druháky a netuším co tam učí dneska.
Název: Re:Prioritizace vláken v C
Přispěvatel: Teodor 24. 08. 2016, 08:17:56

Odešel jsem ve druháku, takže většinu IT předmětů jsem měl bez problému splněnou, mikroprocesory kupodivu za dva.
Můj názor na FEL ZČU nikdo neveme :) A to jsem byl i členem ak. senátu.)

Takže předpokládám že jsi měl Základy programování v elektronice a Programování v elektronice s Baslem. To samé jsem absolvoval i já před mnoha a mnoha lety. Jasně, je to takový úplný základ pro prváky a druháky a netuším co tam učí dneska.

Programování  elektronice jsem už neměl, protože jsem odešel.
Nicméně elektroniku-mikroprocesory a programování v C jsem měl bez problému stejně jako numerické metody, kde jsem programovali taky, kdo chtěl. Teď na škole, kde jsem mám troje programování a k tomu mne čeká ještě paralelní programování, upozorňuji, že je to bc, o tom si FEL v Plzni může nechat zdát...
Dneska dělám fyziku a informatiku
Název: Re:Prioritizace vláken v C
Přispěvatel: Mirek 24. 08. 2016, 14:44:32

Odešel jsem ve druháku, takže většinu IT předmětů jsem měl bez problému splněnou, mikroprocesory kupodivu za dva.
Můj názor na FEL ZČU nikdo neveme :) A to jsem byl i členem ak. senátu.)

Takže předpokládám že jsi měl Základy programování v elektronice a Programování v elektronice s Baslem. To samé jsem absolvoval i já před mnoha a mnoha lety. Jasně, je to takový úplný základ pro prváky a druháky a netuším co tam učí dneska.

Programování  elektronice jsem už neměl, protože jsem odešel.
Nicméně elektroniku-mikroprocesory a programování v C jsem měl bez problému stejně jako numerické metody, kde jsem programovali taky, kdo chtěl. Teď na škole, kde jsem mám troje programování a k tomu mne čeká ještě paralelní programování, upozorňuji, že je to bc, o tom si FEL v Plzni může nechat zdát...
Dneska dělám fyziku a informatiku

Rozumím. V tom případě také mohlo jít také o nevhodně zvolený obor. Alternativou k "Fyzika a informatika" by byly spíš obory z FAV, třeba "Výpočetní technika", "Systémy pro identifikaci, bezpečnost a komunikaci", "Informatika". Obory na FEL jsou primárně zaměřené na elektrotechniku a elektroniku a, hlavně v prvních letech, musí studenty zrůzných typů škol dostat na nějakou společnou úroveň (matika, fyzika, základy elektrotechniky, ...).
Název: Re:Časovač vláken v c++ pod Linuxem
Přispěvatel: Teodor 25. 08. 2016, 09:21:41
Tak znova já,
a zase vlákno.
Potřebuju nějaký brainstorming ohledně vlákna, které čeká na událost a pak ještě využít timer v c++ pod linuxem, který mi bude časovat po zadaný čas.
A nechtěl bys to radši napsat ještě maďarsky? Takhle možná někoho geniálního může napadnout, na co se vlastně ptáš.

V podstatě mi jde o to, aby vlákno zareagovalo když se na vstupu jakéhokoli pinu objeví log 1(+5V) a timer mi změřil nějaký odchylky, maximální a minimální odchylku od vzorkovací frekvence)

No a co je na tom za problém? Opět myslím, že samostatné vlákno na tohle vůbec nepotřebuješ, ale to je vedlejší, protože ať to poběží v hlavním vlákně nebo někde jinde, logika bude stejná. Prostě s dostatečnou vzorkovací frekvencí čti ze vstupu data a dle potřeby zareaguj. Stačí ti na to if a nanosleep().

Tady posílám kód, zadefinoval do threadu - vymaskování bitů.
Přiznám se, že mne tam mate to vlákno, nicméně něčím vzorkovat musím, tak mne když tak naveďte pokud je to sémanticky blbě.

Kód: [Vybrat]
void thread_scanner() { //fce vlakna, ktera obsahuje scanner DI

int stav;
const long INTERVAL_MS = 500 * NANO_SECOND_MULTIPLIER;  //vypocet pro funkci nanosleep

    while(true) {

wait(100);

unsigned char pins; //v ramci vylouceni problemu s headerem od vyrobce jsem radeji deklaroval promenou takto

ICO300_get_DI(&pins); //ziskani stavu a predani promenne pins referenci

for(int i = 0; i < 8; i++){ //vymaskovani jednotlivych bitu

  stav = (int)(pins & 1); //stav jednotlivych bitu po bitovem logickem soucinu

   pins >>= 1; //bitovy posun doprava

}

if (stav != 0) { //pokud je stav kterehokoli bitu jiny nez nula, tak se vypise

cout << stav;

}

else { //jinak jsem pouzil fci nanosleep, abych nevypisoval neustale do konzole nuly

timespec sleepValue = {0};
sleepValue.tv_nsec = INTERVAL_MS;
nanosleep(&sleepValue, NULL);

}


    }



}
Název: Re:Časovač vláken v c++ pod Linuxem
Přispěvatel: Michal Kovačič 25. 08. 2016, 10:24:09
Nezlobte se, ale tohle je nesmysl:

1. proměnné a jejich konstantní inicializaci vyhodit mimo smyčku while. Sice dnešní kompilátory tohle udělají automaticky, ale alespoň ukážete pochopení...

2. algoritmus vypíše jenom stav nejvyššího bitu, který dojde... Na to opravdu není potřeba cyklus for.

Asi bych doporučil poprosit někoho aby ten kód navrhl na základě "high level" požadavků. Asi to bude rychlejší...
Název: Re:Prioritizace vláken v C
Přispěvatel: Neviditelný 25. 08. 2016, 10:24:32
1) Ptáme se už poněkolikáté, proč to potřebuješ číst ze samostatného vlákna?
2) Proč používáš nanosleep() i wait()? Ta funkce wait je vlastně odkud a co má dělat?
3) Ten tvůj maskovací for cyklus vrátí hodnotu stavu 1 pouze pokud bude nejvyšší bit pins 1, v ostatnéch případech bude stav vždy 0.
Název: Re:Časovač vláken v c++ pod Linuxem
Přispěvatel: JSH 25. 08. 2016, 10:26:55
//v ramci vylouceni problemu s headerem od vyrobce jsem radeji deklaroval promenou takto
Huh????
Citace
Kód: [Vybrat]
for(int i = 0; i < 8; i++){ //vymaskovani jednotlivych bitu

  stav = (int)(pins & 1); //stav jednotlivych bitu po bitovem logickem soucinu

   pins >>= 1; //bitovy posun doprava

}
Ten kód vždycky jen přepíše stav dalším bitem, takže tam nakonec zůstane hodnota toho posledního. Nejsem si jistý, čeho se přesně snažíš dosáhnout, ale jsem si jistý, že tam máš chybu.

Jestli chceš zjistit, jestli je libovolný bit nenulový, tak stačí celé pins porovnat s nulou.
Název: Re:Časovač vláken v c++ pod Linuxem
Přispěvatel: Mirek 25. 08. 2016, 10:42:00
Tak znova já,
a zase vlákno.
Potřebuju nějaký brainstorming ohledně vlákna, které čeká na událost a pak ještě využít timer v c++ pod linuxem, který mi bude časovat po zadaný čas.
A nechtěl bys to radši napsat ještě maďarsky? Takhle možná někoho geniálního může napadnout, na co se vlastně ptáš.

V podstatě mi jde o to, aby vlákno zareagovalo když se na vstupu jakéhokoli pinu objeví log 1(+5V) a timer mi změřil nějaký odchylky, maximální a minimální odchylku od vzorkovací frekvence)

No a co je na tom za problém? Opět myslím, že samostatné vlákno na tohle vůbec nepotřebuješ, ale to je vedlejší, protože ať to poběží v hlavním vlákně nebo někde jinde, logika bude stejná. Prostě s dostatečnou vzorkovací frekvencí čti ze vstupu data a dle potřeby zareaguj. Stačí ti na to if a nanosleep().

Tady posílám kód, zadefinoval do threadu - vymaskování bitů.
Přiznám se, že mne tam mate to vlákno, nicméně něčím vzorkovat musím, tak mne když tak naveďte pokud je to sémanticky blbě.

Můžeš stručně popsat jakou to má mít funkci? Co vlastně od toho kódu očekáváš? Jaké parametry (časování) má signál, který měříš?

Co podle tebe má dělat tento kus kódu?
Kód: [Vybrat]
for(int i = 0; i < 8; i++){ //vymaskovani jednotlivych bitu

  stav = (int)(pins & 1); //stav jednotlivych bitu po bitovem logickem soucinu

   pins >>= 1; //bitovy posun doprava

}

Jestli chceš jen zjistit jestli je kterýkoliv z dolních 8 bitů v 1, proč nepoužiješ toto:

Kód: [Vybrat]
  if ((pins & 0xFF) != 0) {
    cout >> stav;   // Ale co vlastně má v proměnné stav být? Nechceš spíš vypsat pins?
  }

Jen za podmínky že jasně popíšeš co má kód dělat, ti někdo dokáže poradit.
Název: Re:Časovač vláken v c++ pod Linuxem
Přispěvatel: Mirek 29. 08. 2016, 15:47:10

Tady posílám kód, zadefinoval do threadu - vymaskování bitů.
Přiznám se, že mne tam mate to vlákno, nicméně něčím vzorkovat musím, tak mne když tak naveďte pokud je to sémanticky blbě.

Už máš vyřešeno?