Zobrazit příspěvky

Tato sekce Vám umožňuje zobrazit všechny příspěvky tohoto uživatele. Prosím uvědomte si, že můžete vidět příspěvky pouze z oblastí Vám přístupných.


Příspěvky - Teodor

Stran: [1] 2 3 ... 5
1
Hledám práci / Práce - České Budějovice
« kdy: 31. 08. 2016, 17:15:25 »
Tak dopadlo to jak to dopadlo a hledám práci v Českých Budějovicích a anebo blízkém okolí.
Nemusí to být nutně vývoj, spíš testování, abych , měl čas na školu.
Pokud by se tu někdo našel, tak mi dejte vědět sem a nebo na mail, myslím, že by měl být viděn.

2
Odkladiště / Re:programator vs. tester
« kdy: 30. 08. 2016, 21:08:35 »
Frustracia z nedostatocneho financneho ohodnotenia?

Veru neviem z akej vesteckej gule si si domyslel ze ja robim testera.

Ja by som kazdemu "mlademu talentu" odporucil, ked chce v buducnosti seriozne programovat, aby zacal na pozicii testera a odtial sa vypracuje (ked na to ma). Ak "mlady ambiciozny talent" zacne robit programatora hned, tak sa nenauci vobec ziadnym navykom a ano naozaj programuje ako prasa. Na tych projektoch to je jednoducho vidiet a neda sa to popriet.

To, ze si niekto mysli, ze sa vsetko robi rucne, ze niekto musi nieco klikat do nemoty, to opat dokazuje aky je neinformovany a nema ani paru. Sme v roku 2013 a absolutne vsetko sa automatizuje a ak niekto nieco klika rucne tak je uplny zufalec. A tu nejde len o klikanie ... A predstavte si, ze existuju aj ludia, ktori pisu softver, ktory testuje ten vas.

S tímto příspěvkem absolutně souhlasím, minimálně junior pozice by měli začít od testování, vidím to sám na sobě, a pak se vypracovat. Je to tak běžné v jiných oborech(strojírenství, elektro) tak proč ne v IT????

3
Vývoj / Re:Zápis času
« kdy: 30. 08. 2016, 07:09:19 »
Nepoužíváš konzistentně indexy do pole - na jednom místě jsi to změnil, na druhém ti to zůstalo.
Proč čekáš 2sec když máš (spíš chceš mít) periodu vzorkování 1 ms?
Proč jsi nepřesunul výpočet délky trvání do příslušné větve podmínky if? RTakhle ti to bude vždycky při přechodu 1 -> 0 vypisovat záporné číslo...
Nerozumím úplně přesně tomu proč jsi volání nanosleep vložil zrovna tam, kam jsi ho vložil. A vlastně proč ho tam vlastně máš.
K té periodě vzorkování - i kdybys vyhodil ty 2 sec, nebude ti to sedět na 1 msec. Měl bys změřit trvání aktivního kódu a čekat 1 ms - doba_provádění_kódu. Hlavně jestli to provozuješ na nějakém málo výkonném industrial embedded systému.

Ale dělej jak sám myslíš.

index pole jsem tam nechal omylem, jinak to mam správně, ale to je fuk.
Tak vzorkovačka je 1ms a ten výpis co to vlákno dává je nečitelný při téhle vzorkovačce, proto jsem tam nacpal nanosleep..
Snažil jsem se udělat výpis jen při změně stavu(jakmile by byla 1 na vstupu tak by to vypsalo rozdíl času, ale to se mi prostě nepovedlo, byť to bylo logicky správně přes if..)
Což to já přehodim, ještě to nějak upravim.
No, provozuje se to na prototypu industrial embedded počítači od Axiomteku. Nikdo s tím přede mnou nedělala a neví jak se to chová.
Já jako junior vývojář jsem tohle dostal za úkol, celý kód bych psal jinak a déle, tohle je prostě rychlozkvašená prasečina, kterou bych rád ve středu odevzdal, aby bylo vidět, že to funguje...
Inu, proč ne.

