Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
41 changes: 39 additions & 2 deletions booktitle.md
Original file line number Diff line number Diff line change
@@ -1,5 +1,8 @@
<div align="center">

</br>
</br>

<img src="./media/freeRTOS.png" alt="" height="180" width="250"/>


Expand All @@ -15,10 +18,41 @@
</br>
</br>
</br>
</br>

</div>


</br>
</br>
</br>
</br>
</br>
</br>
</br>
</br>
</br>
</br>
</br>
</br>
</br>
</br>
</br>
</br>
</br>
</br>
</br>
</br>
</br>
</br>
</br>
</br>
</br>
</br>
</br>
</br>
</br>
</br>
</br>
</br>
</br>
</br>
Expand All @@ -31,6 +65,9 @@
</br>



<div align = "left">

[^1]: FreeRTOS™, FreeRTOS.org™ and the FreeRTOS logo are trademarks of Amazon Web Services.
[^2]: OPEN**RTOS**<sup>®</sup> and SAFE**RTOS**<sup>®</sup> are trademarks of WITTENSTEIN High Integrity Systems Ltd. All other brands or product names are the property of their respective holders.

</div>
18 changes: 9 additions & 9 deletions ch04.md
Original file line number Diff line number Diff line change
Expand Up @@ -255,7 +255,7 @@ BaseType_t xTaskCreate( TaskFunction_t pvTaskCode,
information on heap memory management.


<a name="example4.1" title="Creating tasks"></a>
<a name="example4.1" title="Example 4.1 Creating tasks"></a>
---
***Example 4.1*** *Creating tasks*

Expand Down Expand Up @@ -479,7 +479,7 @@ void vTask1( void * pvParameters )

***Listing 4.7*** *Creating a task from within another task after the scheduler has started*

<a name="example4.2" title="Using the task parameter"></a>
<a name="example4.2" title="Example 4.2 Using the task parameter"></a>
---
***Example 4.2*** *Using the task parameter*

Expand Down Expand Up @@ -739,7 +739,7 @@ internally.
describes configuration constants which affect when the scheduler will
select a new task to run and when a tick interrupt will execute.

<a name="example4.3" title="Experimenting with priorities"></a>
<a name="example4.3" title="Example 4.3 Experimenting with priorities"></a>
---
***Example 4.3*** *Experimenting with priorities*

Expand Down Expand Up @@ -918,7 +918,7 @@ Figure 4.7 expands on the simplified state diagram to include all of the
***Figure 4.7*** *Full task state machine*
***

<a name="example4.4" title="Using the Blocked state to create a delay"></a>
<a name="example4.4" title="Example 4.4 Using the Blocked state to create a delay"></a>
---
***Example 4.4*** *Using the *Blocked* state to create a delay</i></h3>

Expand Down Expand Up @@ -1157,7 +1157,7 @@ void vTaskDelayUntil( TickType_t * pxPreviousWakeTime,
be used to convert a time specified in milliseconds into a time
specified in ticks.

<a name="example4.5" title="Converting the example tasks to use vTaskDelayUntil()"></a>
<a name="example4.5" title="Example 4.5 Converting the example tasks to use vTaskDelayUntil()"></a>
---
***Example 4.5*** *Converting the example tasks to use vTaskDelayUntil()*

Expand Down Expand Up @@ -1216,7 +1216,7 @@ void vTaskFunction( void * pvParameters )
The output produced by Example 4.5 is exactly as per that shown for Example 4.4
in Figure 4.8.

<a name="example4.6" title="Combining blocking and non-blocking tasks"></a>
<a name="example4.6" title="Example 4.6 Combining blocking and non-blocking tasks"></a>
---
***Example 4.6*** *Combining blocking and non-blocking tasks*

Expand Down Expand Up @@ -1445,7 +1445,7 @@ void vApplicationIdleHook( void );

***Listing 4.18*** *The idle task hook function name and prototype*

<a name="example4.7" title="Defining an idle task hook function"></a>
<a name="example4.7" title="Example 4.7 Defining an idle task hook function"></a>
---
***Example 4.7*** *Defining an idle task hook function</i></h3>

Expand Down Expand Up @@ -1627,7 +1627,7 @@ UBaseType_t uxTaskPriorityGet( TaskHandle_t xTask );
The priority currently assigned to the task being queried.


<a name="example4.8" title="Changing task priorities"></a>
<a name="example4.8" title="Example 4.8 Changing task priorities"></a>
---
***Example 4.8*** *Changing task priorities*

Expand Down Expand Up @@ -1887,7 +1887,7 @@ void vTaskDelete( TaskHandle_t xTaskToDelete );
handle.


<a name="example4.9" title="Deleting tasks"></a>
<a name="example4.9" title="Example 4.9 Deleting tasks"></a>
---
***Example 4.9*** *Deleting tasks*

Expand Down
6 changes: 3 additions & 3 deletions ch05.md
Original file line number Diff line number Diff line change
Expand Up @@ -408,7 +408,7 @@ UBaseType_t uxQueueMessagesWaiting( QueueHandle_t xQueue );
then the queue is empty.


<a name="example5.1" title="Blocking when receiving from a queue"></a>
<a name="example5.1" title="Example 5.1 Blocking when receiving from a queue"></a>
---
***Example 5.1*** *Blocking when receiving from a queue*

Expand Down Expand Up @@ -663,7 +663,7 @@ Chapter (RB-TBD) shows how to extend this design pattern such that
the controller task can reply directly to the task that queued a structure.


<a name="example5.2" title="Blocking when sending to a queue, and sending structures on a queue"></a>
<a name="example5.2" title="Example 5.2 Blocking when sending to a queue, and sending structures on a queue"></a>
---
***Example 5.2*** *Blocking when sending to a queue, and sending structures on a queue*

Expand Down Expand Up @@ -1486,7 +1486,7 @@ QueueSetMemberHandle_t xQueueSelectFromSet( QueueSetHandle_t xQueueSet,
in the set, but the block time expired before that happened.


<a name="example5.3" title="Using a Queue Set"></a>
<a name="example5.3" title="Example 5.3 Using a Queue Set"></a>
---
***Example 5.3*** *Using a Queue Set</i></h3>

Expand Down
6 changes: 3 additions & 3 deletions ch06.md
Original file line number Diff line number Diff line change
Expand Up @@ -578,7 +578,7 @@ BaseType_t xTimerStart( TimerHandle_t xTimer, TickType_t xTicksToWait );
specified block time expired before that happened.


<a name="example6.1" title="Creating one-shot and auto-reload timers"></a>
<a name="example6.1" title="Example 6.1 Creating one-shot and auto-reload timers"></a>
---
***Example 6.1*** *Creating one-shot and auto-reload timers*

Expand Down Expand Up @@ -782,7 +782,7 @@ void *pvTimerGetTimerID( const TimerHandle_t xTimer );
The ID of the software timer being queried.


<a name="example6.2" title="Using the callback function parameter and the software timer ID"></a>
<a name="example6.2" title="Example 6.2 Using the callback function parameter and the software timer ID"></a>
---
***Example 6.2*** *Using the callback function parameter and the software timer ID*

Expand Down Expand Up @@ -1173,7 +1173,7 @@ BaseType_t xTimerReset( TimerHandle_t xTimer, TickType_t xTicksToWait );
expired before that happened.


<a name="example6.3" title="Resetting a software timer"></a>
<a name="example6.3" title="Example 6.3 Resetting a software timer"></a>
---
***Example 6.3*** *Resetting a software timer*

Expand Down
10 changes: 5 additions & 5 deletions ch07.md
Original file line number Diff line number Diff line change
Expand Up @@ -616,7 +616,7 @@ BaseType_t xSemaphoreGiveFromISR( SemaphoreHandle_t xSemaphore,
`xSemaphoreGiveFromISR()` will return `pdFAIL`.


<a name="example7.1" title="Using a binary semaphore to synchronize a task with an interrupt"></a>
<a name="example7.1" title="Example 7.1 Using a binary semaphore to synchronize a task with an interrupt"></a>
---
***Example 7.1*** *Using a binary semaphore to synchronize a task with an interrupt*

Expand Down Expand Up @@ -1075,15 +1075,15 @@ SemaphoreHandle_t xSemaphoreCreateCounting( UBaseType_t uxMaxCount,

If NULL is returned, the semaphore cannot be created because
there is insufficient heap memory available for FreeRTOS to allocate the
semaphore data structures. Chapter 2 provides more information on heap
semaphore data structures. Chapter 3 provides more information on heap
memory management.

If a non-NULL value is returned, it indicates that the semaphore has been
created successfully. The returned value should be stored as the handle
to the created semaphore.


<a name="example7.2" title="Using a counting semaphore to synchronize a task with an interrupt"></a>
<a name="example7.2" title="Example 7.2 Using a counting semaphore to synchronize a task with an interrupt"></a>
---
***Example 7.2*** *Using a counting semaphore to synchronize a task with an interrupt*

Expand Down Expand Up @@ -1310,7 +1310,7 @@ void vPendableFunction( void *pvParameter1, uint32_t ulParameter2 );
command queue.


<a name="example7.3" title="Centralized deferred interrupt processing"></a>
<a name="example7.3" title="Example 7.3 Centralized deferred interrupt processing"></a>
---
***Example 7.3*** *Centralized deferred interrupt processing*

Expand Down Expand Up @@ -1583,7 +1583,7 @@ that are suitable for production code, include:
than the raw data) to a task. This was previously demonstrated by
Figure 5.4.

<a name="example7.4" title="Sending and receiving on a queue from within an interrupt"></a>
<a name="example7.4" title="Example 7.4 Sending and receiving on a queue from within an interrupt"></a>
---
***Example 7.4*** *Sending and receiving on a queue from within an interrupt*

Expand Down
4 changes: 2 additions & 2 deletions ch08.md
Original file line number Diff line number Diff line change
Expand Up @@ -513,7 +513,7 @@ SemaphoreHandle_t xSemaphoreCreateMutex( void );
created mutex.


<a name="example8.1" title="Rewriting vPrintString() to use a semaphore"></a>
<a name="example8.1" title="Example 8.1 Rewriting vPrintString() to use a semaphore"></a>
---
***Example 8.1*** *Rewriting vPrintString() to use a semaphore*

Expand Down Expand Up @@ -1139,7 +1139,7 @@ static void prvStdioGatekeeperTask( void *pvParameters )
***Listing 8.18*** *The gatekeeper task*


<a name="example8.2" title="The alternative implementation for print task"></a>
<a name="example8.2" title="Example 8.2 The alternative implementation for print task"></a>
---
***Example 8.2*** *The alternative implementation for print task*

Expand Down
4 changes: 2 additions & 2 deletions ch09.md
Original file line number Diff line number Diff line change
Expand Up @@ -520,7 +520,7 @@ StaticEventGroup_t ** ppxEventGroupBuffer );

- `pdFALSE` will be returned if the buffer was not successfully retrieved.

<a name="example9.1" title="Experimenting with event groups"></a>
<a name="example9.1" title="Example 9.1 Experimenting with event groups"></a>
---
***Example 9.1*** *Experimenting with event groups*

Expand Down Expand Up @@ -1034,7 +1034,7 @@ EventBits_t xEventGroupSync( EventGroupHandle_t xEventGroup,
condition.


<a name="example9.2" title="Synchronizing tasks"></a>
<a name="example9.2" title="Example 9.2 Synchronizing tasks"></a>
---
***Example 9.2*** *Synchronizing tasks*

Expand Down
44 changes: 22 additions & 22 deletions ch10.md
Original file line number Diff line number Diff line change
Expand Up @@ -181,26 +181,26 @@ macros will be called functions throughout this book.

#### 10.3.1.1 The complete list of API functions <sup>27</sup>

`xTaskNotifyGive`
`xTaskNotifyGiveIndexed`
`vTaskNotifyGiveFromISR`
`vTaskNotifyGiveIndexedFromISR`
`vTaskNotifyTake`
`vTaskNotifyTakeIndexed`
`xTaskNotify`
`xTaskNotifyIndexed`
`xTaskNotifyWait`
`xTaskNotifyWaitIndexed`
`xTaskNotifyStateClear`
`xTaskNotifyStateClearIndexed`
`ulTaskNotifyValueClear`
`ulTaskNotifyValueClearIndexed`
`xTaskNotifyAndQueryIndexedFromISR`
`xTaskNotifyAndQueryFromISR`
`xTaskNotifyFromISR`
`xTaskNotifyIndexedFromISR`
`xTaskNotifyAndQuery`
`xTaskNotifyAndQueryIndexed`
- `xTaskNotifyGive`
- `xTaskNotifyGiveIndexed`
- `vTaskNotifyGiveFromISR`
- `vTaskNotifyGiveIndexedFromISR`
- `vTaskNotifyTake`
- `vTaskNotifyTakeIndexed`
- `xTaskNotify`
- `xTaskNotifyIndexed`
- `xTaskNotifyWait`
- `xTaskNotifyWaitIndexed`
- `xTaskNotifyStateClear`
- `xTaskNotifyStateClearIndexed`
- `ulTaskNotifyValueClear`
- `ulTaskNotifyValueClearIndexed`
- `xTaskNotifyAndQueryIndexedFromISR`
- `xTaskNotifyAndQueryFromISR`
- `xTaskNotifyFromISR`
- `xTaskNotifyIndexedFromISR`
- `xTaskNotifyAndQuery`
- `xTaskNotifyAndQueryIndexed`

*(27): These functions are actually implemented as macros.*

Expand Down Expand Up @@ -359,7 +359,7 @@ xTicksToWait );
the specified block time expired before that happened.


<a name="example10.1" title="Using a task notification in place of a semaphore, method 1"></a>
<a name="example10.1" title="Example 10.1 Using a task notification in place of a semaphore, method 1"></a>
---
***Example 10.1*** *Using a task notification in place of a semaphore, method 1*

Expand Down Expand Up @@ -498,7 +498,7 @@ produced by the periodic task. Further explanation is provided in Figure 10.4.
***Figure 10.4*** *The sequence of execution when Example 10.1 is executed*
* * *

<a name="example10.2" title="Using a task notification in place of a semaphore, method 2"></a>
<a name="example10.2" title="Example 10.2 Using a task notification in place of a semaphore, method 2"></a>
---
***Example 10.2*** *Using a task notification in place of a semaphore, method 2*

Expand Down
Loading