Skip to content

Commit

Permalink
minor changes, typos, style
Browse files Browse the repository at this point in the history
  • Loading branch information
mariusmm committed Feb 26, 2019
1 parent f7f57f8 commit 709e8ed
Show file tree
Hide file tree
Showing 4 changed files with 57 additions and 14 deletions.
39 changes: 31 additions & 8 deletions acronyms.tex
Original file line number Diff line number Diff line change
Expand Up @@ -80,11 +80,13 @@

\newglossaryentry{pull-up}{
name={Pull-up},
text={pull-up},
description={Resistència connectada a alimentació per forçar un valor d''1' a una línia o bus}
}

\newglossaryentry{pull-down}{
name={Pull-down},
text={pull-down},
description={Resistència connectada a terra per forçar un valor d''0' a una línia o bus}
}

Expand All @@ -99,8 +101,10 @@
}

\newglossaryentry{Watchdog}{
name={Watchdog},
description={Perifèric que reinicia el sistema si no s'hi accdeix periòdicament}
name={\em Watchdog},
text={\em watchdog},
description={Perifèric que reinicia el sistema si no s'hi accdeix periòdicament},
sort=Watchdog
}

\newglossaryentry{dead-lock}{
Expand All @@ -109,7 +113,8 @@
}

\newglossaryentry{memory mapped}{
name={\em memory mapped},
name={\em Memory mapped},
text={\em memory mapped},
description={Assignar una posició de memòria a un component HW per facilitar el seu accés},
sort=memory mapped
}
Expand All @@ -121,16 +126,19 @@

\newglossaryentry{callback}{
name={Callback},
text={callback},
description={Funció que es crida en quan acaba un procés}
}

\newglossaryentry{buffer circular}{
name={Buffer circular},
text={buffer circular},
description={Estructura de dades que utilitza un sol buffer i que es pot accedir-ho de forma circular}
}

\newglossaryentry{duty cycle}{
name={Duty cycle},
text={duty cycle},
description={Cicle de treball, és la relació que existeix entre el temp que un senyal esta a '1' i el periode d'aquest senyal}
}

Expand All @@ -146,35 +154,41 @@

\newglossaryentry{task}{
name={Task},
text={task},
description={Funció que implementa un procés de SO juntament amb l'{\em stack} corresponent}
}

\newglossaryentry{tick}{
name={\em Tick},
text={\em tick},
description={Esdeveniment periòdic per a que el Sistema Operatiu prengui el controll de l'execució},
sort=Tick
}

\newglossaryentry{stack}{
name={\em Stack},
text={\em stack},
description={Regió de memòria on emmagatzemar dades pròpies d'una tasca},
sort=Stack
}

\newglossaryentry{race condition}{
name={\em race condition},
name={\em Race condition},
text={\em race condition},
description={Error provocat per l'exeucuó simultànea de dues o més tasques},
sort=Race condition
}

\newglossaryentry{flag}{
name={\em flag},
name={\em Flag},
text={\em flag},
description={Un {\em flag} és un bit que indica algun valor determinat d'un dispositiu o dada},
sort=Flag
}

\newglossaryentry{open drain}{
name={\em open drain},
name={\em Open drain},
text={\em Open drain},
description={Tipus de sortida que només pot forçar un valor de '0', per tant li cal un \gls{pull-up} per funcionar correctament},
sort=Open
}
Expand All @@ -198,13 +212,22 @@
}

\newglossaryentry{layout}{
name={\em layout},
name={\em Layout},
text={\em layout},
description={Dibuix final de com queda la PCB a dissenyar},
sort=layout
}

\newglossaryentry{macro}{
name={\em macro},
name={\em Macro},
text={\em macro},
description={Tros de codi que té assignat un nom, de manera que cada cop que s'inserta el nom es canvia pel codi definit prèviament},
sort=macro,
}

\newglossaryentry{wrapper}{
name={\em Wrapper},
text={\em wrapper},
description={Tros de codi que embolcalla un altre per donar-li una interfície comuna},
sort=wrapper,
}
9 changes: 5 additions & 4 deletions capitol_3.tex
Original file line number Diff line number Diff line change
Expand Up @@ -132,7 +132,7 @@ \section{{\em Systick}}
Aquest {\em timer} està pensat perquè els S.O. el puguin fer servir, i com que està integrat dins el {\em core} Cortex, la portabilitat dels S.O. entre diferents fabricants serà molt senzilla (seria més complicat haver de fer un port per cada {\em timer} diferent de cada fabricant).

%%ATENCIO: Trenco manualment CMU\_ClockFreqGet\\(cmuClock\_CORE) pq Latex no ho fa be
L'exemple al repositori implementa una funció de {\bf Delay()}\index{Delay()}. El que es fa és configurar el {\em Systick} perquè generi una interrupció cada 1 mil·lisegon (Llistat~\ref{systickconfig}). Com que la funció {\bf CMU\_ClockFreqGet\\(cmuClock\_CORE)}\index{CMU\_ClockFreqGet()} retorna la freqüència de funcionament del rellotge del sistema, al dividir-la per 1000 i configurar el Systick amb aquest valor, generarà una interrupció cada mil·lisegon.
L'\href{https://github.com/mariusmm/cursembedded/tree/master/Simplicity/Systick}{exemple al repositori} implementa una funció de {\bf Delay()}\index{Delay()}. El que es fa és configurar el {\em Systick} perquè generi una interrupció cada 1 mil·lisegon (Llistat~\ref{systickconfig}). Com que la funció {\bf CMU\_ClockFreqGet\\(cmuClock\_CORE)}\index{CMU\_ClockFreqGet()} retorna la freqüència de funcionament del rellotge del sistema, al dividir-la per 1000 i configurar el Systick amb aquest valor, generarà una interrupció cada mil·lisegon.

A la ISR corresponent s'incrementa una variable global per tenir un comptatge dels mil·lisegons transcorreguts (veure Llistat~\ref{systickISR}). La variable {\bf msTicks} s'ha definit com a {\bf volatile} pel que s'explicarà a \fullref{sb:volatile}.

Expand Down Expand Up @@ -170,6 +170,7 @@ \section{{\em Systick}}

\chapter{GPIO}
\label{sub:GPIO_2}
\glsreset{GPIO}
Diem \gls{GPIO} al perifèric encarregat de la gestió de l'entrada i sortida de propòsit general. Fent servir aquest perifèric podrem configurar l'entrada o la sortida d'un pin concret del microcontrolador i posar-hi el valor desitjat ('0' o '1') o llegir quin valor hi ha posat algun altre dispositiu.

De forma general, un pin en concret el podrem configurar perquè treballi com a entrada o com a sortida. Si un pin està configurat com a entrada, el valor de voltatge elèctric que tingui a l'entrada del pin, es podrà llegir per part del codi del microcontrolador. De forma inversa, un pin configurat com a sortida posarà el valor elèctric equivalent al valor que el codi escrigui.
Expand Down Expand Up @@ -197,7 +198,7 @@ \chapter{GPIO}
\begin{figure}
\centering
\includegraphics[width=0.85\textwidth, keepaspectratio]{imatges/buttons.png}
\caption{Esquemàtic amb resistències de {\em pull-ups}}{Esquemàtic amb resistències de {\em pull-ups} (etiquetades com R101 i R102)}
\caption[Esquemàtic amb resistències de {\em pull-ups}]{Esquemàtic amb resistències de {\em pull-ups} (etiquetades com R101 i R102)}
\label{fig:pullup}
\end{figure}

Expand Down Expand Up @@ -346,7 +347,7 @@ \chapter{Controlador d'interrupcions}

El controlador d'interrupcions gestiona quines interrupcions rebudes arriben al processador, segons les prioritats i si la interrupció concreta està activada o no.

Veurem un cas amb els GPIO, el codi està disponible \href{https://github.com/mariusmm/cursembedded/tree/master/Simplicity/GPIO_2}{al repositori} . En aquest cas, el que es fa primer és configurar els pins perquè generin una interrupció HW al flanc de baixada (recordem el {\em pull-up} a la PCB, Figura~\ref{fig:pullup}). Tot seguit s'activen les interrupcions corresponents.
Veurem un cas amb els GPIO, el codi està disponible \href{https://github.com/mariusmm/cursembedded/tree/master/Simplicity/GPIO_2}{al repositori}. En aquest cas, el que es fa primer és configurar els pins perquè generin una interrupció HW al flanc de baixada (recordem el {\em pull-up} a la PCB, Figura~\ref{fig:pullup}). Tot seguit s'activen les interrupcions corresponents.
\index{NVIC\_EnableIRQ()}\index{GPIO\_IntConfig()}
\begin{lstlisting}[style=customc]
/* Set Interrupt configuration for both buttons */
Expand Down Expand Up @@ -394,7 +395,7 @@ \section{Escrivint ISRs en C}

Tradicionalment les adreces a aquestes \glspl{ISR} (anomenats de vegades vectors d'interrupció) s'emmagatzemaven a una zona especial de la memòria del processador. Quan el processador rebia una \gls{IRQ}, com que aquestes van numerades simplement calcula l'offset de la IRQ a la taula de ISRs i executa aquella funció determinada.

En els ARM Cortex amb els que treballem això es fa tal qual acabem d'explicar (link a la documentació d'ARM). En el cas dels Cortex (i la majoria de microcontroladors i processadors) la taula de vectors d'interrupcions es col·loca a la posició 0 de memòria.
En els ARM Cortex amb els que treballem això es fa tal qual acabem d'explicar. En el cas dels Cortex (i la majoria de microcontroladors i processadors) la taula de vectors d'interrupcions es col·loca a partir de la posició 0 de memòria.

El que cal, doncs, és que les nostres eines de compilació posin aquests vectors com toca a cada un dels binaris que generem. En el cas de les eines per Cortex (tant Simplicity com les eines de ST ho fan així), aprofiten un codi d'inicialització proporcionat per ARM anomenat, en el nostre cas startup\_efm32tg.S. Aquest fitxer està escrit en assemblador i, entre d'altres coses, té el codi que es veu a la Figura~\ref{fig:ISR}:

Expand Down
8 changes: 6 additions & 2 deletions capitol_5.tex
Original file line number Diff line number Diff line change
Expand Up @@ -812,15 +812,19 @@ \section{CMSIS-RTOS}
\label{sec:CMSIS-RTOS}
Aquesta biblioteca defineix un conjunt de funcions i crides per ``amagar'' el sistema operatiu que es pugui fer servir, de manera que es pugui intercanviar el \gls{RTOS} sense afectar al codi d'aplicació \cite{CMSIS-RTOS}.

D'aquesta manera es tenen crides estàndard per les funcions habituals (crear tasques, semàfors, cues, etc., enviar dades a la cua, etc.) de manera que, en principi, es pugui intercanviar el RTOS sense haver de canviar res del codi d'usuari.
D'aquesta manera es tenen crides estàndard per les funcions habituals (crear tasques, semàfors, cues, etc., enviar dades a la cua, etc.) i així es pot, en principi, intercanviar el RTOS sense haver de canviar res del codi d'usuari. Fent servir aquesta API no cal conèixer les interioritats i particularitats de cada RTOS que es vulgui fer servir, ja que quedaran amagades i pre-configurades per la biblioteca.

Així tenim que ST proporciona un \gls{wrapper} de CMSIS-RTOS per FreeRTOS que s'integra fàcilment al seu IDE \cite{ST-CMSIS-RTOS}. Silicon Labs no proporciona suport per aquesta biblioteca, però es pot fer servir el \gls{wrapper} de codi obert disponible a \href{https://github.com/labapart/polymcu/tree/master/RTOS/FreeRTOS/cmsis}{GitHub}.

A part, es va crear una implementació de CMSIS-RTOS anomenada CMSIS-RTOS-RTX (o també Keil RTX) per part de Keil (empresa propietat d'ARM) \cite{Keil-RTX}.

\section{CMSIS-DAP}
\label{sec:CMSIS-DAP}
Més que una biblioteca, aquesta part de CMSIS és una definició de com ha de treballar un dispositiu que faci de pont entre un port USB i el port de configuració dels microcontroladors Cortex. Això possibilita que, per exemple, la placa de prototipat tingui un port USB i el puguem fer servir per programar el microcontrolador, tenir la consola de {\em debug} (SWO), poder inspeccionar registres de la CPU, etc. \cite{CMSIS-DAP}.

\section{CMSIS-NN}
\label{sec:CMSIS-NN}
Aquesta biblioteca està composta d'un seguit de funcions i algorismes per implementar xarxes neurals a processadors Cortex-M. \cite{CMSIS_NN_paper}\cite{CMSIS-NN} i queda fora de l'objectiu d'aquest llibre.
Aquesta biblioteca està composta d'un seguit de funcions i algorismes per implementar xarxes neurals a processadors Cortex-M i queda fora de l'objectiu d'aquest llibre \cite{CMSIS_NN_paper}\cite{CMSIS-NN}.

\chapter{Normes de codificació}
\label{sec:GuiesProgramacio}
Expand Down
15 changes: 15 additions & 0 deletions curs_encastats.bib
Original file line number Diff line number Diff line change
Expand Up @@ -316,6 +316,21 @@ @misc{CMSIS-RTOS
howpublished="\url{http://arm-software.github.io/CMSIS_5/RTOS2/html/index.html}",
}


@misc{ST-CMSIS-RTOS,
author={{ST}},
title={Developing Applications on STM32Cube with RTOS - UM1722},
howpublished="\url{https://www.st.com/resource/en/user_manual/dm00105262.pdf}",
}

@misc{Keil-RTX,
author={Keil},
title={Keil RTX},
howpublished="\url{http://www.keil.com/pack/doc/CMSIS/RTOS2/html/rtx5_impl.html}",
}



@misc{CMSIS-DAP,
author={{ARM Ltd.}},
title={CMSIS-DAP Interface Firmware for CoreSight Debug Access Port},
Expand Down

0 comments on commit 709e8ed

Please sign in to comment.