Zápis času

e3k

Re:Zápis času
« Odpověď #15 kdy: 29. 08. 2016, 21:14:31 »
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.


Re:Zápis času
« Odpověď #16 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...

Re:Zápis času
« Odpověď #17 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í...

Mirek

Re:Zápis času
« Odpověď #18 kdy: 29. 08. 2016, 23:19:37 »
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...
[/quote]
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.

Re:Zápis času
« Odpověď #19 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.