
BÙI QUC BO
1
ARM PROGRAMMING
Bùi Quc Bo
Resource management
N!u nhi#u tác v& cùng truy c(p 1 tài
nguyên (VD:UART), s3 d5n ñ!n ñ&ng ñ7
(conflict).
VD:
Accessing Peripherals
Read, Modify, Write Operations
Non<atomic Access to Variables
Function Reentrancy

BÙI QUC BO
2
Accessing Peripherals
Task A executes and starts to write the string “Hello
world” to the LCD.
Task A is pre<empted by Task B after outputting just
the beginning of the string – “Hello w”.
Task B writes “Abort, Retry, Fail?” to the LCD before
entering the Blocked state.
Task A continues from the point at which it was pre<
empted and completes outputting the remaining
characters – “orld”.
The LCD will now be displaying the corrupted string
“Hello wAbort, Retry, Fail?orld”.
Read, Modify, Write Operations
!"#
$%&'&()*++" ,
$%&'&(*+-#,+
./0&(.-+ #+ +++0
&0123+01 ++2
4&'&(*4+"+3-#5+
N!u trong quá trình này có 1 tác v& khác có
mMc ưu tiên cao hơn nhy vào ghi vào PORTA,
dP liQu s3 bR sai

BÙI QUC BO
3
Non<atomic Access to Variables
Khi truy c(p vào các bi!n có ñ7 r7ng lUn
hơn 32bit (VD: struct), CPU cVn nhi#u
hơn 1 lQnh.
Quá trình này gWi là Non<atomic Access
N!u có 1 tác v& khác cXt ngang quá trình
này, s3 có thY d5n ñ!n sai trong dP liQu.
Function Reentrancy
M7t hàm gWi là “reentrant” n!u nó có thY
ñưZc gWi cùng lúc trong nhi#u tác v&
ho\c ngXt.
M]i tác v& ñ#u có stack riêng. N!u hàm
ch^ truy c(p vào các bi!n lưu trong stack
c_a tác v&, hàm ñó là “reentrant”

BÙI QUC BO
4
Reentrant function
6#"1/"2
7
,#+ -"3 +++ +5
"" +"&"+8+-9
+ 5"+""#+++ + ,#+3-+ 3!
,/"0
/"0
/"0/":
. +5!+"+#"-#3;" +"&
+#++#+ +5
"+#"/"0
<
Non<reentrant function
/"
= >#+1-2
7
++4++
+#"
3+14++ 2
7
+#" /":
4++
"5
+#" /":0
4++
"5
<
<

BÙI QUC BO
5
Mutual Exclusion
Khi m7t task truy c(p vào 1 tài nguyên,
nó s3 có toàn quy#n sc d&ng tài nguyên
cho ñ!n khi xc lý xong.
Các tác v& thưeng ñưZc thi!t k! sao cho
các tài nguyên không ñưZc chia sg và
ch^ ñưZc truy c(p bhi ñúng 1 tác v&.
Basic Critical Sections
Là section njm giPa 2 macro
taskENTER_CRITICAL()
taskEXIT_CRITICAL()