Apostolos Fanakis
6 years ago
14 changed files with 27200 additions and 15 deletions
@ -0,0 +1,3 @@ |
|||||
|
\section{Εισαγωγή} |
||||
|
|
||||
|
Η παρούσα εργασία εκπονήθηκε στα πλαίσια του μαθήματος ``Ενσωματωμένα Συστήματα Πραγματικού Χρόνου'' του ενάτου (8\textsuperscript{ου}) εξαμήνου του τμήματος Ηλεκτρολόγων Μηχανικών και Μηχανικών Υπολογιστών του Αριστοτέλειου Πανεπιστημίου Θεσσαλονίκης. Ζητούμενο του πρώτου παραδοτέου της εργασίας είναι η πειραματική υλοποίηση προγράμματος σε C με στόχο τη δειγματοληψία ανά τακτά χρονικά διαστήματα με την ελάχιστη δυνατή απόκλιση από τη πραγματική περίοδο δειγματοληψίας. Στην αναφορά αναλύονται τα πειράματα που υλοποιήθηκαν και τα αποτελέσματά τους. |
@ -0,0 +1,25 @@ |
|||||
|
\section{Κώδικας} |
||||
|
|
||||
|
Ο κώδικας είναι διαθέσιμος, μέσω ενός gitlab repository, στη παρακάτω διεύθυνση. |
||||
|
|
||||
|
\url{https://gitlab.com/apostolof-ece-auth-gr/authRTESTask1} |
||||
|
|
||||
|
Η δομή των αρχείων είναι ως εξής: |
||||
|
\begin{itemize} |
||||
|
\item Ο φάκελος report περιέχει τον κώδικα σε latex της παρούσας αναφοράς |
||||
|
\item Το αρχείο test\_sample.c περιέχει την συνάρτηση main |
||||
|
\item Το αρχείο test\_sample\_functions.h περιέχει τις δηλώσεις των συναρτήσεων, σταθερών, δομών (structs) και άλλες παραμέτρους του προγράμματος |
||||
|
\item Το αρχείο test\_sample\_functions.c περιέχει τις υλοποιήσεις των συναρτήσεων |
||||
|
\end{itemize} |
||||
|
|
||||
|
|
||||
|
Παρέχεται επίσης αρχείο Makefile για εύκολο compilation του προγράμματος χρησιμοποιώντας την εντολή \texttt{make}. |
||||
|
|
||||
|
Το πρόγραμμα δέχεται τρεις προαιρετικές παραμέτρους και εκτελείται με την εντολή \texttt{./test\_sample [-t time] [-d delta] [-o output]}, όπου: |
||||
|
\begin{itemize} |
||||
|
\item \textbf{time} είναι ο χρόνος δειγματοληψίας σε δευτερόλεπτα για τον οποίο τρέχει κάθε πείραμα, προκαθορισμένη τιμή 7200 δευτερόλεπτα |
||||
|
\item \textbf{delta} είναι η περίοδος δειγματοληψίας σε δευτερόλεπτα, προκαθορισμένη τιμή 0,1 δευτερόλεπτα |
||||
|
\item \textbf{output} είναι το όνομα του αρχείου εξόδου, προκαθορισμένο όνομα αρχείου ``sample\_test\_output'' |
||||
|
\end{itemize} |
||||
|
|
||||
|
Οι βασικές συναρτήσεις που υλοποιούν τα πειράματα και ενδιαφέρουν τον αναγνώστη είναι η συνάρτηση \texttt{main} στο αρχείο \texttt{test\_sample.c} και η συνάρτηση \texttt{testSampling} στο αρχείο \texttt{test\_sample\_functions.c}. Περισσότερες πληροφορίες για την \texttt{testSampling} δίνονται στο επόμενο κεφάλαιο. |
@ -0,0 +1,11 @@ |
|||||
|
\section{Πειράματα} |
||||
|
|
||||
|
Στο πρόγραμμα που παραδίδεται υλοποιούνται τέσσερα πειράματα. Όλα τα πειράματα υλοποιούνται διαδοχικά στο σώμα της συνάρτησης \texttt{testSampling}. |
||||
|
|
||||
|
Στο πρώτο πείραμα (lines 29-38) γίνεται χρήση μόνο της συνάρτησης sleep με στόχο την αναστολή της εκτέλεσης του προγράμματος για χρόνο ίσο με τη περίοδο δειγματοληψίας. Έπειτα εξάγεται και αποθηκεύεται ένα timestamp. Η διαδικασία αυτή γίνεται επαναληπτικά έως ότου ξεπεραστεί ο επιθυμητός χρόνος δειγματοληψίας. |
||||
|
|
||||
|
Στο δεύτερο πείραμα (lines 40-52) ακολουθείται η ίδια διαδικασία με το προηγούμενο πείραμα, αυτή τη φορά όμως διατηρείται ο μέσος όρος του σφάλματος μεταξύ της επιθυμητής και της πραγματικής περιόδου δειγματοληψίας. Ο μέσος όρος αυτός αφαιρείται από την περίοδο δειγματοληψίας κατά την κλήση της συνάρτησης sleep, με τον τρόπο αυτό επιδιώκεται η διόρθωση των αποκλίσεων της πραγματικής περιόδου δειγματοληψίας από την επιθυμητή. Μία μέθοδος που πιθανόν να επέφερε καλύτερα αποτελέσματα είναι η υλοποίηση ενός φίλτρου Wiener. |
||||
|
|
||||
|
Στο τρίτο πείραμα (lines 54-82) γίνεται χρήση διακοπών για την επίτευξη του ίδιου σκοπού. Το πρόγραμμα θέτει μία επαναλαμβανόμενη διακοπή, η οποία έρχεται με τη μορφή σήματος (signal). Ορίζεται μία σημαία \texttt{sample\_flag} η οποία γίνεται αληθής (true) κατά τη λήψη σήματος από διακοπή. Η διεργασία (process) ελέγχει τη σημαία επαναληπτικά. Όταν η σημαία γίνει αληθής εξάγει και αποθηκεύει το timestamp και θέτει ξανά τη σημαία ψευδή (false). |
||||
|
|
||||
|
Στο τέταρτο πείραμα (lines 85-105) γίνεται χρήση τόσο της συνάρτησης sleep όσο και διακοπών. Το πείραμα θέτει και πάλι μία επαναλαμβανόμενη διακοπή. Ωστόσο, κατά την αναμονή σήματος διακοπής η διεργασία αναστέλλεται με χρήση της συνάρτησης sleep. Το πείραμα βασίζεται στο γεγονός ότι τα εισερχόμενα σήματα, αυτό της διακοπής στη προκειμένη περίπτωση, επαναφέρουν τη διεργασία του προγράμματος στο προσκήνιο, πρακτικά ακυρώνοντας τη διαδικασία sleep. Με τη τροποποίηση αυτή είναι επιθυμητή η κατανάλωση λιγότερης ενέργειας. |
@ -0,0 +1,37 @@ |
|||||
|
\section{Αποτελέσματα} |
||||
|
|
||||
|
Παρακάτω φαίνονται τα αποτελέσματα των πειραμάτων για εκτέλεση δειγματοληψίας διάρκειας δύο ωρών με περίοδο 0,1 δευτερόλεπτα. |
||||
|
|
||||
|
\begin{table}[H] |
||||
|
\centering |
||||
|
\begin{tabular}{l r r r r} \toprule |
||||
|
\multirow{2}{*}{Στατιστική} & \multicolumn{4}{c}{Πείραμα \#} \\ |
||||
|
\cmidrule{2-5} |
||||
|
& 1 & 2 & 3 & 4\\ |
||||
|
Ελάχιστο & 0.100073 & 0.099967 & 0.091687 & 0.092948 \\ |
||||
|
Μέγιστο & 0.132050 & 0.104576 & 0.108309 & 0.106863 \\ |
||||
|
Μέσος όρος & 0.100207 & 0.100101 & 0.09999905 & 0.09999974 \\ |
||||
|
Διάμεσος & 0.100203 & 0.100099 & 0.099998 & 0.099999 \\ |
||||
|
Τυπική απόκλιση & 0.000146 & 0.00006 & 0.000154 & 0.099989 \\ \bottomrule |
||||
|
\end{tabular} |
||||
|
\caption{Στατιστικές αποτελεσμάτων πειραμάτων. Όλα τα αποτελέσματα του πίνακα έχουν μονάδα μέτρησης το δευτερόλεπτο.} |
||||
|
\label{results_table} |
||||
|
\end{table} |
||||
|
|
||||
|
Όπως φαίνεται από τον πίνακα \ref{results_table} η μέθοδος της αντιστάθμισης της περιόδου δειγματοληψίας με βάση το μέσο όρο του σφάλματος στο δεύτερο πείραμα ήταν επιτυχής, καθώς το πείραμα απέδωσε καλύτερα αποτελέσματα από το πρώτο. Ακόμα, τα πειράματα που κάνουν χρήση διακοπών (τρίτο και τέταρτο πείραμα) απέδωσαν καλύτερα από αυτά με την απλή χρήση sleep (πρώτο και δεύτερο πείραμα). |
||||
|
|
||||
|
\begin{figure}[H] |
||||
|
\centering |
||||
|
\resizebox{\textwidth}{!}{ |
||||
|
\includegraphics[scale=1]{res/diagrams/graph_exp_12.eps} |
||||
|
} |
||||
|
\caption{Απόκλιση χρόνων δειγματοληψείας για τα πειράματα ένα και δύο} |
||||
|
\end{figure} |
||||
|
|
||||
|
\begin{figure}[H] |
||||
|
\centering |
||||
|
\resizebox{\textwidth}{!}{ |
||||
|
\includegraphics[scale=1]{res/diagrams/graph_exp_34.eps} |
||||
|
} |
||||
|
\caption{Απόκλιση χρόνων δειγματοληψείας για τα πειράματα τρία και τέσσερα} |
||||
|
\end{figure} |
@ -0,0 +1 @@ |
|||||
|
\tableofcontents |
@ -0,0 +1 @@ |
|||||
|
\maketitle |
Binary file not shown.
@ -0,0 +1,48 @@ |
|||||
|
\documentclass[11pt]{article} |
||||
|
\usepackage{geometry} |
||||
|
\geometry{a4paper, top=2.5cm, bottom=2.5cm, left=2.2cm, right=2.2cm} |
||||
|
\usepackage{fontspec} |
||||
|
\usepackage[nonumeralsign]{xgreek} |
||||
|
\usepackage{fancyhdr} |
||||
|
\usepackage{hyperref} |
||||
|
\usepackage{enumitem} |
||||
|
\usepackage{cite} |
||||
|
\usepackage{authblk} |
||||
|
\usepackage{booktabs} |
||||
|
\usepackage{float} |
||||
|
\usepackage{multirow} |
||||
|
\usepackage[all]{hypcap} |
||||
|
\usepackage{graphicx} |
||||
|
\graphicspath{{res/diagrams/}} |
||||
|
|
||||
|
\setmainfont{Lato} |
||||
|
|
||||
|
\setlength{\parskip}{\baselineskip} |
||||
|
%\setlength{\parindent}{0pt} |
||||
|
|
||||
|
\title{Ενσωματωμένα Συστήματα Πραγματικού Χρόνου \\ |
||||
|
\Large Πρώτη εργασία} |
||||
|
|
||||
|
\author[1]{Φανάκης Απόστολος, 8261 \\ |
||||
|
apostolof@ece.auth.gr} |
||||
|
\date{\today} |
||||
|
|
||||
|
\pagestyle{fancy} |
||||
|
\lhead{Real Time and Embedded Systems} |
||||
|
\rhead{} |
||||
|
\renewcommand{\headrulewidth}{0.4pt} |
||||
|
\renewcommand{\footrulewidth}{0.4pt} |
||||
|
\setlength{\headheight}{14pt} |
||||
|
|
||||
|
\hypersetup{colorlinks=true, linkcolor=black, urlcolor=blue, citecolor=blue} |
||||
|
\urlstyle{same} |
||||
|
|
||||
|
\begin{document} |
||||
|
|
||||
|
\input{front_page.tex} |
||||
|
\input{1.introduction.tex} |
||||
|
\input{2.code.tex} |
||||
|
\input{3.experiments.tex} |
||||
|
\input{4.results.tex} |
||||
|
|
||||
|
\end{document} |
File diff suppressed because it is too large
File diff suppressed because it is too large
Loading…
Reference in new issue