Giter Club home page Giter Club logo

patina's Introduction

Patina

Based on the Oxdize talk by Tristan Lostroh, this repo will track the issues and assest required to bring Embedded Rust to hobbiest electronic engineers

Context: https://docs.google.com/presentation/d/1XJdM1ZhFA2RbumnIgHLvUFZNUB2PGNtzoQEsGe5a-Q0/edit?usp=sharing

View the presentation: https://youtu.be/V4u-h2N4-Bs

Goals

The primary goal is to have tools and documentation that provides the best experience to a beginner to embedded Rust.

How can I help

I want to help with tooling and IDE support

Check out probe-rs for general Embedded Tooling. Their current plans will likely get Embedded Rust to where Patina needs it. If you are interested in better debugging, look at Knurling

I want to help with Intermediate and Advanced Guides or structured learning

Knurling is the open source outreach of (Ferrous Systems)[https://ferrous-systems.com]. This program will greatly expand the amount of high quality guides and courses avaiable.

I want to help with the reference material

Awesome Rust and Awesome Embedded Rust are the current goto places for high quality content.

Both these resources however need to be kept up to date and relavant. Awesome Embedded Rust specifically could use some work with more device crates linked as well as more tutorials. Create your own adventure and link to it here!

(Tracking Issue #6)

I want to help with the organisation of the Patina project

We are still in benovolant dictator mode. It would be great for the project to be able to exist on its own or integrated into the wider Rust organisation. Please leave your suggestion in this issue

Current Tasks

  • Work with the exsiting Rust Hierarchy to ensure that Patina has the correct structure and governance
  • Update and maintain the existing documentation
  • Create and maintain a "one stop shop" of high quality guides and tutorials
  • Expand the number of embedded hal traits
  • Assist with efforts to improve VS Code to allow a lower entry bar
  • Work to develop and support a specific hardware project to allow focused guides and tutorials

Please feel free to add to this project via issues or pull requests

patina's People

Contributors

tl8roy avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

patina's Issues

Improvements to VS Code

A large percentage of the work required already exists as a part of existing extensions and CLI tools. Deciding how to best tackle these improvement is a good start.

Option 1

See if we can add a PlatformIO config to support Rust.

Option 2

Create an all in one extension like PlatformIO to create an integrated IDE experience

Option 3

Only create an extension with the bits that are missing and are unlikely to be added by others

Improvements required:

  • Semi Automatic Board selection
  • Board Manager (IE Download Board Configs)
  • Memory Management GUI (Optional)
  • Clear Check, Test, Build, Program Buttons
  • Serial Monitor (IE Comms through the same cable that it is programmed with)
  • Quick Flash (Like cargo install, but for embedded) (Designed for Bootloaders)
  • Crate Management GUI

Decide upon Hardware Board

Motivation

Making RustEmbedded accessible as part of Patina would require a single, go-to hardware board that everyone is using (much like Arduino).

ToDo

  • Make sure all requirements are collected and specified
  • Identify and collect existing boards
  • Create a feature matrix for boards + requirements to filter down candidates

Requirements

Must-Haves

  • Hardware must be Tier 1 supported (Rust Platform Support List).
  • Price needs to be about $25-45 USD.
  • Hardware must have a comprehensive Board Support Crate
    • The BSP must come with examples
    • The BSP should have clear references to up-to-date training resources
  • Minimal RAM: TbD
  • Minimal ROM: TbD
  • Minimal CPU Frequency: TbD

Nice-To-Haves

  • Open sourced and cheap clone-able
  • Wireless communications
    • If included, a complete and easy wireless stack is going to be needed
  • QEMU support for the respective architecture to allow testing as a first step

To Be Discussed

  • Debugger or not?

Collaborations & Partners

  • Working with an existing supplier is fine as long as branding is clear
  • Ferrous Systems offered to help in maintaining a "Ferrous-Supported Platform"

Concrete Board (Families)

  • Sparkfun Artemis
  • Adafruit Feather
  • PJRC Teensy
  • Potenta H7
  • ESP
  • nRF:
  • STM32 (e.g. Discovery, BluePill)

Feature Matrix (Sketch)

Board / Feature License T1 Support Price RAM ROM CPU On-Chip Debugger Wireless ...
??? ![yes] / ![ehh] / ![no] ??? ??? ??? ??? ??? ??? ???

Copy matrix styling from Zola

Discuss a strategy & structure for educational material

Motivation

In order to get people intro RustEmbedded, there must be resources (guides / tutorials / ...) for various levels of knowledge.

Tasks

  • Identify "Personas" that want to learn Rust & Embedded (e.g. high school students, University students, young professionals)
  • Structure material to fit these different audiences
  • Bring collaborators onboard (e.g. teachers, lecturers, trainers, ...)

Inspiration / Related Works

The EmbeddedRust WG already has two books "in print" that aim to fulfill a similar need:

While these books are great resources, they lack the following due to missing (human) resources:

  • Regular updates to keep the material in sync with the state-of-the-arts crates. Examples:

    • The Discovery book has a custom HAL and examples cannot easily ported to the "production" HAL people shall be using
    • The books use tooling that is partially replaced by probe-rs.
  • Multiple languages (especially for beginner material it could be essential to have a couple of things in the native language)

Understand the requirements of the target market

One of the main problems is that the initial work is unlikely to result in any big influx of people. As such, we need to formulate a plan to ensure that we both make progress towards a common goal and do things that provide value to as many people as possible.
I believe that we should focus our efforts on things not already in progress (other than ensure our requirements are met by those projects).

Decide upon project names

Patina was suggested in the comments as a good name that isn't already in use. As I like it too, the initial project name will be Patina.

High Level Traits and concepts

Notable omissions of high level traits (as not reported in Awesome Embedded Rust):

  • Storage
  • Sensors:
    -- Gyro
    -- Compass
    -- Magnetic
    -- Current
    -- Voltage (?)
    -- Temperature
    -- Humidity
    -- Pressure
    -- Encoders (EG Speed, Angular Location)
    -- Capacitance
    -- Frequency/Time
    -- IR
    -- Imaging
    -- Other sensors as appropriate
  • Motors
    -- Direct Drive
    -- Servos
    -- Steppers
    -- Brush-less
  • LEDs (?)
    -- Bi, Tri, Quad Colour
    -- LED Arrays
    -- IR
  • Analog Outputs
  • Communications
    -- Generic Layer 3 and higher protocols like Modbus
    -- USB
    -- Ethernet
  • Bootloaders

AVR Support

AVR now has Tier 3 Support.

It is unclear if it is going to be suitable for beginners or if we need to steer them towards something in the tier 2 list.

The first step is to have a play with the current AVR support on a number of Arduino (and related) and see how easy it is and if they work as expected.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.