Repository files navigation

Avionics

FooSTMicroFreeRTOSGit

Table of Contents

  1. About This
    1. IDE support
    2. Timeline
    3. Links
  2. Languages
  3. Motivation
  4. MVP Requirements
  5. Design Decisions
    1. Diagrams
      1. Sensor Poll
      2. UART poll
      3. Class Diagram
      4. Module & Folder Structure
  6. Formatting Guidelines
  7. Milestones
  8. Processes
  9. Folder Structure

About This

This is the code repository for staging the Student Organisation for Aerospace Research (SOAR's) C++ rewrite.

The original code in this repository was written in C, The old repository can be found here.

IDE support

By default we are using the STMCubeIDE.

Use the _IDE folder to add support for your IDE of choice if needed.
Make sure to update the .gitignore.

Timeline

  • Layout desired requirements
  • Design and document architecture
    • Diagram
    • Reference other teams (if possible)
  • Scope MVP
    • Before September 6th (Classes begin)
  • Build MVP
    • PREREQ: Merge A3.3, Clang Format
    • Integration test on hardware
    • Full SW team approval
  • Create tasks and documentation to update each code section
  • Create on-boarding presentation
    • What it is
    • How it works
    • Why decisions were made
  • Merge MVP into master
  1. Design Freeze
    • End of August
  2. Design Review
    • July 30th
  3. Testing Schedule
    • Build MVP
  4. Presentation
    • Mid September
  5. Competition Data
    • June 2023

Links

  1. Brainstorming Document
  2. Formal Document

The most relevant information from both documents is distributed in this repo.

Languages

Embedded software is written primarily in C/C++, using CMSIS with FreeRTOS as the underlying operating system.
Scripts and Tools are written in various languages, primarily Python.
Diagrams are designed with a variety of software, code based diagrams are written in PlantUML, other diagrams are designed in Diagrams.net

Motivation

  • Readable
  • Robust
  • Modular
  • Consistent
  • Easier for new members
  • Documented from the start
  • Test Driven Design

MVP Requirements

  • Compile flags/#ifdef flag for solid vs hybrid.
  • Base Task Communication
  • UART poll and debug logging
  • Sensor log output over UART5
  • Queue
  • Abstractions for important systems
    • Class Diagrams
  • Module
  • Well documented
  • Testing Framework

Design Decisions

  • Tasks are contained and communicate using queues.
    • Possibly look into a priority queue to handle queues getting too full.
  • Abstract Base Classes for things like Sensor or Task.
  • Pointer hierarchy
    1. References
    2. Smart Pointers
      • Beware RTOS support
    3. Pointers
  • Reduce cognitive overhead by documenting your thought process for complicated tasks.
    • Especially in non-trivial ifs or big loops.

Diagrams

Sensor Poll

UART Poll

Class Diagram

Module and Folder Structure

Formatting Guidelines

  • Functions are lowercase.
    • Class related functions are uppercase.
  • Infinite Loops are written with while(1) as oppose to for(;;).

Milestones

  • Architecture Design Complete
  • MVP Complete
  • Rest of Codebase complete

Processes

Changing .ioc file

  • This should be improved in the future using a rename script, or by modifying CMake file if necessary. There may be a setting in CubeIDE
  • Whenever you change the .ioc file the following must be done
  1. Rename Core/main.cpp to Core/main.c
  2. Generate code from .ioc change
  3. Rename back to Core/main.cpp

Folder Structure

  • The Core directory contains code primarily generated by STM32CubeIDE, or for other Middlewares such as FreeRTOS.
  • Most of the written code should go into Components under the most appropriate sub-directory.

About

No description, website, or topics provided.

Resources

Stars

1 star

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Add copy buttons to all
 blocks\n(function() {\n function addCopyButtons() {\n document.querySelectorAll('pre code').forEach(function(codeBlock) {\n if (codeBlock.parentElement.hasAttribute('data-copy-added')) return;\n codeBlock.parentElement.setAttribute('data-copy-added', 'true');\n \n var btn = document.createElement('button');\n btn.textContent = 'Copy';\n btn.style.cssText = 'position:absolute;top:4px;right:4px;padding:2px 8px;font-size:11px;background:#4ecdc4;border:none;border-radius:4px;color:#1a1a2e;cursor:pointer;opacity:0.7;transition:opacity 0.2s;';\n btn.onmouseover = function() { this.style.opacity = '1'; };\n btn.onmouseout = function() { this.style.opacity = '0.7'; };\n btn.onclick = function() {\n navigator.clipboard.writeText(codeBlock.textContent).then(function() {\n btn.textContent = 'Copied!';\n setTimeout(function() { btn.textContent = 'Copy'; }, 1500);\n });\n };\n codeBlock.parentElement.style.position = 'relative';\n codeBlock.parentElement.appendChild(btn);\n });\n }\n \n addCopyButtons();\n \n // Re-run on dynamic content\n var observer = new MutationObserver(addCopyButtons);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Add Copy Buttons to Code Blocks");
}
} catch(__e) { console.warn('[Userscript:Add Copy Buttons to Code Blocks]', __e); }
})();
(function(){
try {
var __m = "github.com";
var __re = new RegExp('^' + "github\\.com" + '
Skip to content

Repository files navigation

Avionics

FooSTMicroFreeRTOSGit

Table of Contents

  1. About This
    1. IDE support
    2. Timeline
    3. Links
  2. Languages
  3. Motivation
  4. MVP Requirements
  5. Design Decisions
    1. Diagrams
      1. Sensor Poll
      2. UART poll
      3. Class Diagram
      4. Module & Folder Structure
  6. Formatting Guidelines
  7. Milestones
  8. Processes
  9. Folder Structure

About This

This is the code repository for staging the Student Organisation for Aerospace Research (SOAR's) C++ rewrite.

The original code in this repository was written in C, The old repository can be found here.

IDE support

By default we are using the STMCubeIDE.

Use the _IDE folder to add support for your IDE of choice if needed.
Make sure to update the .gitignore.

Timeline

  • Layout desired requirements
  • Design and document architecture
    • Diagram
    • Reference other teams (if possible)
  • Scope MVP
    • Before September 6th (Classes begin)
  • Build MVP
    • PREREQ: Merge A3.3, Clang Format
    • Integration test on hardware
    • Full SW team approval
  • Create tasks and documentation to update each code section
  • Create on-boarding presentation
    • What it is
    • How it works
    • Why decisions were made
  • Merge MVP into master
  1. Design Freeze
    • End of August
  2. Design Review
    • July 30th
  3. Testing Schedule
    • Build MVP
  4. Presentation
    • Mid September
  5. Competition Data
    • June 2023

Links

  1. Brainstorming Document
  2. Formal Document

The most relevant information from both documents is distributed in this repo.

Languages

Embedded software is written primarily in C/C++, using CMSIS with FreeRTOS as the underlying operating system.
Scripts and Tools are written in various languages, primarily Python.
Diagrams are designed with a variety of software, code based diagrams are written in PlantUML, other diagrams are designed in Diagrams.net

Motivation

  • Readable
  • Robust
  • Modular
  • Consistent
  • Easier for new members
  • Documented from the start
  • Test Driven Design

MVP Requirements

  • Compile flags/#ifdef flag for solid vs hybrid.
  • Base Task Communication
  • UART poll and debug logging
  • Sensor log output over UART5
  • Queue
  • Abstractions for important systems
    • Class Diagrams
  • Module
  • Well documented
  • Testing Framework

Design Decisions

  • Tasks are contained and communicate using queues.
    • Possibly look into a priority queue to handle queues getting too full.
  • Abstract Base Classes for things like Sensor or Task.
  • Pointer hierarchy
    1. References
    2. Smart Pointers
      • Beware RTOS support
    3. Pointers
  • Reduce cognitive overhead by documenting your thought process for complicated tasks.
    • Especially in non-trivial ifs or big loops.

Diagrams

Sensor Poll

UART Poll

Class Diagram

Module and Folder Structure

Formatting Guidelines

  • Functions are lowercase.
    • Class related functions are uppercase.
  • Infinite Loops are written with while(1) as oppose to for(;;).

Milestones

  • Architecture Design Complete
  • MVP Complete
  • Rest of Codebase complete

Processes

Changing .ioc file

  • This should be improved in the future using a rename script, or by modifying CMake file if necessary. There may be a setting in CubeIDE
  • Whenever you change the .ioc file the following must be done
  1. Rename Core/main.cpp to Core/main.c
  2. Generate code from .ioc change
  3. Rename back to Core/main.cpp

Folder Structure

  • The Core directory contains code primarily generated by STM32CubeIDE, or for other Middlewares such as FreeRTOS.
  • Most of the written code should go into Components under the most appropriate sub-directory.

About

No description, website, or topics provided.

Resources

Stars

1 star

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Force GitHub README to respect dark mode\n(function() {\n var style = document.createElement('style');\n style.textContent = '\n .markdown-body {\n color-scheme: dark light;\n }\n .markdown-body pre { background: #161b22 !important; }\n .markdown-body code { background: rgba(110, 118, 129, 0.4) !important; }\n .markdown-body table th, .markdown-body table td { border-color: #30363d !important; }\n .markdown-body img { background: #0d1117; }\n .markdown-body blockquote { border-left-color: #8b949e; }\n .markdown-body hr { border-color: #30363d; }\n ';\n document.head.appendChild(style);\n})();", "GitHub Dark Mode README Fix"); } } catch(__e) { console.warn('[Userscript:GitHub Dark Mode README Fix]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

Avionics

FooSTMicroFreeRTOSGit

Table of Contents

  1. About This
    1. IDE support
    2. Timeline
    3. Links
  2. Languages
  3. Motivation
  4. MVP Requirements
  5. Design Decisions
    1. Diagrams
      1. Sensor Poll
      2. UART poll
      3. Class Diagram
      4. Module & Folder Structure
  6. Formatting Guidelines
  7. Milestones
  8. Processes
  9. Folder Structure

About This

This is the code repository for staging the Student Organisation for Aerospace Research (SOAR's) C++ rewrite.

The original code in this repository was written in C, The old repository can be found here.

IDE support

By default we are using the STMCubeIDE.

Use the _IDE folder to add support for your IDE of choice if needed.
Make sure to update the .gitignore.

Timeline

  • Layout desired requirements
  • Design and document architecture
    • Diagram
    • Reference other teams (if possible)
  • Scope MVP
    • Before September 6th (Classes begin)
  • Build MVP
    • PREREQ: Merge A3.3, Clang Format
    • Integration test on hardware
    • Full SW team approval
  • Create tasks and documentation to update each code section
  • Create on-boarding presentation
    • What it is
    • How it works
    • Why decisions were made
  • Merge MVP into master
  1. Design Freeze
    • End of August
  2. Design Review
    • July 30th
  3. Testing Schedule
    • Build MVP
  4. Presentation
    • Mid September
  5. Competition Data
    • June 2023

Links

  1. Brainstorming Document
  2. Formal Document

The most relevant information from both documents is distributed in this repo.

Languages

Embedded software is written primarily in C/C++, using CMSIS with FreeRTOS as the underlying operating system.
Scripts and Tools are written in various languages, primarily Python.
Diagrams are designed with a variety of software, code based diagrams are written in PlantUML, other diagrams are designed in Diagrams.net

Motivation

  • Readable
  • Robust
  • Modular
  • Consistent
  • Easier for new members
  • Documented from the start
  • Test Driven Design

MVP Requirements

  • Compile flags/#ifdef flag for solid vs hybrid.
  • Base Task Communication
  • UART poll and debug logging
  • Sensor log output over UART5
  • Queue
  • Abstractions for important systems
    • Class Diagrams
  • Module
  • Well documented
  • Testing Framework

Design Decisions

  • Tasks are contained and communicate using queues.
    • Possibly look into a priority queue to handle queues getting too full.
  • Abstract Base Classes for things like Sensor or Task.
  • Pointer hierarchy
    1. References
    2. Smart Pointers
      • Beware RTOS support
    3. Pointers
  • Reduce cognitive overhead by documenting your thought process for complicated tasks.
    • Especially in non-trivial ifs or big loops.

Diagrams

Sensor Poll

UART Poll

Class Diagram

Module and Folder Structure

Formatting Guidelines

  • Functions are lowercase.
    • Class related functions are uppercase.
  • Infinite Loops are written with while(1) as oppose to for(;;).

Milestones

  • Architecture Design Complete
  • MVP Complete
  • Rest of Codebase complete

Processes

Changing .ioc file

  • This should be improved in the future using a rename script, or by modifying CMake file if necessary. There may be a setting in CubeIDE
  • Whenever you change the .ioc file the following must be done
  1. Rename Core/main.cpp to Core/main.c
  2. Generate code from .ioc change
  3. Rename back to Core/main.cpp

Folder Structure

  • The Core directory contains code primarily generated by STM32CubeIDE, or for other Middlewares such as FreeRTOS.
  • Most of the written code should go into Components under the most appropriate sub-directory.

About

No description, website, or topics provided.

Resources

Stars

1 star

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Highlight search terms from Google/DuckDuckGo/Bing referrer\n(function() {\n var ref = document.referrer;\n var terms = [];\n \n if (ref.includes('google.com') || ref.includes('duckduckgo.com') || ref.includes('bing.com')) {\n var url = new URL(ref);\n var q = url.searchParams.get('q') || url.searchParams.get('p');\n if (q) {\n terms = q.split(/\\s+/).filter(function(t) { return t.length > 2; });\n }\n }\n \n if (terms.length === 0) return;\n \n var style = document.createElement('style');\n style.textContent = '.userscript-highlight { background: #fbbf24; color: #1a1a2e; padding: 1px 3px; border-radius: 2px; }';\n document.head.appendChild(style);\n \n function highlight(node) {\n if (node.nodeType === 3) { // text node\n var text = node.textContent;\n var found = false;\n terms.forEach(function(term) {\n var regex = new RegExp('(' + term.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\') + ')', 'gi');\n if (regex.test(text)) {\n found = true;\n var frag = document.createDocumentFragment();\n var parts = text.split(regex);\n parts.forEach(function(part, i) {\n if (i % 2 === 0) {\n frag.appendChild(document.createTextNode(part));\n } else {\n var span = document.createElement('span');\n span.className = 'userscript-highlight';\n span.textContent = part;\n frag.appendChild(span);\n }\n });\n node.parentNode.replaceChild(frag, node);\n }\n });\n } else if (node.nodeType === 1 && node.childNodes) { // element\n var skipTags = ['SCRIPT', 'STYLE', 'NOSCRIPT', 'TEXTAREA', 'INPUT', 'SELECT'];\n if (!skipTags.includes(node.tagName)) {\n Array.from(node.childNodes).forEach(highlight);\n }\n }\n }\n \n highlight(document.body);\n \n // Re-highlight on dynamic content\n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1 || node.nodeType === 3) highlight(node);\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Highlight Search Terms"); } } catch(__e) { console.warn('[Userscript:Highlight Search Terms]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

Avionics

FooSTMicroFreeRTOSGit

Table of Contents

  1. About This
    1. IDE support
    2. Timeline
    3. Links
  2. Languages
  3. Motivation
  4. MVP Requirements
  5. Design Decisions
    1. Diagrams
      1. Sensor Poll
      2. UART poll
      3. Class Diagram
      4. Module & Folder Structure
  6. Formatting Guidelines
  7. Milestones
  8. Processes
  9. Folder Structure

About This

This is the code repository for staging the Student Organisation for Aerospace Research (SOAR's) C++ rewrite.

The original code in this repository was written in C, The old repository can be found here.

IDE support

By default we are using the STMCubeIDE.

Use the _IDE folder to add support for your IDE of choice if needed.
Make sure to update the .gitignore.

Timeline

  • Layout desired requirements
  • Design and document architecture
    • Diagram
    • Reference other teams (if possible)
  • Scope MVP
    • Before September 6th (Classes begin)
  • Build MVP
    • PREREQ: Merge A3.3, Clang Format
    • Integration test on hardware
    • Full SW team approval
  • Create tasks and documentation to update each code section
  • Create on-boarding presentation
    • What it is
    • How it works
    • Why decisions were made
  • Merge MVP into master
  1. Design Freeze
    • End of August
  2. Design Review
    • July 30th
  3. Testing Schedule
    • Build MVP
  4. Presentation
    • Mid September
  5. Competition Data
    • June 2023

Links

  1. Brainstorming Document
  2. Formal Document

The most relevant information from both documents is distributed in this repo.

Languages

Embedded software is written primarily in C/C++, using CMSIS with FreeRTOS as the underlying operating system.
Scripts and Tools are written in various languages, primarily Python.
Diagrams are designed with a variety of software, code based diagrams are written in PlantUML, other diagrams are designed in Diagrams.net

Motivation

  • Readable
  • Robust
  • Modular
  • Consistent
  • Easier for new members
  • Documented from the start
  • Test Driven Design

MVP Requirements

  • Compile flags/#ifdef flag for solid vs hybrid.
  • Base Task Communication
  • UART poll and debug logging
  • Sensor log output over UART5
  • Queue
  • Abstractions for important systems
    • Class Diagrams
  • Module
  • Well documented
  • Testing Framework

Design Decisions

  • Tasks are contained and communicate using queues.
    • Possibly look into a priority queue to handle queues getting too full.
  • Abstract Base Classes for things like Sensor or Task.
  • Pointer hierarchy
    1. References
    2. Smart Pointers
      • Beware RTOS support
    3. Pointers
  • Reduce cognitive overhead by documenting your thought process for complicated tasks.
    • Especially in non-trivial ifs or big loops.

Diagrams

Sensor Poll

UART Poll

Class Diagram

Module and Folder Structure

Formatting Guidelines

  • Functions are lowercase.
    • Class related functions are uppercase.
  • Infinite Loops are written with while(1) as oppose to for(;;).

Milestones

  • Architecture Design Complete
  • MVP Complete
  • Rest of Codebase complete

Processes

Changing .ioc file

  • This should be improved in the future using a rename script, or by modifying CMake file if necessary. There may be a setting in CubeIDE
  • Whenever you change the .ioc file the following must be done
  1. Rename Core/main.cpp to Core/main.c
  2. Generate code from .ioc change
  3. Rename back to Core/main.cpp

Folder Structure

  • The Core directory contains code primarily generated by STM32CubeIDE, or for other Middlewares such as FreeRTOS.
  • Most of the written code should go into Components under the most appropriate sub-directory.

About

No description, website, or topics provided.

Resources

Stars

1 star

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Strip utm_, fbclid, gclid, etc. from all links on page\n(function() {\n var trackingParams = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content',\n 'fbclid', 'gclid', 'dclid', 'msclkid', 'yclid',\n 'ref', 'ref_src', 'source', 'medium', 'campaign'];\n \n function cleanUrl(url) {\n try {\n var u = new URL(url, window.location.origin);\n var changed = false;\n trackingParams.forEach(function(p) {\n if (u.searchParams.has(p)) {\n u.searchParams.delete(p);\n changed = true;\n }\n });\n return changed ? u.toString() : url;\n } catch (e) {\n return url;\n }\n }\n \n function cleanLinks() {\n document.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n \n cleanLinks();\n \n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1) {\n if (node.tagName === 'A') cleanLinks();\n node.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Remove Tracking Parameters from Links"); } } catch(__e) { console.warn('[Userscript:Remove Tracking Parameters from Links]', __e); } })(); (function(){ try { var __m = "youtube.com"; var __re = new RegExp('^' + "youtube\\.com" + '
Skip to content

Repository files navigation

Avionics

FooSTMicroFreeRTOSGit

Table of Contents

  1. About This
    1. IDE support
    2. Timeline
    3. Links
  2. Languages
  3. Motivation
  4. MVP Requirements
  5. Design Decisions
    1. Diagrams
      1. Sensor Poll
      2. UART poll
      3. Class Diagram
      4. Module & Folder Structure
  6. Formatting Guidelines
  7. Milestones
  8. Processes
  9. Folder Structure

About This

This is the code repository for staging the Student Organisation for Aerospace Research (SOAR's) C++ rewrite.

The original code in this repository was written in C, The old repository can be found here.

IDE support

By default we are using the STMCubeIDE.

Use the _IDE folder to add support for your IDE of choice if needed.
Make sure to update the .gitignore.

Timeline

  • Layout desired requirements
  • Design and document architecture
    • Diagram
    • Reference other teams (if possible)
  • Scope MVP
    • Before September 6th (Classes begin)
  • Build MVP
    • PREREQ: Merge A3.3, Clang Format
    • Integration test on hardware
    • Full SW team approval
  • Create tasks and documentation to update each code section
  • Create on-boarding presentation
    • What it is
    • How it works
    • Why decisions were made
  • Merge MVP into master
  1. Design Freeze
    • End of August
  2. Design Review
    • July 30th
  3. Testing Schedule
    • Build MVP
  4. Presentation
    • Mid September
  5. Competition Data
    • June 2023

Links

  1. Brainstorming Document
  2. Formal Document

The most relevant information from both documents is distributed in this repo.

Languages

Embedded software is written primarily in C/C++, using CMSIS with FreeRTOS as the underlying operating system.
Scripts and Tools are written in various languages, primarily Python.
Diagrams are designed with a variety of software, code based diagrams are written in PlantUML, other diagrams are designed in Diagrams.net

Motivation

  • Readable
  • Robust
  • Modular
  • Consistent
  • Easier for new members
  • Documented from the start
  • Test Driven Design

MVP Requirements

  • Compile flags/#ifdef flag for solid vs hybrid.
  • Base Task Communication
  • UART poll and debug logging
  • Sensor log output over UART5
  • Queue
  • Abstractions for important systems
    • Class Diagrams
  • Module
  • Well documented
  • Testing Framework

Design Decisions

  • Tasks are contained and communicate using queues.
    • Possibly look into a priority queue to handle queues getting too full.
  • Abstract Base Classes for things like Sensor or Task.
  • Pointer hierarchy
    1. References
    2. Smart Pointers
      • Beware RTOS support
    3. Pointers
  • Reduce cognitive overhead by documenting your thought process for complicated tasks.
    • Especially in non-trivial ifs or big loops.

Diagrams

Sensor Poll

UART Poll

Class Diagram

Module and Folder Structure

Formatting Guidelines

  • Functions are lowercase.
    • Class related functions are uppercase.
  • Infinite Loops are written with while(1) as oppose to for(;;).

Milestones

  • Architecture Design Complete
  • MVP Complete
  • Rest of Codebase complete

Processes

Changing .ioc file

  • This should be improved in the future using a rename script, or by modifying CMake file if necessary. There may be a setting in CubeIDE
  • Whenever you change the .ioc file the following must be done
  1. Rename Core/main.cpp to Core/main.c
  2. Generate code from .ioc change
  3. Rename back to Core/main.cpp

Folder Structure

  • The Core directory contains code primarily generated by STM32CubeIDE, or for other Middlewares such as FreeRTOS.
  • Most of the written code should go into Components under the most appropriate sub-directory.

About

No description, website, or topics provided.

Resources

Stars

1 star

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Auto-enable theater mode on YouTube\n(function() {\n function tryTheater() {\n var btn = document.querySelector('button[aria-label=\"Theater mode\"], ytd-player #player button[title=\"Theater mode\"]');\n if (btn && !btn.classList.contains('activated')) {\n btn.click();\n }\n }\n \n // Try immediately\n tryTheater();\n \n // Try after navigation (SPA)\n var lastUrl = location.href;\n setInterval(function() {\n if (location.href !== lastUrl) {\n lastUrl = location.href;\n setTimeout(tryTheater, 500);\n }\n }, 1000);\n \n // Also try on player load\n var observer = new MutationObserver(tryTheater);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "YouTube Theater Mode Default"); } } catch(__e) { console.warn('[Userscript:YouTube Theater Mode Default]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

Avionics

FooSTMicroFreeRTOSGit

Table of Contents

  1. About This
    1. IDE support
    2. Timeline
    3. Links
  2. Languages
  3. Motivation
  4. MVP Requirements
  5. Design Decisions
    1. Diagrams
      1. Sensor Poll
      2. UART poll
      3. Class Diagram
      4. Module & Folder Structure
  6. Formatting Guidelines
  7. Milestones
  8. Processes
  9. Folder Structure

About This

This is the code repository for staging the Student Organisation for Aerospace Research (SOAR's) C++ rewrite.

The original code in this repository was written in C, The old repository can be found here.

IDE support

By default we are using the STMCubeIDE.

Use the _IDE folder to add support for your IDE of choice if needed.
Make sure to update the .gitignore.

Timeline

  • Layout desired requirements
  • Design and document architecture
    • Diagram
    • Reference other teams (if possible)
  • Scope MVP
    • Before September 6th (Classes begin)
  • Build MVP
    • PREREQ: Merge A3.3, Clang Format
    • Integration test on hardware
    • Full SW team approval
  • Create tasks and documentation to update each code section
  • Create on-boarding presentation
    • What it is
    • How it works
    • Why decisions were made
  • Merge MVP into master
  1. Design Freeze
    • End of August
  2. Design Review
    • July 30th
  3. Testing Schedule
    • Build MVP
  4. Presentation
    • Mid September
  5. Competition Data
    • June 2023

Links

  1. Brainstorming Document
  2. Formal Document

The most relevant information from both documents is distributed in this repo.

Languages

Embedded software is written primarily in C/C++, using CMSIS with FreeRTOS as the underlying operating system.
Scripts and Tools are written in various languages, primarily Python.
Diagrams are designed with a variety of software, code based diagrams are written in PlantUML, other diagrams are designed in Diagrams.net

Motivation

  • Readable
  • Robust
  • Modular
  • Consistent
  • Easier for new members
  • Documented from the start
  • Test Driven Design

MVP Requirements

  • Compile flags/#ifdef flag for solid vs hybrid.
  • Base Task Communication
  • UART poll and debug logging
  • Sensor log output over UART5
  • Queue
  • Abstractions for important systems
    • Class Diagrams
  • Module
  • Well documented
  • Testing Framework

Design Decisions

  • Tasks are contained and communicate using queues.
    • Possibly look into a priority queue to handle queues getting too full.
  • Abstract Base Classes for things like Sensor or Task.
  • Pointer hierarchy
    1. References
    2. Smart Pointers
      • Beware RTOS support
    3. Pointers
  • Reduce cognitive overhead by documenting your thought process for complicated tasks.
    • Especially in non-trivial ifs or big loops.

Diagrams

Sensor Poll

UART Poll

Class Diagram

Module and Folder Structure

Formatting Guidelines

  • Functions are lowercase.
    • Class related functions are uppercase.
  • Infinite Loops are written with while(1) as oppose to for(;;).

Milestones

  • Architecture Design Complete
  • MVP Complete
  • Rest of Codebase complete

Processes

Changing .ioc file

  • This should be improved in the future using a rename script, or by modifying CMake file if necessary. There may be a setting in CubeIDE
  • Whenever you change the .ioc file the following must be done
  1. Rename Core/main.cpp to Core/main.c
  2. Generate code from .ioc change
  3. Rename back to Core/main.cpp

Folder Structure

  • The Core directory contains code primarily generated by STM32CubeIDE, or for other Middlewares such as FreeRTOS.
  • Most of the written code should go into Components under the most appropriate sub-directory.

About

No description, website, or topics provided.

Resources

Stars

1 star

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Remove or un-stick sticky/fixed headers that block content\n(function() {\n function unstick() {\n document.querySelectorAll('header, nav, [role=\"banner\"], .header, .navbar, .sticky, .fixed-top, [style*=\"position: fixed\"], [style*=\"position:sticky\"]').forEach(function(el) {\n if (el.style.position === 'fixed' || el.style.position === 'sticky' || \n getComputedStyle(el).position === 'fixed' || getComputedStyle(el).position === 'sticky') {\n el.style.position = 'static';\n el.style.top = 'auto';\n el.style.zIndex = 'auto';\n }\n });\n }\n \n unstick();\n \n var observer = new MutationObserver(unstick);\n observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['style', 'class'] });\n})();", "Kill Sticky Headers"); } } catch(__e) { console.warn('[Userscript:Kill Sticky Headers]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

Avionics

FooSTMicroFreeRTOSGit

Table of Contents

  1. About This
    1. IDE support
    2. Timeline
    3. Links
  2. Languages
  3. Motivation
  4. MVP Requirements
  5. Design Decisions
    1. Diagrams
      1. Sensor Poll
      2. UART poll
      3. Class Diagram
      4. Module & Folder Structure
  6. Formatting Guidelines
  7. Milestones
  8. Processes
  9. Folder Structure

About This

This is the code repository for staging the Student Organisation for Aerospace Research (SOAR's) C++ rewrite.

The original code in this repository was written in C, The old repository can be found here.

IDE support

By default we are using the STMCubeIDE.

Use the _IDE folder to add support for your IDE of choice if needed.
Make sure to update the .gitignore.

Timeline

  • Layout desired requirements
  • Design and document architecture
    • Diagram
    • Reference other teams (if possible)
  • Scope MVP
    • Before September 6th (Classes begin)
  • Build MVP
    • PREREQ: Merge A3.3, Clang Format
    • Integration test on hardware
    • Full SW team approval
  • Create tasks and documentation to update each code section
  • Create on-boarding presentation
    • What it is
    • How it works
    • Why decisions were made
  • Merge MVP into master
  1. Design Freeze
    • End of August
  2. Design Review
    • July 30th
  3. Testing Schedule
    • Build MVP
  4. Presentation
    • Mid September
  5. Competition Data
    • June 2023

Links

  1. Brainstorming Document
  2. Formal Document

The most relevant information from both documents is distributed in this repo.

Languages

Embedded software is written primarily in C/C++, using CMSIS with FreeRTOS as the underlying operating system.
Scripts and Tools are written in various languages, primarily Python.
Diagrams are designed with a variety of software, code based diagrams are written in PlantUML, other diagrams are designed in Diagrams.net

Motivation

  • Readable
  • Robust
  • Modular
  • Consistent
  • Easier for new members
  • Documented from the start
  • Test Driven Design

MVP Requirements

  • Compile flags/#ifdef flag for solid vs hybrid.
  • Base Task Communication
  • UART poll and debug logging
  • Sensor log output over UART5
  • Queue
  • Abstractions for important systems
    • Class Diagrams
  • Module
  • Well documented
  • Testing Framework

Design Decisions

  • Tasks are contained and communicate using queues.
    • Possibly look into a priority queue to handle queues getting too full.
  • Abstract Base Classes for things like Sensor or Task.
  • Pointer hierarchy
    1. References
    2. Smart Pointers
      • Beware RTOS support
    3. Pointers
  • Reduce cognitive overhead by documenting your thought process for complicated tasks.
    • Especially in non-trivial ifs or big loops.

Diagrams

Sensor Poll

UART Poll

Class Diagram

Module and Folder Structure

Formatting Guidelines

  • Functions are lowercase.
    • Class related functions are uppercase.
  • Infinite Loops are written with while(1) as oppose to for(;;).

Milestones

  • Architecture Design Complete
  • MVP Complete
  • Rest of Codebase complete

Processes

Changing .ioc file

  • This should be improved in the future using a rename script, or by modifying CMake file if necessary. There may be a setting in CubeIDE
  • Whenever you change the .ioc file the following must be done
  1. Rename Core/main.cpp to Core/main.c
  2. Generate code from .ioc change
  3. Rename back to Core/main.cpp

Folder Structure

  • The Core directory contains code primarily generated by STM32CubeIDE, or for other Middlewares such as FreeRTOS.
  • Most of the written code should go into Components under the most appropriate sub-directory.

About

No description, website, or topics provided.

Resources

Stars

1 star

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Universal Dark Mode - works on any site\n(function() {\n var enabled = true;\n \n function applyDarkMode() {\n if (!enabled) return;\n \n // Create style element if it doesn't exist\n var style = document.getElementById('universal-dark-mode-style');\n if (!style) {\n style = document.createElement('style');\n style.id = 'universal-dark-mode-style';\n document.head.appendChild(style);\n }\n \n // Dark mode CSS - inverts colors but preserves images/video\n style.textContent = '\n /* Invert everything except media */\n html {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #1a1a2e !important;\n }\n \n /* Restore images, videos, iframes, canvas */\n img, video, iframe, canvas, svg, picture, [style*=\"background-image\"] {\n filter: invert(1) hue-rotate(180deg) !important;\n }\n \n /* Preserve specific elements that should not be inverted */\n .no-dark-mode, .no-dark-mode *,\n [data-theme=\"light\"], [data-theme=\"light\"],\n .ace_editor, .ace_editor *,\n .CodeMirror, .CodeMirror *,\n .monaco-editor, .monaco-editor *,\n .markdown-body pre, .markdown-body pre *,\n .highlight, .highlight *,\n pre code, pre code * {\n filter: none !important;\n }\n \n /* Fix common UI elements */\n .modal, .popup, .dropdown-menu, .tooltip, .popover {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #2d2d44 !important;\n border-color: #444 !important;\n }\n \n /* Scrollbars */\n ::-webkit-scrollbar { background: #1a1a2e !important; }\n ::-webkit-scrollbar-thumb { background: #444 !important; }\n ::-webkit-scrollbar-thumb:hover { background: #555 !important; }\n \n /* Selection */\n ::selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ::-moz-selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ';\n }\n \n function removeDarkMode() {\n var style = document.getElementById('universal-dark-mode-style');\n if (style) style.remove();\n }\n \n // Toggle with Alt+Shift+D\n document.addEventListener('keydown', function(e) {\n if (e.altKey && e.shiftKey && e.key === 'D') {\n e.preventDefault();\n enabled = !enabled;\n if (enabled) {\n applyDarkMode();\n console.log('[Universal Dark Mode] Enabled');\n } else {\n removeDarkMode();\n console.log('[Universal Dark Mode] Disabled');\n }\n }\n });\n \n // Apply on load\n applyDarkMode();\n \n // Re-apply on dynamic content\n var observer = new MutationObserver(function(mutations) {\n if (enabled && !document.getElementById('universal-dark-mode-style')) {\n applyDarkMode();\n }\n });\n observer.observe(document.head, { childList: true });\n \n console.log('[Universal Dark Mode] Loaded - Press Alt+Shift+D to toggle');\n})();", "Universal Dark Mode"); } } catch(__e) { console.warn('[Userscript:Universal Dark Mode]', __e); } })(); })();
Skip to content

Repository files navigation

Avionics

FooSTMicroFreeRTOSGit

Table of Contents

  1. About This
    1. IDE support
    2. Timeline
    3. Links
  2. Languages
  3. Motivation
  4. MVP Requirements
  5. Design Decisions
    1. Diagrams
      1. Sensor Poll
      2. UART poll
      3. Class Diagram
      4. Module & Folder Structure
  6. Formatting Guidelines
  7. Milestones
  8. Processes
  9. Folder Structure

About This

This is the code repository for staging the Student Organisation for Aerospace Research (SOAR's) C++ rewrite.

The original code in this repository was written in C, The old repository can be found here.

IDE support

By default we are using the STMCubeIDE.

Use the _IDE folder to add support for your IDE of choice if needed.
Make sure to update the .gitignore.

Timeline

  • Layout desired requirements
  • Design and document architecture
    • Diagram
    • Reference other teams (if possible)
  • Scope MVP
    • Before September 6th (Classes begin)
  • Build MVP
    • PREREQ: Merge A3.3, Clang Format
    • Integration test on hardware
    • Full SW team approval
  • Create tasks and documentation to update each code section
  • Create on-boarding presentation
    • What it is
    • How it works
    • Why decisions were made
  • Merge MVP into master
  1. Design Freeze
    • End of August
  2. Design Review
    • July 30th
  3. Testing Schedule
    • Build MVP
  4. Presentation
    • Mid September
  5. Competition Data
    • June 2023

Links

  1. Brainstorming Document
  2. Formal Document

The most relevant information from both documents is distributed in this repo.

Languages

Embedded software is written primarily in C/C++, using CMSIS with FreeRTOS as the underlying operating system.
Scripts and Tools are written in various languages, primarily Python.
Diagrams are designed with a variety of software, code based diagrams are written in PlantUML, other diagrams are designed in Diagrams.net

Motivation

  • Readable
  • Robust
  • Modular
  • Consistent
  • Easier for new members
  • Documented from the start
  • Test Driven Design

MVP Requirements

  • Compile flags/#ifdef flag for solid vs hybrid.
  • Base Task Communication
  • UART poll and debug logging
  • Sensor log output over UART5
  • Queue
  • Abstractions for important systems
    • Class Diagrams
  • Module
  • Well documented
  • Testing Framework

Design Decisions

  • Tasks are contained and communicate using queues.
    • Possibly look into a priority queue to handle queues getting too full.
  • Abstract Base Classes for things like Sensor or Task.
  • Pointer hierarchy
    1. References
    2. Smart Pointers
      • Beware RTOS support
    3. Pointers
  • Reduce cognitive overhead by documenting your thought process for complicated tasks.
    • Especially in non-trivial ifs or big loops.

Diagrams

Sensor Poll

UART Poll

Class Diagram

Module and Folder Structure

Formatting Guidelines

  • Functions are lowercase.
    • Class related functions are uppercase.
  • Infinite Loops are written with while(1) as oppose to for(;;).

Milestones

  • Architecture Design Complete
  • MVP Complete
  • Rest of Codebase complete

Processes

Changing .ioc file

  • This should be improved in the future using a rename script, or by modifying CMake file if necessary. There may be a setting in CubeIDE
  • Whenever you change the .ioc file the following must be done
  1. Rename Core/main.cpp to Core/main.c
  2. Generate code from .ioc change
  3. Rename back to Core/main.cpp

Folder Structure

  • The Core directory contains code primarily generated by STM32CubeIDE, or for other Middlewares such as FreeRTOS.
  • Most of the written code should go into Components under the most appropriate sub-directory.

About

No description, website, or topics provided.

Resources

Stars

1 star

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages