BÙI QUC BO
1
ARM PROGRAMMING
Bùi Quc Bo
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 QUC BO
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
&0123+01 ++2
4&'&(*4+"+3-#5+
N!u trong quá trình này 1 tác v& khác
mMc ưu tiên cao hơn nhy vào ghi vào PORTA,
dP liQu s3 bR sai
BÙI QUC BO
3
Non<atomic Access to Variables
Khi truy c(p vào các bi!n ñ7 r7ng lUn
hơn 32bit (VD: struct), CPU cVn nhi#u
hơn 1 lQnh.
Quá trình y gWi Non<atomic Access
N!u 1 tác v& khác cXt ngang quá trình
này, s3 thY d5n ñ!n sai trong dP liQu.
Function Reentrancy
M7t hàm gWi là “reentrant” n!u thY
ñưZc gWi cùng lúc trong nhi#u tác v&
ho\c ngXt.
M]i tác v& ñ#u 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 QUC BO
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+14++ 2
7
 +#" /":
4++ 
"5
 +#" /":0
4++ 
"5
<
<
BÙI QUC BO
5
Mutual Exclusion
Khi m7t task truy c(p vào 1 tài nguyên,
s3 toàn quy#n sc d&ng tài nguyên
cho ñ!n khi xc 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
ch^ ñưZc truy c(p bhi ñúng 1 tác v&.
Basic Critical Sections
section njm giPa 2 macro
taskENTER_CRITICAL()
taskEXIT_CRITICAL()