THMMY.gr

Μαθήματα Κύκλου Ηλεκτρονικής & Υπολογιστών => Ενσωματωμένα Συστήματα Πραγματικού Χρόνου => Topic started by: ScytheB on June 01, 2013, 11:23:05 am



Title: [Ενσωματωμένα] Εργασία 2013
Post by: ScytheB on June 01, 2013, 11:23:05 am
Είπα να κάνω την αρχή φέτος, κατόπιν προτροπής και απο τον Κ. Πιτσιάνη.

Ερώτηση, ξέρει κανείς τι σημαίνει το "Η εντολή αλλάζει κατάσταση και πέρνει νέο timestamp" ? Αναφερόμαστε στην στιγμή που θα διεκπεραιωθεί εξ'ολοκλήρου; Αφού δεν έχει "κατάσταση" μια εντολή.

Επίσης μπορώ να χρησιμοποιήσω semaphores ή αυστηρά mutex/cond ?

Α , και αν έχει κανεις κανα searchable priority queue για C , να μου το στείλει, θα ήμουν ευγνώμων... Αλλιώς πρέπει να φτιάξω δικό μου *sigh* ...


Title: Re: [Ενσωματωμένα] Εργασία 2013
Post by: LoCo on August 03, 2013, 23:37:50 pm
1. πιστευω οτι το timestamp αναφερεται σε μεταβολη καταστασης της εντολης, για παραδειγμα οταν δημιουργειται, οταν μπαινει σε αναμονη, οταν εκτελειται, οταν ολοκληρωθει κλπ κλπ

2. χρησιμοποιησε οτι θελεις, αρκει να δουλεψει σωστα


Title: Re: [Ενσωματωμένα] Εργασία 2013
Post by: .nikos. on September 29, 2013, 21:52:30 pm
Ένα πρόβλημα που μάλλον θα έχετε όλοι είναι ότι η τιμή πέφτει <=> γεμίζουν οι ουρές limit. Αν τα έχετε όλα σωστά, τότε ο λόγος είναι ότι η κατανομή της τιμής μίας μετοχής limit δεν είναι σωστή. Η εντολή είναι:

ord.price = currentPriceX10 + 10*(0.5 − (double)rand()/((double)RAND_MAX));

Καθώς υπάρχει μετατροπή από τύπου double σε int πραγματοποιείται μία κατωφλίωση (floor) οπότε οι περισσότερες τιμές είναι <currentPriceX10 - ουσιαστικά δεν υπάρχουν τιμές ίσες με currentPriceX10+5 ενώ υπάρχουν τιμές ίσες με currentPriceX10-5.

Ελπίζω να βοήθησα, γιατί μου πήρε χρόνο μέχρι να καταλάβω πως το πρόβλημα ήταν εκεί (δηλ. στον κώδικα της εκφώνησης).



Title: Re: [Ενσωματωμένα] Εργασία 2013
Post by: fcdimitr on October 03, 2013, 17:07:53 pm
Ρωτήσαμε τον κ. Πιτσιάνη και η εργασία πήρε παράταση μέχρι το τέλος του Σαββατοκύριακου


Title: Re: [Ενσωματωμένα] Εργασία 2013
Post by: plagakis on October 04, 2013, 18:42:17 pm
Ένα πρόβλημα που μάλλον θα έχετε όλοι είναι ότι η τιμή πέφτει <=> γεμίζουν οι ουρές limit. Αν τα έχετε όλα σωστά, τότε ο λόγος είναι ότι η κατανομή της τιμής μίας μετοχής limit δεν είναι σωστή. Η εντολή είναι:

ord.price = currentPriceX10 + 10*(0.5 − (double)rand()/((double)RAND_MAX));

Καθώς υπάρχει μετατροπή από τύπου double σε int πραγματοποιείται μία κατωφλίωση (floor) οπότε οι περισσότερες τιμές είναι <currentPriceX10 - ουσιαστικά δεν υπάρχουν τιμές ίσες με currentPriceX10+5 ενώ υπάρχουν τιμές ίσες με currentPriceX10-5.

Ελπίζω να βοήθησα, γιατί μου πήρε χρόνο μέχρι να καταλάβω πως το πρόβλημα ήταν εκεί (δηλ. στον κώδικα της εκφώνησης).


Οπότε πώς λύνουμε το πρόβλημα; Αλλάζουμε το πως παράγεται η τιμή;

Επίσης, και γω δεν έχω καταλάβει το νόημα αυτών των κανόνων:
"Οι εντολές που αλλάζουν κατάσταση παίρνουν καινούριο timestamp τη στιγμή της αλλαγής.
Οι αλλαγές κατάστασης γίνονται ταυτόχρονα με την αλλαγή της τρέχουσας τιμής."