Professional Documents
Culture Documents
ESD p5 VN
ESD p5 VN
Nội dung
• Tổng quan về phần mềm nhúng và ứng dụng
• Sơ đồ trạng thái hữu hạn (Finite State Machine-
FSM)
• Khuôn mẫu chương trình
• Kiến trúc chương trình
1
Tổng quan
• Là cơ sở cho các chức năng thông minh của hầu hết
thiết bị
• Tốc độ tăng trưởng 25-60% một năm
• Việc thiết kế và viết phần mềm nhúng khó khăn hơn so
với lập trình truyền thống
– Giao tiếp trực tiếp với phần cứng
– Tính thời gian thực
– Thực hiện song song nhiều quá trình
– Hướng theo sự kiện
Hệ phát triển
Simulator
Là một chương trình phần mềm cho phép người phát triển mã chương
trình chạy mô phỏng một chương trình viết cho một nền VXL/VĐK
(nền phần cứng đích) trên một môi trường phần cứng khác (hay còn
gọi là môi trường phát triển) không hỗ trợ các ngắt thực và các thiết
bị ngoại vị.
Emulator
Là một thiết bị phần cứng có khả năng thực hiện như một nền phần
cứng đích là công cụ phát triển thời gian thực bởi nó cho ta phản
ứng với các sự kiện như nền phần cứng đích thực thi.
Chu Đức Việt 4
Dept. Of Automatic Control
2
VD: Chương trình điều khiển cửa tự động
• Hàm điều khiển đóng mở cửa tùy theo
trạng thái của cảm biến
3
VD: Chương trình điều khiển cửa tự động
4
Sơ đồ trạng thái của bộ điều khiển thang máy
Mô tả hành vi bằng
ngôn ngữ tự nhiên
“Di chuyển buồng
thang máy đi lên hoặc
đi xuống tới khi đến
được tầng yều cầu, mở
cửa thang trong ít nhất
10s, sau đó tiếp tục mở
cửa cho đến khi có yêu
cầu di duyển mới. Đảm
bảo cửa không bao giờ
mở khi đang di chuyển.
Không thay đổi chiều di
chuyển trừ khi không
còn yêu cầu có mức ưu
tiên cao hơn khi đang
đi lên hoặc thấp hơn
khi đang đi xuống”
5
Finite-state machine (FSM)
Mô hình trạng thái của bộ điều khiển UnitControl
Định nghĩa
• FSM là một tập F<S, I, O, F, H, s0>
– S là tập tất cả các trạng thái của hệ {s0, s1, …, sl}
– I là tập các đầu vào {i0, i1, …, im}
– O là tập các đầu ra {o0, o1, …, on}
– F Là hàm chuyển trạng thái (S x I → S)
– H là hàm thể hiện các đầu ra (S → O)
– s0 là trạng thái ban đầu của hệ
• Sơ đồ kiểu Moore
– Hàm thay đổi các đầu ra được thực hiện tại các trạng thái (H là
ánh xạ S → O)
• Sơ đồ kiểu Mealy
– Hàm thay đổi các đầu ra được thực hiện trong khi chuyển trạng
thái (H là ánh xạ S x I → O)
6
FSM với dữ liệu (data path)
• FSMD: sử dụng các biến với kiểu dữ liệu phức hợp để lưu giữ liệu về
hoạt động của đối tượng
– FSM chỉ sử dụng kiểu nhị phân để biểu diễn các đầu vao/ra và các điều
kiện chuyển trạng thái
• FSMD: 7 thành phần <S, I , O, V, F, H, s0>
– S là tập tất cả các trạng thái của hệ {s0, s1, …, sl}
– I là tập các đầu vào {i0, i1, …, im}
– O là tập các đầu ra {o0, o1, …, on}
– V is a set of variables {v0, v1, …, vn}
– F Là hàm chuyển trạng thái (S x I x V → S)
– H là hàm tác động đến các đầu ra và thay đổi giá trị của các biến (S → O + V)
– s0 là trạng thái ban đầu của hệ
• I,O,V có thể là các biến với kiểu phức hợp (VD, số nguyên, số thực
v.v.)
• F,H Có thể chứa các hàm tính toán với các kiểu dữ liệu trên
Chu Đức Việt 13
Dept. Of Automatic Control
3. Với mỗi trạng thái, liệt kê tất cả các khả năng chuyển tới
trạng thái khác với các điều kiện tương ứng
4. Đỗi với mỗi trạng thái và chuyển trạng thái, liệt kê các
hành động kèm theo (actions)
5. Đảm bảo việc chuyển trạng thái là đơn nhất
– Không được phép tồn tại hai điều kiện chuyển trạng thái cùng
đúng
• Nếu điều này xảy ra, ta sẽ có một mô hình không xác định
– Tại mọi thời điểm, luôn tồn tại một điều kiện đúng
7
Lập trình dựa theo mô tả của sơ đồ trạng thái
Language subset
• Tuân theo các khuôn mẫu
(template) để xây dựng chương #define IDLE
#define GOINGUP
0
1
trình từ sơ đồ trạng thái #define GOINGDN 2
• Các khuôn mẫu này có thể #define DOOROPEN
void UnitControl() {
3
được sử dụng trong nhiều loại int state = IDLE;
ngôn ngữ lập trình while (1) {
switch (state) {
• VD: UnitControl bằng ngôn ngữ IDLE: up=0; down=0; open=1; timer_start=0;
C if (req==floor) {state = IDLE;}
– Định nghĩa các trạng thái có if (req > floor) {state = GOINGUP;}
if (req < floor) {state = GOINGDN;}
thể có (#define) break;
– Khai báo các biến cần thiết và GOINGUP: up=1; down=0; open=0; timer_start=0;
khởi tạo trạng thái đầu (IDLE) if (req > floor) {state = GOINGUP;}
if (!(req>floor)) {state = DOOROPEN;}
– Sử dụng lệnh “switch” để rẽ break;
nhánh tới các đoạn lệnh tương GOINGDN: up=1; down=0; open=0; timer_start=0;
ứng với các trạng thái if (req < floor) {state = GOINGDN;}
if (!(req<floor)) {state = DOOROPEN;}
– Mỗi trạng thái có các hành break;
động DOOROPEN: up=0; down=0; open=1; timer_start=1;
• up, down, open, timer_start if (timer < 10) {state = DOOROPEN;}
– Kiểm tra điều kiện để chuyển if (!(timer<10)){state = IDLE;}
break;
sang trạng thái khác }
}
• if(…) {state = …;} }
8
Khuôn mẫu chung
#define S0 0
#define S1 1
...
#define SN N
void StateMachine() {
int state = S0; // or whatever is the initial state.
while (1) {
switch (state) {
S0:
// Insert S0’s actions here & Insert transitions Ti leaving S0:
if( T0’s condition is true ) {state = T0’s next state; /*actions*/ }
if( T1’s condition is true ) {state = T1’s next state; /*actions*/ }
...
if( Tm’s condition is true ) {state = Tm’s next state; /*actions*/ }
break;
S1:
// Insert S1’s actions here
// Insert transitions Ti leaving S1
break;
...
SN:
// Insert SN’s actions here
// Insert transitions Ti leaving SN
break;
}
}
}
9
FSM phân cấp (Hierachical finite state machine)
Without hierarchy
req>floor UnitControl • FireMode
u,d,o = 1,0,0 GoingUp
req>floor
!(req>floor) – Khi tín hiệu fire báo có cháy
u,d,o = 0,0,1
Idle timeout(10) DoorOpen u,d,o = 0,0,1 xảy ra, buồng thang máy di
req==floor
req<floor !(req<floor) fire
fire chuyển xuống tầng 1 và mở
fire
u,d,o = 0,1,0 GoingDn fire FireGoingDn u,d,o = 0,1,0 cửa.
floor==1 u,d,o = 0,0,1
req<floor floor>1 FireDrOpen – Nếu không dùng FSM phân cấp
!fire fire
thì sơ đồ trở nên phức tạp.
– Sử dụng FSM phân cấp khiến
With hierarchy
cho sơ đồ trở nên dơn giản, dễ
UnitControl
req>floor NormalMode theo dõi và kiểm soát.
u,d,o = 1,0,0 GoingUp
!(req>floor)
req>floor
u,d,o = 0,0,1 u,d,o = 0,0,1
Idle DoorOpen
req==floor timeout(10)
req<floor !(req>floor)
u,d,o = 0,1,0 GoingDn
req<floor
fire FireMode
FireGoingDn u,d,o = 0,1,0
!fire
floor==1 u,d,o = 0,0,1
floor>1 FireDrOpen
fire
10
Round Robin architecture
• RR Examples
– Digital multimeter
• Measure: resistance, current and potential
• For each situation select the right scale
– Washing machine
– Airbag controller
– Anything that displays information.
• RR Evaluations
– Simplicity!
• No priorities, no interrupts, no data-sharing bugs
• Suited for systems with no latency concerns
• Worst response time of task code = sum of all task code
– Alternative design: interleaving devices
– Fragile design: timing in future versions?
void main(void) {
while(TRUE) {
if (flagA) {
flagA = FALSE
!! Handle data from device A
}
if (flagB)
...
}
}
Chu Đức Việt 22
Dept. Of Automatic Control
11
RR-ISR Characteristics
• Splits the work between interrupts and
main
– Interrupts handle I/O of devices
– Main function deals with processing data
• Why use interrupts?
– Allow fast response time for handling I/O
buffers(event-based design vs. polling design)
– Set flags to indicate work has to be done
– Take advantage of the interrupt-priority
system
• Often the most appropriate architecture!
Chu Đức Việt 23
Dept. Of Automatic Control
RR-ISR Examples
• Systems with few components needing fast
response time (limited processing needed)
• Most likely to be found in:
– Stopwatches
– Modern washing machines
– Coffee machines
– Microwave ovens
– Central heating units
– Traffic light controllers
• Other: data-bridge devices and barcode
scanners
Chu Đức Việt 24
Dept. Of Automatic Control
12
RR-ISR Evaluation
• Leads to a simple design (still...)
– Data-sharing problem introduced
– All task codes have the same priority - no long
tasks!!!
– Worst response time = sum of all task code + ISR
times
• Alternative designs:
– Move code in interrupts
– Interleaving devices in main()
• Fragile design: timing in future versions?
– Changing code or ISR priority for one device.
Function-Queue Architecture
!! Queue of function pointers
void interrupt handleA(void) {
!! Take care of I/O device A
!! Put functionA on queue of function pointers
}
!! ISR for devices B...Z
void functionA(void) {
!! Handle actions required by A
}
!! Functions for devices B...Z
void main(void) {
while(TRUE) {
while (!! Queue of function pointers is empty) {};
!! Call first function on the queue
}
}
Chu Đức Việt 26
Dept. Of Automatic Control
13
FQ Evaluation
• Splitting of responsibilities similar to RR-ISR
– Interrupts handle I/O of devices
– Main function deals with processing data (via
functions)
• Insert operation for the queue was not
specified!
– FIFO queue leads to RR-ISR
– Priority queue leads to task priorities
– FQ architecture gives the basis for “non-
preemptive OSes”
• Worst response time = longest task + tasks
with higher priority + ISR routines
14