some complement

This commit is contained in:
2025-10-14 14:35:08 +09:00
parent 838560ecf7
commit e7ac32e095
5 changed files with 153 additions and 0 deletions

113
4.md Normal file
View File

@@ -0,0 +1,113 @@
# Memory
## Default Memory Access Permissions
The Cortex-M3 memory map has a default configuration for memory access permissions
Default memory access permission is used when either:
* No MPU is present
* MPU is present but disabled
Otherwise MPU will determine
When a memory access is blocked the fault exception takes place immediately.
```python { cmd matplotlib hide }
import pymupdf
from PIL import Image
doc = pymupdf.open("./pdf/L4.pdf")
pix = doc[12].get_pixmap()
img = Image.frombytes("RGB", [pix.width, pix.height], pix.samples)
plt.axis('off')
plt.subplots_adjust(left=0, right=1, top=1, bottom=0)
plt.imshow(img)
plt.show()
```
## MPU(Memory Protection Unit)
MPU
Regions can be overlapped only in ARMv7
## Bit-Band Operations
it allows a single load/store opertation to access a **single data bit**.
Bit-band regions:
* The first 1MB of the SRAM region
* The first 1MB of theperipheral region
They can be accessed via a separate memory region called the bit-band alias.
Bit-Banding done transparently by **bus matrix**.
### Write to Bit-Band Alias
* Without Bit-Band:
```armasm
LDR R0, =0x20000000 ; Setup address
LDR R1, [R0] ; Read
ORR.W R1, #0x4 ; Modify bit
STR R1, [R0] ; Write back result
```
* With Bit-Band:
```armasm
LDR R0, =0x22000008 ; Setup address
MOV R1, #1 ; Setup data
STR R1, [R0] ; Write
```
### Read from the Bit-Band Alias
To get bit 2 in word data in address `0x20000000`:
* Without
```armasm
LDR R0, =0x20000000 ; Setup address
LDR R1, [R0] ; Read
UBFX.W R1, R1, #2, #1 ; Extract Bit[2]
```
* With
```armasm
LDR R0, = 0x22000008 ; Setup address
LDR R1, [R0] ; Read
```
### Advantages of using bit-band ops
* Faster bit operations with fewer instructions
* Prevent a **race condition** problem in bit modification
### Usecase in C
* There is no native support of bit-band ops in most C compilers
* The simplest solution is to separately declare the address and the bit-band alias of a memory location
```c
#define DEVICE_REGO *((volatile unsigned long *) 0x40000000)
#define DEVICE REGO_BIT0 *((volatile unsigned long *) 0x42000000)
#define DEVICE REGO_BIT1 *((volatile unsigned long *) 0x42000004)
```
## Unaligned Transfers
Coretex-M3 optionally supports unaligned transfers on single accesses.
Data memory accesses can be defined as aligned or unaligned.
Unaligned transfers are converted into multiple aligned transfers by the processor's bus interface unit:
* transparent to application programmers
* it takes more clock cycles for a single data access
Limitations:
* Not supported in load/store multiple instructions
* Stack operations (PUSH/POP) must be aligned
* Exclusive access must be aligned
* Unaligned transfers are not supported in bit-band ops

31
5.md Normal file
View File

@@ -0,0 +1,31 @@
# ARM ISA
## Syntax of Assembly
* Label: Define a symbol
```
label:
```
* Instruction
* Directive
```
.directive[;]
```
* macro_invocation
## Assembly Expression
Expressions consist of one or more integer literals or symbol references, combined using operators. Expression can be used as instruction operands or directive argument.
Assembler evaluates all expression, which means **no rum-time evaluation**.
Assembly Expressions are
* Constnats
* Symbol References
* Operators
* Unary Operators: `+`, `-`, `~`
* Binary Operators: `+`, `-`, `*`, `/`, `%`
* Binary Logical Operators: `&&`, `||`
* Binary Bitwise Operators: `&`, `|`, `^`, `>>`, `<<`
* Binary Comparison Operators: `<`, `<=`, `>`, `>=`, `==`, `!=`

BIN
pdf/L4.pdf (Stored with Git LFS) Normal file

Binary file not shown.

BIN
pdf/L5.pdf (Stored with Git LFS) Normal file

Binary file not shown.

BIN
pdf/L6.pdf (Stored with Git LFS) Normal file

Binary file not shown.