stm32-rs
bevy
Our great sponsors
stm32-rs | bevy | |
---|---|---|
8 | 573 | |
1,168 | 32,210 | |
3.9% | 3.8% | |
8.9 | 9.9 | |
5 days ago | 4 days ago | |
Python | Rust | |
Apache License 2.0 | MIT OR Apache-2.0 |
Stars - the number of stars that a project has on GitHub. Growth - month over month growth in stars.
Activity is a relative number indicating how actively a project is being developed. Recent commits have higher weight than older ones.
For example, an activity of 9.0 indicates that a project is amongst the top 10% of the most actively developed projects that we are tracking.
stm32-rs
-
STM32F4 Embedded Rust at the PAC: svd2rust
Developing code at the PAC, well, requires a PAC crate for the targeted controller. For the STM32 there exists a repo for all the supported PACs. These PACs are all generated using a command line tool called svd2rust. svd2rust grabs what is called an svd file and converts it into a PAC exposing API allowing access to peripheral registers. An SVD file is an Extensible Markup Language (XML) formatted file describing the hardware features of a device, listing all the peripherals and the registers associated with them. SVD files typically are released by microcontroller manufacturers.
-
Next Rust Compiler
In real world software, 99% of code is gluing preexisting lower-level functions together. In C/C++, the unsafe is implicit and needlessly covers everything. In Rust, the unsafe is only needed for the 1%.
You can safely implement a doubly-linked list in Rust, using unsafe, and that list can offer a safe interface so that the next higher level of code does not need to use unsafe. In fact, one doubly-linked list implementation that provides a safe interface is in the Rust standard library: https://doc.rust-lang.org/std/collections/struct.LinkedList.... . Most people do not rewrite std::list in C++ either.
Much of the Linux kernel really is the same: normal C code (maybe slightly more complicate than average userspace code, and definitely more carefully reviewed, but definitely not magic), that depends on extra carefully written lower level primitives that are _much_ more complicated internally than they appear from the outside (like the memory allocator, printk, RCU, etc.).
Rust is powerful enough to have libraries for register level access to micro-controllers (e.g. https://github.com/stm32-rs/stm32-rs), that encode moderately complex access rules safely in the type system (e.g. which specific set of bits is read-only or write-only, with which particular values (with nice human-readable names, even!), in which particular states of a state machine depending on other bits), all while allowing bypassing the restrictions with a simple unsafe keyword without even giving up on the nice API.
On the C/C++ side, I've used libopencm3, MBED, CMSIS, and everyone's favorite toy, Arduino. They're, in different ways, all much more mature and complete than anything Rust has today, but nothing comes even remotely close to Rust in terms of safety and long term potential.
-
NVIDIA Security Team: “What if we just stopped…
Packages: Where would I start with e.g. running Ada on a stm32? Resources are just a bit tough to find, and there's only a single stm32 package on Alire (which was inspired by cargo). But Rust has easy to find PACs and HALs for everything in the family, plus an official guide to setting up a project, including HIL debugging and unit testing on qemu, that takes about 15 minutes.
-
Cloning a Rare ISA Card to Use a Rare CD Drive
> (I threw out all my C/C++ books about 15 years ago - oops!).
The future is here for STM32: https://github.com/stm32-rs/stm32-rs
- Is there a database of peripheral implementations for different STM32 MCU parts?
-
Writing embedded firmware using Rust
Specifically these Rust register definitions are being auto-generated using SVD files published by the chip vendors (https://www.keil.com/pack/doc/CMSIS/SVD/html/index.html). For stm32 for example there are the auto-generated register definitions: https://github.com/stm32-rs/stm32-rs and then the HAL layers on top that try to build easy to use tools on top of the registers (e.g. an SPI or USART type with write and read functions). e.g. https://github.com/stm32-rs/stm32f4xx-hal for the stm32f4xx line
-
Any frameworks in Rust for developing on SiFive / ST / NXP boards?
For STM32, check out the Peripheral Access Crates by the stm32-rs ream. For higher-level access, I wrote This HAL library for STM32. Works on most newer variants, and includes examples for specific peripherals, and simple applications.
-
CMSIS libraries
Patches: https://github.com/stm32-rs/stm32-rs/tree/master/devices
bevy
-
Web Game Engines and Libraries
Missing one of the best choices as long as "maturity" isn't on the top of your list: Bevy - https://bevyengine.org/
Game engine written in Rust, leveraging ECS in almost every place and way, with a really capable WASM export option. Wrestling ECS for the first time might take you some time, but in my experience helps you keep game code as clean and decoupled as game code could be.
-
3D and 2D: Testing out my cross-platform graphics engine
I don't see WASM/WebGPU changing anything when it comes to gaming, as an industry, personally. 3d visualizations and interactive websites? Yeah definitely a nice improvement over WebGL 2, if years late.
WebGPU is pretty far behind what AAA games are using even as of 6 years ago. There's extra overhead and security in the WebGPU spec that AAA games do not want. Browsers do not lend themselves to downloading 300gb of assets.
Additionally, indie devs aren't using Steam for the technical capabilities. It's purely about marketshare. Video games are a highly saturated market. The users are all on Steam, getting their recommendations from Steam, and buying games in Steam sales. Hence all the indie developers publish to Steam. I don't see a web browser being appealing as a platform, because there's no way for developers to advertise to users.
That's also only indie games. AAA games use their own launchers, because they don't _need_ the discoverability from being on Steam. So they don't, and avoid the fees. If anything users _want_ the Steam monopoly, because they like the platform, and hate the walled garden launchers from AAA companies.
(I work on high end rendering features for the Bevy game engine https://bevyengine.org, and have extensive experience with WebGPU)
-
What Are Const Generics and How Are They Used in Rust?
I was working through an example in the repo for the Bevy game engine recently and came across this code
-
WebAssembly Playground
That's possible. I did spend quite a bit of time tinkering with compiler flags, and followed the recommendations.
Some notes I found just now seems to agree with my results, though: https://github.com/bevyengine/bevy/issues/3978#issuecomment-...
-
Immediate Mode GUI Programming
I cannot recommend immediate mode GUI programming based on the limitations I've experienced working with egui.
egui does not support putting two widgets in the center of the screen: https://github.com/emilk/egui/issues/3211
It's really easy to get started with immediate mode, it's really easy to bust out some UI, but the second you start trying to involve dynamically resized context and responsive layouts -- abandon all hope. The fact it has to calculate everything in a single pass makes these things hard/impossible.
... that said, I'm still using it for https://ant.care/ (https://github.com/MeoMix/symbiants) because it's the best thing I've found. I'm crossing my fingers that Bevy's UI story (or Kayak https://github.com/StarArawn/kayak_ui) become significantly more fleshed out sooner rather than later. Bevy 0.13 should have lots more in this area though (https://github.com/bevyengine/bevy/discussions/9538)
- A minimal working Rust / SDL2 / WASM browser game
-
ECS, Finally
I've also been enjoying building My First Game™ in Bevy using ECS. The community around Bevy really shines, but Flecs (https://github.com/SanderMertens/flecs) is arguably a more mature, open-source ECS implementation. You don't get to write in Rust, though, which makes it less cool in my book :)
I'm not very proud of the code I've written because I've found writing a game to be much more confusing than building websites + backends, but, as the author notes, it certainly feels more elegant than OOP or globals given the context.
I'm building for WASM and Bevy's parallelism isn't supported in that context (yet? https://github.com/bevyengine/bevy/issues/4078), so the performance wins are just so-so. Sharing a thread with UI rendering suuucks.
If anyone wants to browse some code or ask questions, feel free! https://github.com/MeoMix/symbiants
-
Intel CEO: 'The entire industry is motivated to eliminate the CUDA market'
These days, some game engines have done pretty well at making compute shaders easy to use (such as Bevy [1] -- disclaimer, I contribute to that engine). But telling the scientific/financial/etc. community that they need to run their code inside a game engine to get a decent experience is a hard sell. It's not a great situation compared to how easy it is on NVIDIA's stack.
[1]: https://github.com/bevyengine/bevy/blob/main/examples/shader...
-
Trying to write a game with mods loaded at runtime
This is the API you need: https://github.com/bevyengine/bevy/pull/9774
- Not only Unity...
What are some alternatives?
libopencm3 - Open source ARM Cortex-M microcontroller library
Amethyst - Data-oriented and data-driven game engine written in Rust
stm32-hal - This library provides access to STM32 peripherals in Rust.
Godot - Godot Engine – Multi-platform 2D and 3D game engine
stm32f4xx-hal - A Rust embedded-hal HAL for all MCUs in the STM32 F4 family
Fyrox - 3D and 2D game engine written in Rust
probe-run - Run embedded programs just like native ones
piston - A modular game engine written in Rust
hubris - A lightweight, memory-protected, message-passing kernel for deeply embedded systems.
RG3D - 3D and 2D game engine written in Rust [Moved to: https://github.com/FyroxEngine/Fyrox]
esp32 - Peripheral access crate for the ESP32
specs - Specs - Parallel ECS