Skip to content

Upgrade to the upcoming version of avr-device #656

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Open
wants to merge 6 commits into
base: main
Choose a base branch
from
Open

Conversation

Rahix
Copy link
Owner

@Rahix Rahix commented May 4, 2025

The next version of avr-device will bring quite a few breaking changes, mainly due to the upgrade to a newer version of svd2rust. This PR includes all the necessary changes across avr-hal to upgrade to the new API. Please check individual commit messages for details.

This PR will be unblocked when a new release of avr-device is ready.

@Rahix Rahix added waiting-for-avr-device Waiting for a new release of `avr-device` dependencies Pull requests that update a dependency file labels May 4, 2025
@Rahix Rahix force-pushed the avr-device-next branch from d274815 to 6e53b60 Compare May 5, 2025 15:14
Rahix added 2 commits May 5, 2025 17:51
Use latest avr-device as a git dependency for testing the upcoming
version.
This allows us to see which targets are currently failing the build.
@Rahix Rahix force-pushed the avr-device-next branch from 6e53b60 to 0981791 Compare May 5, 2025 15:51
Rahix added 4 commits May 5, 2025 17:59
As avr-device is upgrading to use svd2rust version 0.33.1, there are
some significant changes in the generated API.  We have to adapt the HAL
code to use the new API whereever relevant.

This commit was mostly generated using the following command, which adds
the parentheses behind each register access to change it from
struct-field access to method call.

	cargo build --message-format json 2>/dev/null \
	  | jq '.message.children[].spans[] | {file: .file_name, line: .line_start, col: (.text[0].highlight_start - 1), insert: .suggested_replacement}' 2>/dev/null \
	  | jq -r '"sed -ri '"'"'" + (.line | tostring) + "s/^(.{" + (.col | tostring) + "})/\\1" + .insert + "/'"'"' $(cd ../..; realpath " + .file + ")"' \
	  | sort | uniq | bash

Shell magic for the win :)

Beyond this, .bits() had to be converted to .set() where safe accesses
are performed.
avr-device no longer has a `critical-section-impl` feature.  Instead it
now has a `critical-section` feature that is enabled by default [1].  As
such, we can drop the re-exposed feature here.

[1]: Rahix/avr-device#195
In svd2rust 0.34.0, the `.write()` and `.modify()` register access
functions were changed to return the written register value.  As
avr-device is upgrading to a more recent svd2rust version, we need to
adjust accordingly.

Fixup the few places where the return value of `.write()` or `.modify()`
mattered due to expression form calls.
Previous versions of `avr-device` allowed accidentally mis-specifying
the MCU in the interrupt definition.  Now that this is caught, fix one
such mistake here.
@Rahix Rahix force-pushed the avr-device-next branch from 0981791 to 3e05785 Compare May 5, 2025 15:59
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
dependencies Pull requests that update a dependency file waiting-for-avr-device Waiting for a new release of `avr-device`
Projects
None yet
Development

Successfully merging this pull request may close these issues.

1 participant