Ale stejně mi pořád vrtá hlavou co to vlastně má dělat a k čemu to je. A proč to logování třeba nemůže být do souboru. A proč nevadí že to nezkoušíš se skutečným vzorkovacím kmitočtem, atd. Ale to už je tvůj boj.
[/quote]

Do souboru jsem to chtěl taky nacpat, ale to mi nebylo dovoleno.
No já to dneska upravim podle toho co tu je a kašlu na to.

4
Vývoj / Re:Zápis času
« kdy: 29. 08. 2016, 21:57:43 »
Je to nepřehledné, ono jde o to, odevzdat hotový úkol ve firmě, nikoho nezajímá jak je to udělané, prostě aby to bylo...
to tak nefunguje. kvalita kodu je podstatny faktor.

Já to vim, ale ne když na to má člověk cca 14 dní, má prototyp HW, který předním nikdo neměl, musí si o tom sehnat dokumentaci a další věci. Pak se dozví, že nikoho nezajímá jak je to naprogramovaný, ale jestli to funguje jak má, pokud ne tak to tester vrátí k předělání...

5
Vývoj / Re:Zápis času
« kdy: 29. 08. 2016, 21:56:12 »
Tady to je, uznávám, že jsem to předtím naprasil na všech osm pinů.
Je to nepřehledné, ono jde o to, odevzdat hotový úkol ve firmě, nikoho nezajímá jak je to udělané, prostě aby to bylo...
Jak říkám, nanosleep prej použít nemám, protože to uspává vlákno...Mne to přišlo jako log. řešení, když vzorkuji 1ms..
Naopak výpis rozdílu času jen když nastane událost(na vstupu bude 1) mi prostě nešel..

tady je kód:

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


extern "C" {

#include "libico.h" //mnou upraveny header pro DIO->kvuli prehlednosti fci

}

using namespace std;
using namespace boost::posix_time;


 void wait(int milli_seconds) { //fce casovace, defaultne jsem ji nastavil na 100[ms]

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

}

int nsleep(unsigned long millisec) {

struct timespec req = {0};
time_t sec = (int)(millisec/1000);
millisec = millisec - (sec*1000);
req.tv_sec = sec;
req.tv_nsec = millisec *1000000L;
while(nanosleep(&req, &req) == -1)

continue;

return 1;

};

struct bits {


unsigned bit0 : 1;
unsigned bit1 : 1;
unsigned bit2 : 1;
unsigned bit3 : 1;
unsigned bit4 : 1;
unsigned bit5 : 1;
unsigned bit6 : 1;
unsigned bit7 : 1;


};


 union u {

unsigned char status;
bits b;

 };


struct time {

boost::posix_time::ptime start_time, end_time;

int ps;


}times[8];



