riscv-rust / e310x-hal

Implementation of the `embedded-hal` traits for E310x microcontrollers
17 stars 18 forks source link

force-amo: allowing AMOxxx instructions for riscv32imc #57

Open romancardenas opened 10 months ago

romancardenas commented 10 months ago

The E310X atomic support is limited, as it only allows us to use AMO instructions, while LR/SC instructions provoke an exception. Thus, we need to provide support for riscv32imc-unknown-none-elf to use LR/SC instructions via portable-atomic. However, currently you either use emulation of all the atomic instructions or a faulty atomic target.

This PR uses a new version of portable-atomic, which added a new feature to use real AMO instructions for riscv32imc-unknown-none-elf targets while emulating LR/SC instructions. This is particularly well-suited for the E310x microcontroller. Note that the MSRV is now 1.72.

As a side note: In my opinion, this microcontroller does not deserve to be called a riscv32imac target. We should stop supporting riscv32imac and clearly document this particularity, asking users to always use riscv32imc with portable-atomic and force-amo when needed.

romancardenas commented 10 months ago

This PR solves #56