Skip to content

Commit

Permalink
minor changes
Browse files Browse the repository at this point in the history
  • Loading branch information
mariusmm committed Apr 9, 2019
1 parent 30fe8af commit f4f92de
Show file tree
Hide file tree
Showing 3 changed files with 12 additions and 16 deletions.
24 changes: 10 additions & 14 deletions capitol_2.tex
Original file line number Diff line number Diff line change
Expand Up @@ -7,9 +7,9 @@ \chapter{Breu introducció als sistemes encastats}

Els components hardware es poden dividir en tres grans blocs:
\begin{itemize}
\item Procés de dades: dispositiu amb la capacitat de gestionar dades, entrada sortida, etc. Pot ser un microcontrolador, un \gls{DSP}, una \gls{FPGA}, un \gls{ASIC} o un sistema hibrid que incorpori varis dels anteriors dins el mateix hardware.
\item Sensors o introducció de dades. Qualsevol dispositiu que rep estímuls del mon físic i els converteix en dades, ja siguin digitals o analògiques (termòmetre, pantalla tàctil, acceleròmetre, etc.).
\item Actuadors o presentació de dades. Qualsevol dispositiu que rep una dada o sèrie de dades i ho converteix en una acció física (motor, pantalla, relé, etc.).
\item procés de dades: dispositiu amb la capacitat de gestionar dades, entrada sortida, etc. Pot ser un microcontrolador, un \gls{DSP}, una \gls{FPGA}, un \gls{ASIC} o un sistema hibrid que incorpori varis dels anteriors dins el mateix hardware.
\item sensors o introducció de dades. Qualsevol dispositiu que rep estímuls del mon físic i els converteix en dades, ja siguin digitals o analògiques (termòmetre, pantalla tàctil, acceleròmetre, etc.).
\item actuadors o presentació de dades. Qualsevol dispositiu que rep una dada o sèrie de dades i ho converteix en una acció física (motor, pantalla, relé, etc.).
\end{itemize}


Expand Down Expand Up @@ -116,7 +116,7 @@ \subsection{Perifèrics mapats a memòria}
\item etc.
\end{itemize}

Dins de la primera zona hi trobem la zona DI ({\em Device Information}) de ladreça 0x0FE0\_8000 fins a 0x0FE0\_8400. Aquesta zona guarda certs valors únics per a cada dispositiu. En aquest espai, els registres MEM\_INFO\_FLASH, MEM\_INFO\_RAM i PART\_FAMILY els podem llegir fàcilment \cite[24]{EFM32GRM} (Figura~\ref{fig:EFM32_DI}):
Dins de la primera zona hi trobem la zona DI ({\em Device Information}) de l'adreça 0x0FE0\_8000 fins a 0x0FE0\_8400. Aquesta zona guarda certs valors únics per a cada dispositiu. En aquest espai, els registres MEM\_INFO\_FLASH, MEM\_INFO\_RAM i PART\_FAMILY els podem llegir fàcilment \cite[24]{EFM32GRM} (Figura~\ref{fig:EFM32_DI}):

\begin{figure}
\centering
Expand All @@ -143,12 +143,11 @@ \subsection{Perifèrics mapats a memòria}
}
\end{lstlisting}

Al codi del Llistat~\ref{memorymappedCode} es defineixen les 3 adreces de memòria per ser accedides fent servir un punter. Així, llegint el valor de les definicions FLASH\_INFO, RAM\_INFO o PART\_INFO saccedeix a la posició de memòria definida de forma directa. Per fer una escriptura es faria igual, però en l'exemple no es pot escriure a cap d'aquests registres. Debugant el codi línia a línia veurem que la variable aux pren el valor corresponent a cada un dels registres mapats.
Al codi del Llistat~\ref{memorymappedCode} es defineixen les 3 adreces de memòria per ser accedides fent servir un punter. Així, llegint el valor de les definicions FLASH\_INFO, RAM\_INFO o PART\_INFO s'accedeix a la posició de memòria definida de forma directa. Per fer una escriptura es faria igual, però en l'exemple no es pot escriure a cap d'aquests registres. Debugant el codi línia a línia veurem que la variable aux pren el valor corresponent a cada un dels registres mapats.

Enlloc d'accedir a cada registre per separat, com hem fet a l'exemple, es pot definir una estructura que es correspongui amb cada un dels registres dun perifèric en concret i que aquesta apunti a l'adreça base del perifèric. Així, per accedir a un registre en concret només caldrà accedir al camp de l'estructura definida.
Enlloc d'accedir a cada registre per separat, com hem fet a l'exemple, es pot definir una estructura que es correspongui amb cada un dels registres d'un perifèric en concret i que aquesta apunti a l'adreça base del perifèric. Així, per accedir a un registre en concret només caldrà accedir al camp de l'estructura definida.

Un exemple d'això el tenim a fitxer efm32g\_devinfo.h, que defineix
una estructura d'aquest estil, com es veu al Llistat~\ref {devinfo}.
Un exemple d'això el tenim a fitxer efm32g\_devinfo.h, que defineix una estructura d'aquest estil, com es veu al Llistat~\ref {devinfo}.