void thread_scanner() {

u PINS, ps;

while(true) {

ptime current_time = microsec_clock::local_time();

wait(1);

ICO300_get_DI(&PINS.status);


if(PINS.b.bit0 != 1)

{
times[0].start_time = current_time;

}

else
{
times[1].end_time = current_time;

}


nsleep(2000); //nanosleep, ceka 2sekundy



ptime t0  = times[0].start_time;
ptime t1  = times[0].end_time;
time_duration pin1 = t1-t0;

cout << " pin1 :"  << pin1.total_microseconds() << '\n';

};



int main() {


ICO300_set_DIO_mode(0xFF); //definovani DIO -> vsechny jsou vstupni -> 1

ICO300_set_DO(0); //pro bezproblemovost provozu jsem vynuloval DO

thread scanner{thread_scanner}; //inicializace vlakna

scanner.join();

return 0;

}

Nepoužíváš konzistentně indexy do pole - na jednom místě jsi to změnil, na druhém ti to zůstalo.
Proč čekáš 2sec když máš (spíš chceš mít) periodu vzorkování 1 ms?
Proč jsi nepřesunul výpočet délky trvání do příslušné větve podmínky if? RTakhle ti to bude vždycky při přechodu 1 -> 0 vypisovat záporné číslo...
Nerozumím úplně přesně tomu proč jsi volání nanosleep vložil zrovna tam, kam jsi ho vložil. A vlastně proč ho tam vlastně máš.
K té periodě vzorkování - i kdybys vyhodil ty 2 sec, nebude ti to sedět na 1 msec. Měl bys změřit trvání aktivního kódu a čekat 1 ms - doba_provádění_kódu. Hlavně jestli to provozuješ na nějakém málo výkonném industrial embedded systému.

Ale dělej jak sám myslíš.

index pole jsem tam nechal omylem, jinak to mam správně, ale to je fuk.
Tak vzorkovačka je 1ms a ten výpis co to vlákno dává je nečitelný při téhle vzorkovačce, proto jsem tam nacpal nanosleep..
Snažil jsem se udělat výpis jen při změně stavu(jakmile by byla 1 na vstupu tak by to vypsalo rozdíl času, ale to se mi prostě nepovedlo, byť to bylo logicky správně přes if..)
Což to já přehodim, ještě to nějak upravim.
No, provozuje se to na prototypu industrial embedded počítači od Axiomteku. Nikdo s tím přede mnou nedělala a neví jak se to chová.
Já jako junior vývojář jsem tohle dostal za úkol, celý kód bych psal jinak a déle, tohle je prostě rychlozkvašená prasečina, kterou bych rád ve středu odevzdal, aby bylo vidět, že to funguje...

6
Vývoj / Re:Zápis času
« kdy: 29. 08. 2016, 18:26:53 »
Je to nepřehledné, ono jde o to, odevzdat hotový úkol ve firmě, nikoho nezajímá jak je to udělané, prostě aby to bylo...
Code review je u Vás sprosté slovo? Smím se zeptat, co je to za firmu?

To se i tu nechce moc řešit, uvidim jestli mne ve středu nevyrazí...

7
Vývoj / Re:Zápis času
« kdy: 29. 08. 2016, 17:16:33 »
Jak si mám zkorigovat čas, když se mi vypisuje záporně??? Jakmile sepne výstup tak se čas zapisuje kladně a jinak při odepnutym výstupu se vypisuje záporně?
A další věc, potřebuji aby se mi vypsal jen jeden řádek když dojde k události. Takhle mi to pulsuje furt do konsole a to se blbě čte. Mne nic nenapadá s tim výpisem.
Nemá cenu abys čas vypisoval při každé změně. Má cenu ho vypsat jen po zapsání end_time. Pokud ho vypisuješ po změně start_time, tak používáš starý end_time. Pak samozřejmě dostaneš záporný rozdíl.

No, vypisuji tam rozdíl start a end, jak to teda ošetřit??
Jo a ještě jedna věc, pro dalších 7 pinů mi to háže celkový čas v mikrosekundách od 1.1.1970, jak to ošetřit???

Tvůj kód je velmi nepřehledný.

Máš nějaký speciální důvod, proč start_time dáváš do times[0] a end_time do times[1]? Logicky by mi to patřilo k sobě.

Proč vypisuješ proměnné start_time a end_time ještě před tím, než do nich proběhne přiřazení hodnoty?

Time_duration ti musí vyjít negativní pokaždé, když máš přechod z 1 -> 0.

Proč v podmínce používáš "!= 1"? Je to správně ale komplikuje to pochopení kódu a zvyšuje riziko chyby při jeho údržbě.

Proč jsi proměnnou s údaji o trvání pulzu nazval pin1? To je docela matoucí.

Každopádně, tvůj jednoduchý SW na hraní by mohl vypadat třeba takto (obsah smyčky):

Kód: [Vybrat]
time_duration pin1;

wait(1);

ICO300_get_DI(&PINS.status);

cout << "hodnota_bit0: " << PINS.b.bit0 << endl;
cout << " " << endl;

if(PINS.b.bit0 == 0) {
times[0].start_time = current_time;

        cout << "cas start_time: " << times[0].start_time << endl;
        cout << "cas end_time: " << times[1].end_time << endl;
} else {
times[0].end_time = current_time;

time_duration pin1 = times[1].end_time - times[0].start_time;

        pin1 = t1-t0;

        cout << "cas start_time: " << times[0].start_time << endl;
        cout << "cas end_time: " << times[1].end_time << endl;

        cout << " odchylka v sec: " << pin1.total_seconds() << endl;
}


Speciální důvod pro to nemám.
pin1 jsem to nazval schválně, abych se vyznal na konektoru
negace mi přijde přehlednější než to mít na férovku v podmínce
Nepřehledné to je, s tím souhlasím, protože za ten měsíc nebyl čas to napsat elegantněji, jednak to na firmě nikoho nezajímá, protože všichni chtěji vidět hotový SW. A za druhé sem strávil dost času hledáním dokumentace ohledně HW pak rozchození komunikace, padající Debian při spuštěné postgresql atd..

8
Vývoj / Re:Zápis času
« kdy: 29. 08. 2016, 17:07:44 »
Tady to je, uznávám, že jsem to předtím naprasil na všech osm pinů.
Je to nepřehledné, ono jde o to, odevzdat hotový úkol ve firmě, nikoho nezajímá jak je to udělané, prostě aby to bylo...
Jak říkám, nanosleep prej použít nemám, protože to uspává vlákno...Mne to přišlo jako log. řešení, když vzorkuji 1ms..
Naopak výpis rozdílu času jen když nastane událost(na vstupu bude 1) mi prostě nešel..

tady je kód:

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


extern "C" {

#include "libico.h" //mnou upraveny header pro DIO->kvuli prehlednosti fci

}

using namespace std;
using namespace boost::posix_time;


 void wait(int milli_seconds) { //fce casovace, defaultne jsem ji nastavil na 100[ms]

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

}

int nsleep(unsigned long millisec) {

struct timespec req = {0};
time_t sec = (int)(millisec/1000);
millisec = millisec - (sec*1000);
req.tv_sec = sec;
req.tv_nsec = millisec *1000000L;
while(nanosleep(&req, &req) == -1)

continue;

return 1;

};

struct bits {


unsigned bit0 : 1;
unsigned bit1 : 1;
unsigned bit2 : 1;
unsigned bit3 : 1;
unsigned bit4 : 1;
unsigned bit5 : 1;
unsigned bit6 : 1;
unsigned bit7 : 1;


};


 union u {

unsigned char status;
bits b;

 };


struct time {

boost::posix_time::ptime start_time, end_time;

int ps;


}times[8];



void thread_scanner() {

u PINS, ps;

while(true) {

ptime current_time = microsec_clock::local_time();

wait(1);

ICO300_get_DI(&PINS.status);


if(PINS.b.bit0 != 1)

{
times[0].start_time = current_time;

}

else
{
times[1].end_time = current_time;

}


nsleep(2000); //nanosleep, ceka 2sekundy



ptime t0  = times[0].start_time;
ptime t1  = times[0].end_time;
time_duration pin1 = t1-t0;

cout << " pin1 :"  << pin1.total_microseconds() << '\n';

};



int main() {


ICO300_set_DIO_mode(0xFF); //definovani DIO -> vsechny jsou vstupni -> 1

ICO300_set_DO(0); //pro bezproblemovost provozu jsem vynuloval DO

thread scanner{thread_scanner}; //inicializace vlakna

scanner.join();

return 0;

}


9
Vývoj / Re:Zápis času
« kdy: 29. 08. 2016, 16:07:05 »
Vypiš ten čas jen tehdy, když ta událost nebo co sleduješ končí, tím se vyhneš odčítání minulosti od přítomnosti. Pro těch zbylých 7 pinů asi nikde nenastavuješ start_time a ta proměnná se defaultně inicializuje na nulu, která zde znamená začátek UNIXové epochy, tedy 1. 1. 1970.

Jasný, to jsem si taky myslel, že se to defaultně nastavuje na 0.

Tady mám kód, u kterýho potřebuju, aby se mi vypsal ten rozdíl časů jakmile přijde událost. Použil jsem fci nanosleep ve vláknu, což je prej špatně, protože to vlákno to uspí..
V kódu mám zakomentovaný if podmínky , dle kterých by to logicky mělo jít, ale nejde. Tak budu rád, za nějaký konstruktivní návrh.


Kód: [Vybrat]
void wait(int milli_seconds) { //fce casovace, defaultne jsem ji nastavil na 100[ms]

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

}


Kód: [Vybrat]
/*

int nsleep(unsigned long millisec) {

struct timespec req = {0};
time_t sec = (int)(millisec/1000);
millisec = millisec - (sec*1000);
req.tv_sec = sec;
req.tv_nsec = millisec *1000000L;
while(nanosleep(&req, &req) == -1)

continue;

return 1;


};

*/


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

u PINS, ps;
ps.status = 0;





while(true) {

ptime current_time = microsec_clock::local_time();

wait(1);

ICO300_get_DI(&PINS.status);


if(PINS.b.bit0 != 1)

{
times[0].start_time = current_time;

}

else
{
times[1].end_time = current_time;

}



if(PINS.b.bit1 != 1)

{
times[2].start_time = current_time;

}

else

{

times[3].end_time = current_time;
}


if(PINS.b.bit2 != 1)

{
times[4].start_time = current_time;
}

else

{
times[5].end_time = current_time;
}

if(PINS.b.bit3 != 1)

{

times[6].start_time = current_time;
}


else

{
times[7].end_time = current_time;

}

if(PINS.b.bit4 != 1)

{
times[8].start_time = current_time;

}

else

{
times[9].end_time = current_time;

}

if(PINS.b.bit5 != 1)

{
times[10].start_time = current_time;

}

else

{
times[11].end_time = current_time;

}

if(PINS.b.bit6 != 1)

{
times[12].start_time = current_time;

}

else

{
times[13].end_time = current_time;

}

if(PINS.b.bit7 != 1)

{
times[14].start_time = current_time;

}


else

{
times[15].end_time = current_time;

}






// nsleep(2000);

wait(2000); //nanosleep, ceka 2sekundy

ptime t0  = times[0].start_time;
ptime t1  = times[1].end_time;
time_duration pin1 = t1-t0;

// if((pin1.total_microseconds() == 4000000)) {

// cout << " odchylka v [s]: "  << pin1.total_seconds() << endl;
// cout << " " << endl;
cout << " pin1 :"  << pin1.total_microseconds() << '\n';
// cout << " " << endl;
// cout << "odchylka v [ms]: "  << pin1.total_milliseconds() << endl;
// cout << " " << endl;
// cout << "zbytkove vteriny: " << pin1.fractional_seconds() << endl;

// }



ptime t2 = times[2].start_time;
ptime t3 = times[3].end_time;
time_duration pin2 = t3-t2;

// if((pin2.total_microseconds() == 4000000)) {


cout << " pin2: " << pin2.total_microseconds() << '\n';

// }



ptime t4 = times[4].start_time;
ptime t5 = times[5].end_time;
time_duration pin3 = t5-t4;

// if((pin3.total_microseconds() == 4000000)) {

cout << " pin3: " << pin3.total_microseconds() << '\n';

// }



ptime t6 = times[6].start_time;
ptime t7 = times[7].end_time;
time_duration pin4 = t7-t6;

// if((pin4.total_microseconds() == 4000000)) {


cout << " pin4: " << pin4.total_microseconds() << '\n';

// }



ptime t8 = times[8].start_time;
ptime t9 = times[9].end_time;
time_duration pin5 = t9-t8;

// if((pin5.total_microseconds() == 4000000)) {
cout << " pin5: " << pin5.total_microseconds() << '\n';

// }



ptime t10 = times[10].start_time;
ptime t11 = times[11].end_time;
time_duration pin6 = t11-t10;

// if((pin6.total_microseconds() == 4000000)) {

cout << " pin6: " << pin6.total_microseconds() << '\n';

// }



ptime t12 = times[12].start_time;
ptime t13 = times[13].end_time;
time_duration pin7 = t13-t12;

// if(( pin7.total_microseconds() == 4000000)) {

cout << " pin7: " << pin7.total_microseconds() << '\n';

// }




ptime t14 = times[14].start_time;
ptime t15 = times[15].end_time;
time_duration pin8 = t15-t14;

// if(( pin8.total_microseconds() == 4000000)) {

cout << " pin8: " << pin8.total_microseconds() << '\n';

// }

}



};

10
Vývoj / Re:Zápis času
« kdy: 29. 08. 2016, 14:56:18 »
Jak si mám zkorigovat čas, když se mi vypisuje záporně??? Jakmile sepne výstup tak se čas zapisuje kladně a jinak při odepnutym výstupu se vypisuje záporně?
A další věc, potřebuji aby se mi vypsal jen jeden řádek když dojde k události. Takhle mi to pulsuje furt do konsole a to se blbě čte. Mne nic nenapadá s tim výpisem.
Nemá cenu abys čas vypisoval při každé změně. Má cenu ho vypsat jen po zapsání end_time. Pokud ho vypisuješ po změně start_time, tak používáš starý end_time. Pak samozřejmě dostaneš záporný rozdíl.

No, vypisuji tam rozdíl start a end, jak to teda ošetřit??
Jo a ještě jedna věc, pro dalších 7 pinů mi to háže celkový čas v mikrosekundách od 1.1.1970, jak to ošetřit???

11
Vývoj / Re:Zápis času
« kdy: 29. 08. 2016, 10:53:06 »
Jak si mám zkorigovat čas, když se mi vypisuje záporně??? Jakmile sepne výstup tak se čas zapisuje kladně a jinak při odepnutym výstupu se vypisuje záporně?
A další věc, potřebuji aby se mi vypsal jen jeden řádek když dojde k události. Takhle mi to pulsuje furt do konsole a to se blbě čte. Mne nic nenapadá s tim výpisem.

12
Vývoj / Re:Zápis času
« kdy: 29. 08. 2016, 10:38:44 »
přehodit
   ptime current_time = microsec_clock::local_time();
   
   
while(true) {

super, díky!
Já si toho nevšiml, neměl jsem to předtim v cyklu.

13
Vývoj / Zápis času
« kdy: 29. 08. 2016, 10:26:28 »
Čau, potřebuju poradit ohledně zápisu času do pole.
Při změně stavu se mi má zapsat čas do pole -> start_time a end_time jakmile událost zmizí.
Jenže se zapisuje furt jeden a ten samý čas do start_time a do end_time.

tady je kód:

Kód: [Vybrat]
struct bits {


unsigned bit0 : 1;
unsigned bit1 : 1;
unsigned bit2 : 1;
unsigned bit3 : 1;
unsigned bit4 : 1;
unsigned bit5 : 1;
unsigned bit6 : 1;
unsigned bit7 : 1;


};


 union u {

unsigned char status;
bits b;

 };


struct time {

boost::posix_time::ptime start_time, end_time;

int ps;


}times[18];



void thread_scanner() {

u PINS, ps;
ps.status = 0;


ptime current_time = microsec_clock::local_time();


while(true) {

wait(1);

ICO300_get_DI(&PINS.status);

// PINS.status = PINS.b.bit0;


// if(PINS.b.bit0 != ps.b.bit0) {
 
cout << "hodnota_bit0: " << PINS.b.bit0 << endl;
cout << " " << endl;
cout << "cas start_time: " << times[0].start_time << endl;
cout << "cas end_time: " << times[1].end_time << endl;

{

if(PINS.b.bit0 != 1)

{
times[0].start_time = current_time;

}

else
{
times[1].end_time = current_time;

}

}

ptime t0  = times[0].start_time;
ptime t1  = times[1].end_time;
time_duration pin1 = t1-t0;
cout << " odchylka v sec: " << pin1.total_seconds() << endl;


}

};

Nulovat to pole nebo jak si to ošetřit???

14
Vývoj / Re:Časovač vláken v c++ pod Linuxem
« kdy: 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);

}


    }



}

15
Vývoj / Re:Prioritizace vláken v C
« kdy: 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

Stran: [1] 2 3 ... 5