mirror of
https://github.com/supleed2/ELEC60013-ES-CW2.git
synced 2024-12-22 21:55:50 +00:00
Added new lines
This commit is contained in:
parent
3c8c3def94
commit
9bf12dcfae
112
README.md
112
README.md
|
@ -2,77 +2,77 @@
|
||||||
The following document outlines the design, implementation and real-time dependecies of a music synthesizer for the 2nd coursework of the Embedded Systems module.
|
The following document outlines the design, implementation and real-time dependecies of a music synthesizer for the 2nd coursework of the Embedded Systems module.
|
||||||
|
|
||||||
## System tasks
|
## System tasks
|
||||||
The sytem at hand executes several real-time tasks, including:
|
The sytem at hand executes several real-time tasks, including:
|
||||||
*Reading the key matrix
|
* Reading the key matrix
|
||||||
*Updating the display
|
* Updating the display
|
||||||
*Generating sound
|
* Generating sound
|
||||||
|
|
||||||
### Reading the key matrix
|
### Reading the key matrix
|
||||||
**Purpose:**
|
**Purpose:**
|
||||||
*Decode the key matrix, obtaining the states of the keys, knobs and joysticks
|
* Decode the key matrix, obtaining the states of the keys, knobs and joysticks
|
||||||
*Obtain the currently selected note from the decoded key matrix
|
* Obtain the currently selected note from the decoded key matrix
|
||||||
*Select the appopriate step size for the currently selected note
|
* Select the appopriate step size for the currently selected note
|
||||||
*Transmit the currently selected note, along side its state (pressed or released) using CAN
|
* Transmit the currently selected note, along side its state (pressed or released) using CAN
|
||||||
*Obtain any changes in the knobs from the decoded key matrix, corresponding to volume, octave or waveform
|
* Obtain any changes in the knobs from the decoded key matrix, corresponding to volume, octave or waveform
|
||||||
|
|
||||||
**Function:** code(void scanKeysTask(void *pvParameters))
|
**Function:** code(void scanKeysTask(void *pvParameters))
|
||||||
**Implementation:** Thread, executing every 50ms
|
**Implementation:** Thread, executing every 50ms
|
||||||
**Minimum initiation time:** TO BE COMPLETED.
|
**Minimum initiation time:** TO BE COMPLETED.
|
||||||
**Maximum execution time:** TO BE COMPLETED.
|
**Maximum execution time:** TO BE COMPLETED.
|
||||||
**Priority:** Highest (1), as playing the appropriate sound is more important than updating the display.
|
**Priority:** Highest (1), as playing the appropriate sound is more important than updating the display.
|
||||||
|
|
||||||
### Updating the display
|
### Updating the display
|
||||||
**Purpose:**
|
**Purpose:**
|
||||||
*Display the currently selected note (string)
|
* Display the currently selected note (string)
|
||||||
*Display the current volume (int)
|
* Display the current volume (int)
|
||||||
*Display the current octave (int)
|
* Display the current octave (int)
|
||||||
*Display the current waveform (XMB icons)
|
* Display the current waveform (XMB icons)
|
||||||
|
|
||||||
**Function:** code(displayUpdateTask(void *pvParameters)
|
**Function:** code(displayUpdateTask(void *pvParameters)
|
||||||
**Implementation:** Thread, executing every 100ms. While a refresh rate of 10Hz does not sound impressive; the display is largely static. Therefore, 100ms was perfectly accetable, without any noticeable delays.
|
**Implementation:** Thread, executing every 100ms. While a refresh rate of 10Hz does not sound impressive; the display is largely static. Therefore, 100ms was perfectly accetable, without any noticeable delays.
|
||||||
**Minimum initiation time:** TO BE COMPLETED.
|
**Minimum initiation time:** TO BE COMPLETED.
|
||||||
**Maximum execution time:** TO BE COMPLETED.
|
**Maximum execution time:** TO BE COMPLETED.
|
||||||
**Priority:** Lowest (2).
|
**Priority:** Lowest (2).
|
||||||
|
|
||||||
### Generating the sound
|
### Generating the sound
|
||||||
**Purpose:**
|
**Purpose:**
|
||||||
*Adds the sample rate to the accumulated value, corresponding to the desired frequency
|
* Adds the sample rate to the accumulated value, corresponding to the desired frequency
|
||||||
*Sets the output voltage, by using the accumlated value and the desired volume
|
* Sets the output voltage, by using the accumlated value and the desired volume
|
||||||
*Writes to analogue output, generating the desired sound
|
* Writes to analogue output, generating the desired sound
|
||||||
|
|
||||||
**Function:** code(sampleISR())
|
**Function:** code(sampleISR())
|
||||||
**Implementation:** Interrupt executing with a frequency of 44.1kHz
|
**Implementation:** Interrupt executing with a frequency of 44.1kHz
|
||||||
**Minimum initiation time:** TO BE COMPLETED.
|
**Minimum initiation time:** TO BE COMPLETED.
|
||||||
**Maximum execution time:** TO BE COMPLETED.
|
**Maximum execution time:** TO BE COMPLETED.
|
||||||
|
|
||||||
### CAN
|
### CAN
|
||||||
**Purpose:**
|
**Purpose:**
|
||||||
* TO BE ADDED
|
* TO BE ADDED
|
||||||
|
|
||||||
**Function:**
|
**Function:**
|
||||||
**Implementation:**
|
**Implementation:**
|
||||||
**Minimum initiation time:**
|
**Minimum initiation time:**
|
||||||
**Maximum execution time:**
|
**Maximum execution time:**
|
||||||
**Priority:**
|
**Priority:**
|
||||||
|
|
||||||
## Critical instant analysis of the rate monotonic scheduler
|
## Critical instant analysis of the rate monotonic scheduler
|
||||||
TO BE ADDED - After system is completed.
|
TO BE ADDED - After system is completed.
|
||||||
|
|
||||||
## CPU Resource Usage
|
## CPU Resource Usage
|
||||||
TO BE ADDED - After system is completed; see this link: https://edstem.org/us/courses/19499/discussion/1300057
|
TO BE ADDED - After system is completed; see this link: https://edstem.org/us/courses/19499/discussion/1300057
|
||||||
|
|
||||||
## Shared data structures
|
## Shared data structures
|
||||||
Shared data structures:
|
Shared data structures:
|
||||||
*code(currentStepSize), safe access guaranteed using code(std::atomic<uint32_t>)
|
* code(currentStepSize), safe access guaranteed using code(std::atomic<uint32_t>)
|
||||||
*code(keyArray), each element within the array is of type code(std::atomic<uint8_t>)
|
* code(keyArray), each element within the array is of type code(std::atomic<uint8_t>)
|
||||||
*msgInQ, handled by FreeRTOS
|
* msgInQ, handled by FreeRTOS
|
||||||
*code(RX_Message), handled by code(std::atomic_flag)
|
* code(RX_Message), handled by code(std::atomic_flag)
|
||||||
|
|
||||||
It was desiced to use C++ code(std::atomic), as it is easier to use and implement, while providing the same functionality as a mutex. According to the documentation: *"Each instantiation and full specialization of the std::atomic template defines an atomic type. If one thread writes to an atomic object while another thread reads from it, the behavior is well-defined (see memory model for details on data races). In addition, accesses to atomic objects may establish inter-thread synchronization and order non-atomic memory accesses as specified by std::memory_order."* (https://en.cppreference.com/w/cpp/atomic/atomic)
|
It was desiced to use C++ code(std::atomic), as it is easier to use and implement, while providing the same functionality as a mutex. According to the documentation: *"Each instantiation and full specialization of the std::atomic template defines an atomic type. If one thread writes to an atomic object while another thread reads from it, the behavior is well-defined (see memory model for details on data races). In addition, accesses to atomic objects may establish inter-thread synchronization and order non-atomic memory accesses as specified by std::memory_order.*"(https://en.cppreference.com/w/cpp/atomic/atomic)
|
||||||
|
|
||||||
TODO - Expand on the memory model for std:: atomic.
|
TODO - Expand on the memory model for std::atomic.
|
||||||
TODO - Explain how FreeRTOS handles msgInQ.
|
TODO - Explain how FreeRTOS handles msgInQ.
|
||||||
TODO - Once CAN is completed, expand on the protection of RX_Message
|
TODO - Once CAN is completed, expand on the protection of RX_Message
|
||||||
|
|
||||||
## Analysis of inter-task blocking dependencies
|
## Analysis of inter-task blocking dependencies
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue