esp-hal/esp-wifi/MIGRATING-0.9.md
Sergio Gasquez Arcos 3d0a1998fa
Allow configuring the watchdogs in the init config (#2180)
* feat: Allow configuring the watchdogs in the init config

* docs: Update changelog

* refactor: Remove unnecesary unsafe

* feat: Add a config module

* test: Add some init tests

* style: Rename all ocurrences to esp_hal::config::Config::default()

* style: Fix format

* fix: Doc errors

* revert: Move Config struct to lib.rs

* tests: Add default config test

* test: Add a test with CpuClock::max()

* test: Add timg1 test

* feat: Move Config struct to config module and reexport it in lib.rs

* fix: Fix init compilation for C2

* revert: Move Config struct to config module and reexport it in lib.rs

* fix: Use proper timergroup
2024-09-20 13:51:35 +00:00

112 lines
3.0 KiB
Markdown

# Migration Guide from 0.9.x to vNext
## Initialization
You no longer have to set up clocks and pass them to `esp_wifi::initialize`.
```diff
use esp_hal::{
- clock::ClockControl,
- peripherals::Peripherals,
prelude::*,
- system::SystemControl,
};
use esp_wifi::{
initialize,
// ...
};
#[entry]
fn main() -> ! {
- let peripherals = Peripherals::take();
- let system = SystemControl::new(peripherals.SYSTEM);
- let clocks = ClockControl::boot_defaults(system.clock_control).freeze();
+ let peripherals = esp_hal::init(esp_hal::Config::default());
let timg0 = TimerGroup::new(peripherals.TIMG0);
let init = initialize(
EspWifiInitFor::Wifi,
timg0.timer0,
Rng::new(peripherals.RNG),
peripherals.RADIO_CLK,
- &clocks,
)
.unwrap();
// ...
}
```
## Memory allocation
By default the `esp-alloc` feature is enabled which means you need to have a global allocator provided by `esp-alloc` allowing allocations from internal memory
```diff
#![no_std]
#![no_main]
+extern crate alloc;
+
use embedded_io::*;
+use esp_alloc as _;
use esp_backtrace as _;
// ...
#[entry]
fn main() -> ! {
+ esp_alloc::heap_allocator!(72 * 1024);
+
// ...
```
The size of the heap depends on what you are going to use esp-wifi for and if you are using the heap for your own allocations or not.
E.g. when using `coex` you need around 92k. If not using `coex`, going lower than 72k you will observe some failed allocations but it might still work. Going even lower will make things fail.
If you see linker errors regarding undefined symbols for `esp_wifi_free_internal_heap` and `esp_wifi_allocate_from_internal_ram` you either want to opt-in to use the `esp-alloc` feature
or provide your own allocator (see below)
### Using your own allocator
You can also use your own allocator instead of using `esp-alloc`. To do that you need to opt-out of the default feature `esp-alloc` and provide two functions:
```rust
#[no_mangle]
pub extern "C" fn esp_wifi_free_internal_heap() -> usize {
// return size of free allocatable RAM
}
#[no_mangle]
pub extern "C" fn esp_wifi_allocate_from_internal_ram(size: usize) -> *mut u8 {
// allocate memory of size `size` from internal memory
unsafe {
core::alloc::alloc(
esp_alloc::MemoryCapability::Internal.into(),
core::alloc::Layout::from_size_align_unchecked(size, 4),
)
}
}
```
It's important to allocate from internal memory (i.e. not PSRAM)
### Tunable parameters are now set via esp-config
We've replaced usage of `cfg_toml` with [esp-config](https://docs.rs/esp-config). Please remove any esp-wifi entries from `cfg.toml` and migrate the key value pairs to the `[env]` section of `.cargo/config.toml`.
```diff
# key in cfg.toml
- rx_queue_size = 40
# key in .cargo/config.toml [env] section
+ ESP_WIFI_RX_QUEUE_SIZE=40
```
### `wifi-logs` feature renamed to `sys-logs`
```diff
- features = ["wifi-logs"]
+ features = ["sys-logs"]
```