\begin{lstlisting}[label=devinfo,caption={Exemple de definició d'estructura per accedir a memòria},style=customc]
typedef struct
Expand Down Expand Up @@ -180,8 +179,7 @@ \subsection{Perifèrics mapats a memòria}
#define DEVINFO ((DEVINFO_TypeDef *) DEVINFO_BASE) /**< DEVINFO base ptr */
\end{lstlisting}

De manera que es pot accedir als mateixos registres com s'indica al
Llistat~\ref {devinfouse}. Que és una forma bastant més còmoda de treballar.
De manera que es pot accedir als mateixos registres com s'indica al Llistat~\ref {devinfouse}. Que és una forma bastant més còmoda de treballar.

\begin{lstlisting}[label=devinfouse,caption={Ús de l'estructura d'accés},style=customc]
aux = DEVINFO->MSIZE;
Expand All @@ -190,8 +188,6 @@ \subsection{Perifèrics mapats a memòria}

Per sort, la majoria de fabricants proporcionen llibreries de baix nivell que ens estalvien tant conèixer tots els detalls de cada un dels perifèrics com d'haver de manegar els registres un a un: pel cas de SiliconLabs aquestes llibreries s'agrupen sota la EMLIB \cite{EMLIB}; en el cas de l'empresa ST ens proporciona la biblioteca {\em STM32 Standard Peripheral Libraries} \cite{STM32Lib} o la més moderna {\em STM32Cube hardware abstraction layer (HAL)} \cite{STM32CubeHAL}.

% \fbox{El codi d'aquest exemples està al \href{https://github.com/mariusmm/cursembedded/tree/master/Simplicity/MemoryMap}{repositori del curs}}

El codi d'aquests exemples està al \href{https://github.com/mariusmm/cursembedded/tree/master/Simplicity/MemoryMap}{repositori del curs}

\subsection{Mida del codi i seccions de memòria}
Expand Down Expand Up @@ -227,7 +223,7 @@ \subsection{Procés de {\em boot}}

\section{Rapidesa d'un microcontrolador}
\label{sub:speedtest}
Molts cops no ens fem a la idea de com de ràpid és la CPU d’un microcontrolador. Estem acostumats a llegir i escoltar freqüències de funcionament dels microprocessadors descriptori o de servidor, que actualment són de Gigahertz i els nostres pobres microcontroladors van, en el millor dels casos, a uns quants pocs Megahertz. Això ens pot fer pensar que els nostres microcontroladors són lents i que no poden fer gaire coses.
Molts cops no ens fem a la idea de com de ràpid és la CPU d’un microcontrolador. Estem acostumats a llegir i escoltar freqüències de funcionament dels microprocessadors d'escriptori o de servidor, que actualment són de Gigahertz i els nostres pobres microcontroladors van, en el millor dels casos, a uns quants pocs Megahertz. Això ens pot fer pensar que els nostres microcontroladors són lents i que no poden fer gaire coses.

Podem comprovar-ho empíricament.

Expand Down Expand Up @@ -256,7 +252,7 @@ \subsection{Millor mesura de temps}
\label{sub:speedtest_example}
El \href{https://github.com/mariusmm/cursembedded/tree/master/Simplicity/SpeedTest_2}{segon exemple} és una mica més complicat. Per tal de mesurar el temps que es pitja el botó, farem servir un {\em Timer}, que ja ho veurem més endavant (veure \fullref{sub:Timers}). El que es fa a l'exemple és mesurar acuradament el temps que està el botó pitjat i calcular el nombre d'operacions que s'ha fet en aquell temps.

Com podem veure a la Taula~\ref{tb:SpeedTest} el nombre doperacions per segon es manté constant independentment del temps que estiguem pitjant el botó i és un número força alt, 134.000 sumes per segon!!!
Com podem veure a la Taula~\ref{tb:SpeedTest} el nombre d'operacions per segon es manté constant independentment del temps que estiguem pitjant el botó i és un número força alt, 134.000 sumes per segon!!!

\begin{table}[t!]
\caption{Mesures de temps i sumes per segon}
Expand Down
3 changes: 1 addition & 2 deletions capitol_5.tex
Original file line number Diff line number Diff line change
Expand Up @@ -473,7 +473,6 @@ \section{FSMs amb temps}

\begin{lstlisting}[style=customc,caption={FSM amb control del temps},label=FSM_temps]
const int period = 50; // period time in miliseconds
int start_time, end_time, iteration_time;

void loop() {
uint32_t start_time, end_time, iteration_time;
Expand Down Expand Up @@ -534,7 +533,7 @@ \section{Tasques periòdiques}
Posar processador en mode de baix consum
/* Aqui el processador esta suspes esperant algun esdeveniment o que es dispari un timer */

Averiguar quina tasca toca executar-se
Esbrinar quina tasca toca executar-se
Executar tasca
(Opcional) Cridar a una funcio generica de l'usuari
}
Expand Down
1 change: 1 addition & 0 deletions main.tex
Original file line number Diff line number Diff line change
Expand Up @@ -211,6 +211,7 @@

\noindent \textit{Versió: 1.0} % Printing/edition date

\noindent \textit{Data: \today}
\par

\begin{mdframed}[outerlinecolor=black,outerlinewidth=2pt,linecolor=cccolor,middlelinewidth=3pt,roundcorner=10pt]
Expand Down

0 comments on commit f4f92de

Please sign in to comment.