Bài giảng Thiết kế hệ thống nhúng - Chương 4: Kỹ thuật lập trình nhúng - Bài 8: Biểu diễn trạng thái và mô hình hóa quá trình
CHƢƠNG 4: KỸ THUẬT LẬP TRÌNH
NHÚNG
Bài 8: Biểu diễn trạng thái và mô hình
hóa quá trình
1
Tổng quan
• Mô hình vs Ngôn ngữ
• Mô hình trạng thái
– FSM/FSMD
– HCFSM và ngôn ngữ biểu đồ
– Mô hình M) Model)
• Mô hình quá trình đồng thời
– Truyền thông
– Đồng bộ
– Thực hiệ
• Mô hình luồng dữ liệu
• Các hệ thời gian thực
2
Giới thiệu
• Mô tả trạng thái xử lý của hệ thống nhúng
– Đôi khi là rất khó
• Độ phức tạp tăng khi khả năng của IC tăng
– Trong quá khứ: máy giặt, games etc.
– Ngày nay: Đầu TV kỹ thuật số, điện thoại di động etc.
• Vài trăm nghìn dòng lệnh
• Trạng thái yêu cầu thƣờng không đƣợc hiểu đầy đủ khi bắt đầu
– Nhiều quá trình thực hiện lỗi do mô tả sự kiện thiếu, ko chính xác
– Tiếng Anh (hoặc ngôn ngữ khác) – điểm khởi đầu chung
• Khó mô tả chính xác hoặc đôi khi không thể
• Ví dụ: Mã điều khiển cho một ô tô – dài hàng nghìn trang...
3
Mô hình và ngôn ngữ
• Làm thế nào chúng ta ghi nhận hành vi (chính xác)?
– Chúng ta có thể nghĩ đến ngôn ngữ (C, C++), nhƣng mô hình tính toán là
mấu chốt
• Mô hình tính toán cơ bản:
– Mô hình lập trình tuần tự
• Các c
– Mô hình xử lý thông tin
• Nhiều mô hình tuần tự chạy đồng thời
– Mô hình trạng thái
• Cho các hệ riêng, giám sát đầu vào điều khiển, thiết lập đầu ra điều khiển
– Mô hình luồng dữ liệu
• Cho cng dữ liệu đầu ra
– Mô hình hƣớng đối tƣợng
• Để tách phần mềm phức tạp thành đơn giản, các mục đƣợc định nghĩa
4
Mô hình vs ngôn ngữ
Poetry
Recipe
Story
State
machine
Sequent.
program
Data-
flow
Mô hình
English
Spanish
Japanese
C
C++
Java
Ngôn ngữ
Ngôn ngữ nấu ăn –
Chương trình tuần tự - C
• Mô hình tính toán mô tả trạng thái của hệ
– Ghi chú khái niệm, vd công thức hay chƣơng trình tuần tự
• Ngôn ngữ để thể hiện mô hình
– Dạng duy nhất, ví dụ tiếng Anh, C
• Hiều ngôn ngữ đƣợc dùng để thể hiện một mô hình
– VD mô hình lập trình tuần tự C,C++, Java
• Một ngôn ngữ
– VD C++ → mô hình lập trình tuần tự, mô hình hƣớng đối tƣợng, mô hình trạng thái
• Các ngôn ngữ nhất định thể hiện tốt các mô hình tính toán nhất định
5
Chữ vs Đồ họa
• Mô hình và ngôn ngữ không đƣợc nhầm lẫn với “chữ
và đồ họa”
– “Chữ và đồ họa” chỉ là hai kiểu ngôn ngữ
• Chữ: ký tự, số
• Đồ họa: vòng tròn, mũi tên (với một số ký tự, số)
X = 1
X = 1;
Y = X + 1;
Y = X + 1
6
Ví dụ: Bộ điều khiển thang máy
Giao diện hệ thống
Mô tả tiếng Anh một phần
• Bộ điều khiển thang
máy đơn giản
up
Unit
Control
“Di chuyển thang máy lên hoặc xuống
để đến tầng yêu. Một khi ở tầng yêu
cầu, mở cửa ít nhất 10 giây, và duy trì
nó đến khi tầng đƣợc yêu cầu thay
đổi. Đảm bảo cửa không bao giờ mở
đi lên hoặc tầng thấp hơn khi đi
xuống…”
down
open
– Bộ phận yêu cầu chuyển
các yêu cầ
thành yêu cầu của một
tầng duy nhất
floor
req
st
Resolver
buttons
inside
elevator
b1
b2
bN
...
...
up1
up2
– Đơn vị điều khiển di
chuyển thang máy tới
tầng yêu cầu
up/down
buttons on
each
dn2
up3
floor
dn3
dnN
• Thử thể hiện bằng C...
7
Bộ điều khiển thang máy sử dụng mô hình
lập trình tuần tự
Giao diện hệ thống
Mô hình cương trình tuần tự
Mô tả tiếng Anh một phần
Inputs: int floor; bit b1..bN; up1..upN-1; dn2..dnN;
Outputs: bit up, down, open;
Global variables: int req;
up
Unit
Control
“Di chuyển thang máy lên hoặc xuống
để đến tầng yêu. Một khi ở tầng yêu
cầu, mở cửa ít nhất 10 giây, và duy trì
nó đến khi tầng đƣợc yêu cầu thay
trừ khi có yêu cầu ở tầng cao hơn khi
đi lên hoặc tầng thấp hơn khi đi
xuống…”
down
open
void UnitControl()
{
void RequestResolver()
{
up = down = 0; open = 1;
while (1) {
while (1)
floor
req
while (req == floor);
open = 0;
}
st
Resolver
if (req > floor) { up = 1;}
else {down = 1;}
while (req != floor);
up = down = 0;
open = 1;
buttons
inside
elevator
b1
b2
bN
void main()
{
...
...
Call concurrently:
UnitControl() and
RequestResolver()
}
delay(10);
up1
up2
up/down
buttons on
each
}
}
dn2
up3
floor
dn3
Có thể thực hiện chương
lệnh “if” hơn.
dnN
8
Mô hình trạng thái máy hữu hạn (Finite-state
machine model – FSM)
• Cố gắng thể hiện trạng thái này nhƣ một chƣơng trình tuần tự là
đôi khi không đầy đủ hoặc khó
• Thay vào đó, chúng ta có thể xem xét nhƣ một mô hình FSM, mô
tả hệ nhƣ sau:
– Các trạng
• VD, nghỉ, đi lên, đi xuống, mở cửa
– Chuyển đổi có thể từ trạng thái này đến trạng thái khác dựa trên các đầu
vào
• VD yêu cầu tầng
– Các hoạt động xảy ra trong mỗi trạng thái
• VD trpen, and
timer_start = 0)
• Thử...
9
Mô hình trạng thái máy hữu hạn (FSM)
Quá trình của đơn vị điều khiển sử dụng máy trạng thái
req > floor
u,d,o, t = 1,0,0,0
!(req > floor)
!(timer < 10)
GoingUp
req > floor
timer < 10
u,d,o,t = 0,0,1,0
req == floor
Idle
req < floor
DoorOpen
u,d,o,t = 0,0,1,1
!(req<floor)
u,d,o,t = 0,1,0,0
u is up, d is down, o is open
t is timer_start
req < floor
10
Định nghĩa chuẩn
• Một FSM gồm 6-phần tử F<S, I, O, F, H, s0>
– S là tập tất cả các trạng thái {s0, s1, …, sl}
– I là tập đầu vào {i0, i1, …, im}
– O là tập đầu ra {o0, o1, …, on}
– F là hàm trạng thái tiếp theo (S x I → S)
– H là hàm
– s0 là trạng thái đầu
• Kiểu Moore
– Liên kết các đầu vào với các trạng thái (nhƣ trên, H liên kết S → O)
• Kiểu Mealy
– Liên kết đầu ra với chuyển trạng thái (H liên kết S x I → O)
• Viết tắt để đơn giản hóa các mô tả
– Gán 0 cho tất cả các đầu ra, không gán giá trị trong một trạng thái
– AND tất cả các điều kiện chuyển với xung đồng hồ (FSM là quá trình đồng bộ)
11
Trạng thái máy hữu hạn với mô hình tuyến
dữ liệu (FSMD)
• FSMD mở rộng FSM: các kiểu dữ liệu và biến phức tạp để lƣu trữ dữ liệu
– FSMs chỉ sử dụng kiểu dữ liệu và toán hạng Boolean, không có biến
We described UnitControl as an FSMD
• FSMD: 7-phần tử <S, I , O, V, F, H, s0>
– S là tập các trạng thái {s0, s1, …, sl}
req > floor
– I là tập các đầu vào {i0, i1, …, im}
u,d,o, t = 1,0,0,0
!(req > floor)
GoingUp
– O là tập các đầu ra {o0, o1, …, on}
– V là tập
– F là hàm của trạng thái tiếp (S x I x V → S)
– H là một hàm tác động (S → O + V)
– s0 là trạng thái đầu
timer < 10
)
DoorOpen
u,d,o,t = 0,0,1,1
req == floor
req < floor
!(req<floor)
u,d,o,t = 0,1,0,0
GoingDn
u is up, d is down, o is open
t is timer_start
req < floor
• I,O,V có thể diễn tả các kiểu dữ liệu phức tạp (i.e., integers, floating point, etc.)
• F,H có thể bao gồm các toán hạng
• H là một hàm
– Mô tả các biến cập nhật cũng nhƣ đầu ra
• Trạng thái hoàn thiện của hệ bao gồm trạng thái hiện tại, si, và các giá trị của tất cả
các biến
12
Mô tả hệ theo trạng thái máy
1. Liệt kê tất cả các trạng thái có thể
2. Khai báo tất cả các biến
3. Với mỗi trạng thái, liệt kê các chuyển trạng thái có thể, với các điều
kiện, sang các trạng thái khác
req > floor
4. Với mỗi trạng thái/chuyển, liệt
kê các hoạt động liên quan
5. Với mỗi trạng thái, đảm bảo loại
trừ và các điều kiện chuyển đã
có
timer < 10
req > floor
u,d,o,t = 0,0,1,0
req == floor
!(timer < 10)
Idle
req < floor
DoorOpen
u,d,o,t = 0,0,1,1
• Không tồn tại hai điều kiện
đúng tại một thời điểm
!(req<floor)
u,d,o,t = 0,1,0,0
– Nế
thá
u is up, d is down, o is open
t is timer_start
req < floor
• Một điều kiện phải đúng tại
mọi thời điểm
13
Trạng thái máy vs. Mô hình lập trình tuần tự
• Trạng thái máy:
– Khuyến khích ngƣời thiết kế nghĩ đến tất cả các trạng thái có
thể và chuyển trạng thái dựa trên tất cả các điều kiện đầu vào
có thể
• Mô hình lập trình tuần tự:
– Đƣợc thiết kế để chuyển dữ liệu thông qua chuỗi các lệnh
mà có thể lặp lại hoặc thực hiện có điều kiện
14
Thử mô tả các hành vi khác với một mô hình FSM
• VD: Máy trả lời nhấp nháy đèn khi có bản tin
• VD: Một máy trả lời điện thoại đơn giản mà trả lời sau
4 hồi chuông
• VD: Một
• Nhiều ví dụ khác
15
Mô tả trạng thái máy trong ngôn ngữ lập
trình tuần tự
• Mặc dù mô hình trạng thái máy có nhiều lợi ích, hầu hết các công cụ phát triển phổ
biến sử dụng ngôn ngữ lập trình tuần tự
– C, C++, Java, Ada, VHDL, Verilog HDL, vv….
– Công cụ phát triển đắt và phức tạp, bởi vậy không dễ để thích nghi hay thay đổi
• Phải đầu tƣ
• Hai phƣơng ptrình tuần tự
– Phƣơng pháp công cụ hỗ trợ
• Công cụ bổ sung đƣợc cài đặt để hỗ trợ ngôn ngữ trạng thái máy
– Đồ họa
– Có thể hỗ trợ mô phỏng đồ họa
– Tự động tạo ra code trong ngôn ngữ lập trình tuần tự là đầu vào cho các công cụ phát triển chính
• Hạn chế: phải hỗ trợ các công cụ bổ sung (giá bản quyền, nâng cấp, đào tạo, vv.)
– Phƣơng ph
• Phƣơng pháp thông dụng nhất...
16
Phƣơng pháp ngôn ngữ tập con
• Tuân theo các quy tắc (mẫu) để mô tả
cấu trúc trạng thái máy trong cấu trúc
ngôn ngữ tuần tự tƣơng đƣơng
• Đƣợc sử dụng với phần mềm (VD: C)
và ngôn ngữ phần cứng (VD: VHDL)
#define IDLE0
#define GOINGUP1
#define GOINGDN2
#define DOOROPEN3
void UnitControl() {
int state = IDLE;
while (1) {
• Mô tả trạng thái máy UnitControl bằng
switch (state) {
C
IDLE: up=0; down=0; open=1; timer_start=0;
if
;}
NGUP;}
(req < floor) {state = GOINGDN;}
– Liệt kê các tr
– Khai báo các
giá trị đầu (IDLE)
– Câu lệnh chuyển mạch đơn rẽ nhánh
tới trạng thái hiện tại
break;
GOINGUP: up=1; down=0; open=0; timer_start=0;
if
if
break;
(req > floor) {state = GOINGUP;}
(!(req>floor)) {state = DOOROPEN;}
– Mỗi trƣờng hợp có các hoạt động
GOINGDN: up=1; down=0; open=0; timer_start=0;
•
up, down, open, timer_start
if
if
break;
(req < floor) {state = GOINGDN;}
(!(req<floor)) {state = DOOROPEN;}
– Mỗi trƣờng hợp kiểm tra điều kiện
chuyển để xác định trạng thái tiếp theo
mer_start=1;
EN;}
•
if(…) {st
break;
}
}
}
Trạng thái máy UnitControl trong ngôn ngữ lập trình tuần tự
17
Mẫu chung
#define S0
#define S1
...
0
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 Tleaving S0:
ns*/ }
ns*/ }
...
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:
break;
}
}
}
18
HCFSM và ngôn ngữ biểu đồ trạng thái
• Mô hình trạng thái máy phân
cấp/đồng thời
With hierarchy
Without hierarchy
(Hierarchical/concurrent state
A
machine model - HCFSM)
– Mở rộng mô hình trạng thái máy để
hỗ trợ p
A1
z
A1
z
x
w
B
y
x
y
B
w
A2
– Các trạng thái có thể tách thành các
trạng thái máy khác
– Các trạng thái có thể thực hiện đồng
thời
Concurrency
B
C
D
• Biểu đồ trạng thái
D1
– Ngôn ng
u
v
– timeout: chuyển trạng thái với giới
C2
D2
hạn thời gian nhƣ là một điều kiện
19
UnitControl với FireMode
req>floor
GoingUp
UnitControl
• FireMode
u,d,o = 1,0,0
!(req>floor)
– Khi fire đúng, di chuyển thang
req>floor
Idle
u,d,o = 0,0,1
req==floor
máy tới tầng 1st và mở cửa
timeout(10)
u,d,o = 0,0,1
u,d,o = 0,1,0
DoorOpen
fire
fire
req<floor
!(req<floor)
– w/o hierarchy: Getting messy!
– w/ hierarchy: Simple!
fire
fire
u,d,o = 0,1,0
FireGoingDn
GoingDn
u,d,o = 0,0,1
FireDrOpen
floor==1
floor>1
req<floor
UnitControl
Không phân cấp
NormalMode
req>floor
GoingUp
u,d,o = 1,0,0
!(req>floor)
req>floor
ElevatorController
u,d,o = 0,0,1
req==floor
u,d,o = 0,0,1
DoorOpen
Idle
timeout(10)
!(req>floor)
UnitControl
RequestResolver
req<floor
NormalMode
u,d,o = 0,1,0
GoingDn
!fire
fire
FireMode
FireMode
fire
u,d,o = 0,1,0
u,d,o = 0,0,1
FireDrOpen
fire
FireGoingDn
!fire
floor==1
floor>1
Xử lý đồng thời với
RequestResolver
20
Tải về để xem bản đầy đủ
Bạn đang xem 20 trang mẫu của tài liệu "Bài giảng Thiết kế hệ thống nhúng - Chương 4: Kỹ thuật lập trình nhúng - Bài 8: Biểu diễn trạng thái và mô hình hóa quá trình", để tải tài liệu gốc về máy hãy click vào nút Download ở trên
File đính kèm:
- bai_giang_thiet_ke_he_thong_nhung_chuong_4_ky_thuat_lap_trin.pdf