Skip to content
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

Adding subsection on Full_Access_Only aspect #1146

Open
wants to merge 10 commits into
base: master
Choose a base branch
from

Conversation

gusthoff
Copy link
Collaborator

No description provided.

@gusthoff gusthoff added the new section Section using new content label Nov 25, 2024
@gusthoff gusthoff requested a review from pat-rogers November 25, 2024 00:21

A full access object is an object that requires that read or write operations
on this object be performed by reading or writing all bits of the object (i.e.
the *full object*) at once. Accordingly, a full access type is a type whose
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

"at once."
I think this statement doesn't go far enough to distinguish such objects (and types) from atomic objects. The resulting dynamics semantics of these objects is that, even when the source code only reads or updates a part of the object, the entire object is read or updated (and the unchanged bits are written back).
I believe the examples are also missing the above point.
See AARM22 C.6 {19.1/5 and 19.C/5}.
For examples, I can point you to some of the STM32 Ada Driver Library drivers, which lead to the request for this aspect. In these cases the STM device hardware reference manual requires volatile full access even when reading/updating subcomponents of the memory-mapped device.
The effect for an update is the same as if the source code does a read of the entire object into a temporary object, makes local subcomponent changes to that temporary, and then writes the temporary value back to the original object. For a read, the entire object is read into the temporary object, and then parts of the temporary are accessed individually. That's what the actual C version of the drivers actually does. We didn't want to do that in Ada at the source code level so we have the compiler do it.

Copy link
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Thanks for the clarification! I'll look into the Ada Driver Library for inspiration and rework the source-code examples later on.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
new section Section using new content
Projects
None yet
Development

Successfully merging this pull request may close these issues.

2 participants