Skip to content

Commit

Permalink
Two seq. diagram added, for semaphore and queue examples
Browse files Browse the repository at this point in the history
  • Loading branch information
mariusmm committed Mar 4, 2019
1 parent 6e313c6 commit 8253fed
Show file tree
Hide file tree
Showing 5 changed files with 95 additions and 2 deletions.
20 changes: 18 additions & 2 deletions capitol_4.tex
Original file line number Diff line number Diff line change
Expand Up @@ -269,7 +269,7 @@ \subsection{Semàfors a FreeRTOS}

\subsection{Exemple amb semàfors}
\label{sub:semafors_exemple}
A \href{https://github.com/mariusmm/cursembedded/tree/master/Simplicity/FreeRTOS_Semaphore}{l'exemple} hi ha una tasca que es queda esperant a agafar un semàfor i quan l'aconsegueix fa un {\em toggle} del LED (Veure Llistat~\ref{semaphore_task_example}).
A \href{https://github.com/mariusmm/cursembedded/tree/master/Simplicity/FreeRTOS_Semaphore}{l'exemple} hi ha una tasca que es queda esperant a agafar un semàfor i quan l'aconsegueix fa un {\em toggle} del LED (veure Llistat~\ref{semaphore_task_example} i el diagrama de seqüència~\ref{fig:SeqDiagramSemaphore}).

\index{TaskLedToggle()}\index{xSemaphoreTake()}\index{LedToggle()}
\begin{lstlisting}[style=customc,caption=Tasca amb semàfor d'exemple,label=semaphore_task_example]
Expand All @@ -283,6 +283,15 @@ \subsection{Exemple amb semàfors}
}
\end{lstlisting}


\begin{figure}
\centering
\includegraphics[width=0.85\textwidth, keepaspectratio]{imatges/SemaphoreFreeRTOS.png}
\caption{Diagrama de seqüència de l'exemple amb semàfors}.
\label{fig:SeqDiagramSemaphore}
\end{figure}


La funció {\bf main()}\index{main()} crida la funció {\bf BSP\_Init()}\index{BSP\_Init()} que configura els GPIOs corresponents als botons i es registra una \gls{ISR} ({\bf GPIO\_EVEN\_IRQHandler()}\index{GPIO\_EVEN\_IRQHandler()}) pel botó 0, que ‘dóna' el semàfor en quan es prem el corresponent botó a la PCB (Llistat~\ref{ISR_semaphore}).

Després es crea el semàfor que compartiran la tasca i la ISR i tot seguit es crea la tasca com ja hem vist a l'exemple anterior..
Expand Down Expand Up @@ -334,7 +343,7 @@ \section{Cues}
Per saber quina mida han de tenir les cues, veieu \fullref{sec:mida_cues}.
\subsection{Exemple amb cues}
\label{sub:cues_exemple}
A \href{https://github.com/mariusmm/cursembedded/tree/master/Simplicity/FreeRTOS_Queue}{l'exemple de cues} hi ha una sola tasca que fa {\em blinkar} el \gls{LED} segons una variable. Aquesta variable s'obté de llegir (o intentar-ho) una cua. Aquesta cua (anomenada {\em queue\_buttons}) l'escriuen les dues \gls{ISR} associades als dos botons. Una envia el valor corresponent a 250 ms i l'altre ISR envia el valor que correspon a 1000 ms (Llistat~\ref{Queue_example_ISR}).
A \href{https://github.com/mariusmm/cursembedded/tree/master/Simplicity/FreeRTOS_Queue}{l'exemple de cues} hi ha una sola tasca que fa {\em blinkar} el \gls{LED} segons una variable. Aquesta variable s'obté de llegir (o intentar-ho) una cua. Aquesta cua (anomenada {\em queue\_buttons}) l'escriuen les dues \gls{ISR} associades als dos botons. Una envia el valor corresponent a 250 ms i l'altre ISR envia el valor que correspon a 1000 ms (Llistat~\ref{Queue_example_ISR} i diagrama de seqüència~\ref{fig:SeqDiagramQueue}).

\index{xQueueSendFromISR()}\index{portYIELD\_FROM\_ISR()}
\begin{lstlisting}[style=customc, label=Queue_example_ISR, caption=Part del codi d'una de les ISRs]
Expand All @@ -349,6 +358,13 @@ \subsection{Exemple amb cues}
\end{lstlisting}


\begin{figure}
\centering
\includegraphics[width=0.85\textwidth, keepaspectratio]{imatges/QueueFreeRTOS.png}
\caption{Diagrama de seqüència de l'exemple de {\em debounce}}
\label{fig:SeqDiagramQueue}
\end{figure}

En aquest cas, la tasca fa servir la funció {\bf xQueueReceive()}\index{xQueueReceive()} amb un valor de 0 a l'últim paràmetre, que és el temps en {\em ticks} que ha d'esperar-se a rebre un valor en el cas que la cua estigui buida (veure Llistat~\ref{queue_example_main}).

\index{xQueueReceive()}\index{vTaskDelay()}\index{LedToggle()}\index{TaskLedToggle()}
Expand Down
Binary file added imatges/QueueFreeRTOS.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added imatges/SemaphoreFreeRTOS.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
41 changes: 41 additions & 0 deletions plantuml/QueueFreeRTOS.plantuml
Original file line number Diff line number Diff line change
@@ -0,0 +1,41 @@
' FreeRTOS Queue example

@startuml

skinparam sequence {
ArrowColor #009944
ActorBorderColor #009944
LifeLineBorderColor #009944
LifeLineBackgroundColor #00AA55
ParticipantBorderColor #009944
ParticipantBackgroundColor #00AA55
EntityBorderColor #009944
EntityBackgroundColor #00AA55
}

participant Tasca1 order 1
entity Queue order 2
participant GPIO_ODD_ISR order 3
participant GPIO_EVEN_ISR order 4
activate Tasca1
|||
Tasca1 -> Queue: xQueueReceive()
deactivate Tasca1

|||
GPIO_ODD_ISR o<--]: IRQ_ODD
activate GPIO_ODD_ISR

GPIO_ODD_ISR -> Queue: xQueueSendFromISR()
Queue --> GPIO_ODD_ISR
Queue --> Tasca1
destroy GPIO_ODD_ISR
activate Tasca1

GPIO_EVEN_ISR o<--]: IRQ_EVEN
activate GPIO_EVEN_ISR
GPIO_EVEN_ISR -> Queue: xQueueSendFromISR()
Queue --> GPIO_EVEN_ISR
destroy GPIO_EVEN_ISR

@enduml
36 changes: 36 additions & 0 deletions plantuml/SemaphoreFreeRTOS.plantuml
Original file line number Diff line number Diff line change
@@ -0,0 +1,36 @@
' FreeRTOS Semaphore example

@startuml

skinparam sequence {
ArrowColor #009944
ActorBorderColor #009944
LifeLineBorderColor #009944
LifeLineBackgroundColor #00AA55
ParticipantBorderColor #009944
ParticipantBackgroundColor #00AA55
EntityBorderColor #009944
EntityBackgroundColor #00AA55
}

participant Tasca1 order 1
entity Semaphore order 2
participant GPIO_ISR order 3
activate Tasca1
|||
Tasca1 -> Semaphore: xSemaphoreTake()
deactivate Tasca1

|||
GPIO_ISR o<--]: IRQ
activate GPIO_ISR

GPIO_ISR-> Semaphore: xSemaphoreGiveFromISR()
Semaphore --> GPIO_ISR
Semaphore --> Tasca1
destroy GPIO_ISR
activate Tasca1



@enduml

0 comments on commit 8253fed

Please sign in to comment.