Demonstration of a spin lock
Dependencies: ELEC350-Practicals-FZ429
Fork of Task617Solution-mbedos-FZ429 by
myasm.s@8:ad00c9036add, 2017-11-09 (annotated)
- Committer:
- noutram
- Date:
- Thu Nov 09 14:43:39 2017 +0000
- Revision:
- 8:ad00c9036add
Demonstration of a spin lock
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
noutram | 8:ad00c9036add | 1 | AREA asm_func, CODE, READONLY |
noutram | 8:ad00c9036add | 2 | ; Export my_asm function location so that C compiler can find it and link |
noutram | 8:ad00c9036add | 3 | EXPORT myasm |
noutram | 8:ad00c9036add | 4 | myasm |
noutram | 8:ad00c9036add | 5 | |
noutram | 8:ad00c9036add | 6 | ; Write assmebler here |
noutram | 8:ad00c9036add | 7 | MOV R1, #0x20000000 |
noutram | 8:ad00c9036add | 8 | BX R1 ; THIS IS BAD |
noutram | 8:ad00c9036add | 9 | BX LR |
noutram | 8:ad00c9036add | 10 | |
noutram | 8:ad00c9036add | 11 | EXPORT spinlock |
noutram | 8:ad00c9036add | 12 | spinlock |
noutram | 8:ad00c9036add | 13 | LDREX R1,[R0] ;Read counter |
noutram | 8:ad00c9036add | 14 | SUBS R1, #1 ;Subtract 1 |
noutram | 8:ad00c9036add | 15 | ITT PL ;IF True True >= 0 |
noutram | 8:ad00c9036add | 16 | STREXPL R2,R1,[R0] ;TRY UPDATE |
noutram | 8:ad00c9036add | 17 | CMPPL R2,#0 ;SUCCEED? |
noutram | 8:ad00c9036add | 18 | BNE spinlock |
noutram | 8:ad00c9036add | 19 | BX LR |
noutram | 8:ad00c9036add | 20 | |
noutram | 8:ad00c9036add | 21 | EXPORT spinunlock |
noutram | 8:ad00c9036add | 22 | spinunlock |
noutram | 8:ad00c9036add | 23 | LDREX R1,[R0] |
noutram | 8:ad00c9036add | 24 | ADD R1,#1 |
noutram | 8:ad00c9036add | 25 | STREX R2,R1,[R0] |
noutram | 8:ad00c9036add | 26 | CMP R2,#0 |
noutram | 8:ad00c9036add | 27 | BNE spinunlock |
noutram | 8:ad00c9036add | 28 | BX LR |
noutram | 8:ad00c9036add | 29 | END |