initial commit

This commit is contained in:
okhsunrog 2024-08-07 12:04:11 +03:00
commit 05e85fae2b
10 changed files with 1406 additions and 0 deletions

18
.cargo/config.toml Normal file
View file

@ -0,0 +1,18 @@
[env]
DEFMT_LOG="info"
[build]
target = "riscv32imc-unknown-none-elf"
rustflags = [
"-C", "link-arg=-Tdefmt.x",
"-C", "link-arg=-Tlinkall.x",
# NOTE: This is required to obtain backtraces, however it may negatively
# impact the performance of your application.
"-C", "force-frame-pointers",
]
[target.riscv32imc-unknown-none-elf]
runner = "probe-rs run --chip=esp32c3"
[unstable]
build-std = ["core"]

17
.gitignore vendored Normal file
View file

@ -0,0 +1,17 @@
# Generated by Cargo
# will have compiled files and executables
debug/
target/
# These are backup files generated by rustfmt
**/*.rs.bk
# MSVC Windows builds of rustc generate these, which store debugging information
*.pdb
# RustRover
# JetBrains specific template is maintained in a separate JetBrains.gitignore that can
# be found at https://github.com/github/gitignore/blob/main/Global/JetBrains.gitignore
# and can be added to the global gitignore or merged into this file. For a more nuclear
# option (not recommended) you can uncomment the following to ignore the entire idea folder.
#.idea/

3
.vscode/extensions.json vendored Normal file
View file

@ -0,0 +1,3 @@
{
"recommendations": ["rust-lang.rust-analyzer", "tamasfe.even-better-toml"]
}

10
.vscode/settings.json vendored Normal file
View file

@ -0,0 +1,10 @@
{
"editor.formatOnSave": true,
// Even Better TOML:
"evenBetterToml.formatter.alignComments": true,
"evenBetterToml.formatter.alignEntries": true,
"evenBetterToml.formatter.arrayAutoExpand": true,
"evenBetterToml.formatter.arrayTrailingComma": true,
"evenBetterToml.formatter.reorderArrays": true
}

1265
Cargo.lock generated Normal file

File diff suppressed because it is too large Load diff

25
Cargo.toml Normal file
View file

@ -0,0 +1,25 @@
[package]
name = "esp_hal_probe"
version = "0.1.0"
edition = "2021"
rust-version = "1.76.0"
[[bin]]
name = "firmware"
path = "src/bin/firmware.rs"
[dependencies]
defmt = "0.3.8"
defmt-rtt = "0.4.1"
embassy-executor = { version = "0.5.0", features = ["defmt"] }
embassy-time = { version = "0.3.1", features = ["generic-queue-8"] }
esp-backtrace = { version = "0.13.0", features = ["esp32c3", "defmt", "exception-handler", "panic-handler"] }
esp-hal = { version = "0.19.0", features = ["esp32c3", "defmt", "async"] }
esp-hal-embassy = { version = "0.2.0", features = ["esp32c3", "defmt"] }
static_cell = { version = "2.1.0", features = ["nightly"] }
[profile.release]
debug = true # Debug info is useful, and does not affect the size of the final binary
codegen-units = 1 # LLVM can perform better optimizations using a single thread
lto = "fat" # Attempt to perform optimizations across all crates within the dependency graph
opt-level = "s" # Optimize for binary size, but keep loop vectorization enabled

4
rust-toolchain.toml Normal file
View file

@ -0,0 +1,4 @@
[toolchain]
channel = "nightly-2024-06-01"
components = ["rust-src"]
targets = ["riscv32imc-unknown-none-elf"]

16
rustfmt.toml Normal file
View file

@ -0,0 +1,16 @@
# Edition
edition = "2021"
# Comments
format_code_in_doc_comments = true
normalize_comments = true
wrap_comments = true
# Imports
group_imports = "StdExternalCrate"
imports_granularity = "Crate"
imports_layout = "HorizontalVertical"
# Miscellaneous
enum_discrim_align_threshold = 25
hex_literal_case = "Upper"

47
src/bin/firmware.rs Normal file
View file

@ -0,0 +1,47 @@
#![no_std]
#![no_main]
#![feature(type_alias_impl_trait)]
use defmt::info;
use defmt_rtt as _;
use embassy_executor::Spawner;
use embassy_time::{Duration, Timer};
use esp_backtrace as _;
use esp_hal::{
clock::ClockControl,
peripherals::Peripherals,
prelude::*,
rtc_cntl::Rtc,
system::SystemControl,
timer::{timg::TimerGroup, OneShotTimer},
};
use static_cell::make_static;
#[main]
async fn main(spawner: Spawner) {
let peripherals = Peripherals::take();
let system = SystemControl::new(peripherals.SYSTEM);
let clocks = ClockControl::boot_defaults(system.clock_control).freeze();
// Enable the RWDT watchdog timer:
let mut rtc = Rtc::new(peripherals.LPWR, None);
rtc.rwdt.set_timeout(2.secs());
rtc.rwdt.enable();
info!("RWDT watchdog enabled!");
// Initialize the SYSTIMER peripheral, and then Embassy:
let timg0 = TimerGroup::new(peripherals.TIMG0, &clocks, None);
let timers = [OneShotTimer::new(timg0.timer0.into())];
let timers = make_static!(timers);
esp_hal_embassy::init(&clocks, timers);
info!("Embassy initialized!");
// TODO: Spawn some tasks
let _ = spawner;
// Periodically feed the RWDT watchdog timer when our tasks are not running:
loop {
rtc.rwdt.feed();
Timer::after(Duration::from_secs(1)).await;
}
}

1
src/lib.rs Normal file
View file

@ -0,0 +1 @@
#![no_std]