SCB (System Control Block) in ARM Architecture - Time & Space Complexity
When working with the System Control Block (SCB) in ARM architecture, it is important to understand how the time to access or modify its registers grows as the number of operations increases.
We want to know how the execution time changes when we perform multiple SCB register reads or writes.
Analyze the time complexity of the following ARM assembly code snippet that reads and writes SCB registers in a loop.
MOV R0, #0 ; Initialize counter
loop:
LDR R1, [SCB_BASE, #OFFSET] ; Read SCB register
STR R1, [SCB_BASE, #OFFSET] ; Write back to SCB register
ADD R0, R0, #1 ; Increment counter
CMP R0, #N ; Compare with N
BLT loop ; Loop if R0 < N
This code reads and writes a SCB register N times in a loop.
In this code, the main repeating operations are:
- Primary operation: Reading and writing the SCB register inside the loop.
- How many times: Exactly N times, controlled by the loop counter.
As the number N increases, the number of read and write operations to the SCB registers grows linearly.
| Input Size (N) | Approx. Operations |
|---|---|
| 10 | 20 (10 reads + 10 writes) |
| 100 | 200 (100 reads + 100 writes) |
| 1000 | 2000 (1000 reads + 1000 writes) |
Pattern observation: The total operations double the input size because each iteration does one read and one write.
Time Complexity: O(N)
This means the time to complete the operations grows directly in proportion to the number of iterations N.
[X] Wrong: "Accessing SCB registers is instantaneous and does not affect execution time regardless of how many times it happens."
[OK] Correct: Each read or write to SCB registers takes processor cycles, so doing it many times adds up and increases total execution time linearly.
Understanding how repeated hardware register accesses affect execution time helps you reason about low-level system performance and write efficient embedded code.
What if we replaced the loop with a single bulk operation that reads and writes multiple SCB registers at once? How would the time complexity change?
Practice
System Control Block (SCB) in ARM processors?Solution
Step 1: Understand SCB's function in ARM
The SCB is designed to manage system-level control tasks and handle exceptions such as faults and interrupts.Step 2: Differentiate SCB from other components
Unlike memory or peripheral controllers, SCB focuses on system control and exception handling.Final Answer:
Manage system-level control and handle exceptions -> Option AQuick Check:
SCB = system control and exceptions [OK]
- Confusing SCB with peripheral controllers
- Thinking SCB manages user data
- Assuming SCB handles memory allocation
Solution
Step 1: Identify the reset trigger method in SCB
To trigger a system reset, the AIRCR (Application Interrupt and Reset Control Register) requires writing the key 0x5FA to the VECTKEY field and setting the SYSRESETREQ bit.Step 2: Verify other options
NVIC does not have a RESET bit; SCR and CCR registers do not control reset directly.Final Answer:
Write 0x5FA to the AIRCR register's VECTKEY field and set SYSRESETREQ bit -> Option BQuick Check:
Reset = AIRCR key 0x5FA + SYSRESETREQ [OK]
- Writing wrong key to AIRCR
- Trying to reset via NVIC or SCR registers
- Not setting SYSRESETREQ bit
uint32_t reset_cause = SCB->ICSR & SCB_ICSR_VECTACTIVE_Msk;
printf("Active vector: %lu\n", reset_cause);Solution
Step 1: Understand the ICSR register and VECTACTIVE field
The ICSR (Interrupt Control and State Register) contains the VECTACTIVE field which holds the number of the currently active interrupt vector.Step 2: Analyze the code operation
The code masks ICSR with VECTACTIVE_Msk to extract the active vector number and prints it as an unsigned long integer.Final Answer:
The active interrupt vector number -> Option CQuick Check:
ICSR & VECTACTIVE = active vector number [OK]
- Confusing active vector with reset cause
- Assuming compilation error due to register access
- Thinking it shows processor mode
SCB->CCR |= (1 << 4);
but the trap does not activate. What is the likely issue?
Solution
Step 1: Identify the correct bit for divide-by-zero trap in CCR
In the SCB_CCR register, the divide-by-zero trap enable bit is bit 3, not bit 4.Step 2: Understand the effect of setting wrong bit
Setting bit 4 has no effect because it is not assigned to enable the divide-by-zero trap.Final Answer:
The divide-by-zero trap enable bit is bit 3, not bit 4 -> Option DQuick Check:
Divide-by-zero trap = CCR bit 3 [OK]
- Setting wrong bit in CCR
- Assuming write key needed for CCR
- Thinking SCB registers are read-only
Solution
Step 1: Prioritize system handlers using SHPR and AIRCR
System Handler Priority Registers (SHPR) set priorities for system exceptions. The AIRCR register's PRIGROUP field controls priority grouping.Step 2: Enable fault exceptions only in privileged mode using FAULTMASK
FAULTMASK register masks fault exceptions in unprivileged mode, allowing faults only in privileged mode.Final Answer:
Set SHPR registers to assign priority and set the PRIGROUP field in AIRCR; enable FAULTMASK for privileged faults -> Option AQuick Check:
SHPR + AIRCR PRIGROUP + FAULTMASK = prioritized privileged faults [OK]
- Confusing SCR bits with priority control
- Using VECTRESET for priority settings
- Ignoring FAULTMASK role in privilege filtering
Ready to prove it?
Pass the test and this pattern moves unknown
