Difference between revisions of "Embedded System Tutorial FreeRTOS"
From Embedded Systems Learning Academy
(→C++ Task) |
|||
(4 intermediate revisions by one other user not shown) | |||
Line 1: | Line 1: | ||
+ | Socialledge is moving to two portals. | ||
+ | * The Wiki will remain here for general references about the SJ-One board, and to document student reports. | ||
+ | * The bookstack will now be used for SJSU assignments | ||
+ | |||
+ | [http://books.socialledge.com/books/embedded-drivers-real-time-operating-systems/page/freertos-tasks This article has been moved here] | ||
+ | |||
+ | <!-- | ||
+ | |||
The objective of this assignment is to show you how to create a FreeRTOS task a few different ways. The [[FreeRTOS Tutorial]] is definitely a must read before going through this lesson. | The objective of this assignment is to show you how to create a FreeRTOS task a few different ways. The [[FreeRTOS Tutorial]] is definitely a must read before going through this lesson. | ||
Line 33: | Line 41: | ||
<syntaxhighlight lang="cpp"> | <syntaxhighlight lang="cpp"> | ||
+ | /// IDs used for getSharedObject() and addSharedObject() | ||
typedef enum { | typedef enum { | ||
shared_SensorQueueId, | shared_SensorQueueId, | ||
} sharedHandleId_t; | } sharedHandleId_t; | ||
+ | /// Orientation type enumeration | ||
typedef enum { | typedef enum { | ||
invalid, | invalid, | ||
Line 48: | Line 58: | ||
orient_compute(uint8_t priority) : scheduler_task("compute", 2048, priority) | orient_compute(uint8_t priority) : scheduler_task("compute", 2048, priority) | ||
{ | { | ||
+ | /* We save the queue handle by using addSharedObject() */ | ||
QueueHandle_t my_queue = xQueueCreate(1, sizeof(orientation_t)); | QueueHandle_t my_queue = xQueueCreate(1, sizeof(orientation_t)); | ||
addSharedObject(shared_SensorQueueId, my_queue); | addSharedObject(shared_SensorQueueId, my_queue); | ||
Line 73: | Line 84: | ||
bool run(void *p) | bool run(void *p) | ||
{ | { | ||
+ | /* We first get the queue handle the other task added using addSharedObject() */ | ||
orientation_t orientation = invalid; | orientation_t orientation = invalid; | ||
QueueHandle_t qid = getSharedObject(shared_SensorQueueId); | QueueHandle_t qid = getSharedObject(shared_SensorQueueId); | ||
Line 104: | Line 116: | ||
This assignment is based on SJ-One board, but you can alter the requirement to fit your own hardware. | This assignment is based on SJ-One board, but you can alter the requirement to fit your own hardware. | ||
# Create a task (task1) that computes the orientation of the board. | # Create a task (task1) that computes the orientation of the board. | ||
+ | #: You can use the acceleration sensor to figure out the orientation of the board | ||
#: Send the orientation enumeration, such as "up", "down", "left", "right" to a queue every 1 second | #: Send the orientation enumeration, such as "up", "down", "left", "right" to a queue every 1 second | ||
# Create another task (task2) that waits on the queued item | # Create another task (task2) that waits on the queued item | ||
Line 112: | Line 125: | ||
#: Use the same priority for both tasks, and note down the order of the print-outs | #: Use the same priority for both tasks, and note down the order of the print-outs | ||
#: Use higher priority for the receiving task, and note down the order of the print-outs. | #: Use higher priority for the receiving task, and note down the order of the print-outs. | ||
− | # Create a terminal | + | # Create a terminal command: "orientation on" and "orientation off" |
#: If orientation is commanded on, resume the task1, otherwise suspend it | #: If orientation is commanded on, resume the task1, otherwise suspend it | ||
#: See code below on hints of how this command can get control of another task. | #: See code below on hints of how this command can get control of another task. | ||
Line 143: | Line 156: | ||
} | } | ||
</syntaxhighlight> | </syntaxhighlight> | ||
+ | --> |
Latest revision as of 20:11, 25 January 2019
Socialledge is moving to two portals.
- The Wiki will remain here for general references about the SJ-One board, and to document student reports.
- The bookstack will now be used for SJSU assignments
This article has been moved here