Skip to content
GitLab
Explore
Sign in
Register
Primary navigation
Search or go to…
Project
E
e7020e_2021
Manage
Activity
Members
Labels
Plan
Issues
Issue boards
Milestones
Wiki
Code
Merge requests
Repository
Branches
Commits
Tags
Repository graph
Compare revisions
Snippets
Build
Pipelines
Jobs
Pipeline schedules
Artifacts
Deploy
Releases
Package registry
Model registry
Operate
Environments
Terraform modules
Monitor
Incidents
Analyze
Value stream analytics
Contributor analytics
CI/CD analytics
Repository analytics
Model experiments
Help
Help
Support
GitLab documentation
Compare GitLab plans
Community forum
Contribute to GitLab
Provide feedback
Keyboard shortcuts
?
Snippets
Groups
Projects
Show more breadcrumbs
Anton Johansson
e7020e_2021
Commits
3fc043a2
Commit
3fc043a2
authored
4 years ago
by
Anton
Browse files
Options
Downloads
Patches
Plain Diff
bare1_5
parent
b436392d
No related branches found
No related tags found
No related merge requests found
Changes
1
Show whitespace changes
Inline
Side-by-side
Showing
1 changed file
examples/rtic_bare1.rs
+30
-14
30 additions, 14 deletions
examples/rtic_bare1.rs
with
30 additions
and
14 deletions
examples/rtic_bare1.rs
+
30
−
14
View file @
3fc043a2
...
...
@@ -20,9 +20,9 @@ const APP: () = {
fn
init
(
_cx
:
init
::
Context
)
{
let
mut
x
=
core
::
u32
::
MAX
-
1
;
loop
{
//
cortex_m::asm::bkpt();
x
+
=
1
;
//
cortex_m::asm::bkpt();
cortex_m
::
asm
::
bkpt
();
x
=
x
.wrapping_add
(
1
)
;
cortex_m
::
asm
::
bkpt
();
// prevent optimization by read-volatile (unsafe)
unsafe
{
...
...
@@ -138,13 +138,13 @@ const APP: () = {
//
// Explain in your own words what this assembly line does.
//
//
** your answer here **
//
load the value of the address sp + offset 0 to register address r0
//
// In Cortex Registers (left) you can see the content of `r0`
//
// What value do you observe?
//
//
** your answer here **
//
-2 (MAX-2)
//
// You can also get the register info from GDB directly.
//
...
...
@@ -162,7 +162,7 @@ const APP: () = {
//
// Explain in your own words what is happening here.
//
//
** your answer here **
//
add to the register r0 the immidiate constant 1
//
// We move to the next assembly instruction:
//
...
...
@@ -171,7 +171,7 @@ const APP: () = {
//
// What is the reported value for `r0`
//
//
** your answer here **
//
-1 (MAX) (0xffffffff)
//
// So far so good.
//
...
...
@@ -202,7 +202,7 @@ const APP: () = {
//
// What does BCS do?
//
//
** your answer here **
//
BCS.n branches if there was a carry bit from the last addition. (.n makes the instruction to be 16 bits)
//
// Now let's see what happens.
//
...
...
@@ -216,7 +216,7 @@ const APP: () = {
//
// Explain in your own words where we are heading.
//
//
** your answer here **
//
We are heading toward a branch to the panic "function"
//
// To validate that your answer, let's let the program continue
//
...
...
@@ -232,7 +232,7 @@ const APP: () = {
// Hint 3, the code is generated by the Rust compiler to produce the error message.
// there is no "magic" here, just a compiler generating code...
//
//
** your answer here **
//
it is to generate the error message.
//
// Commit your answer (bare1_4)
//
...
...
@@ -285,7 +285,7 @@ const APP: () = {
//
// Do you see any way this code may end up in a panic?
//
//
** your answer here **
//
No since there is no branching when there is a carry.
//
// So clearly, the "semantics" (meaning) of the program has changed.
// This is on purpose, Rust adopts "unchecked" (wrapping) additions (and subtractions)
...
...
@@ -300,16 +300,32 @@ const APP: () = {
//
// Paste the generated assembly:
//
// ** your answer here **
// 0x08000e84 <+0>: push {r4, r6, r7, lr}
// 0x08000e86 <+2>: add r7, sp, #8
// 0x08000e88 <+4>: sub sp, #16
// 0x08000e8a <+6>: movw r0, #5808 ; 0x16b0
// 0x08000e8e <+10>: mov r4, sp
// 0x08000e90 <+12>: movt r0, #2048 ; 0x800
// 0x08000e94 <+16>: ldr r0, [r0, #0]
// 0x08000e96 <+18>: str r0, [sp, #0]
// 0x08000e98 <+20>: bl 0x8000fa6 <lib::__bkpt>
// => 0x08000e9c <+24>: ldr r0, [sp, #0]
// 0x08000e9e <+26>: adds r0, #1
// 0x08000ea0 <+28>: str r0, [sp, #0]
// 0x08000ea2 <+30>: bl 0x8000fa6 <lib::__bkpt>
// 0x08000ea6 <+34>: mov r0, r4
// 0x08000ea8 <+36>: bl 0x8000f46 <_ZN4core3ptr13read_volatile17hb977623ea709e27cE>
// 0x08000eac <+40>: b.n 0x8000e98 <rtic_bare1::init+20>
//
// Can this code generate a panic?
//
//
** your answer here **
//
No, no branch to a panic "function"
//
// Is there now any reference to the panic handler?
// If not, why is that the case?
//
// ** your answer here **
// There is no reference since there is no need for it as we have stated that
// wrapping is the intended outcome
//
// commit your answers (bare1_5)
//
...
...
This diff is collapsed.
Click to expand it.
Preview
0%
Loading
Try again
or
attach a new file
.
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Save comment
Cancel
Please
register
or
sign in
to comment