MƠN HỌC
Lập trình hệ thống nhúng
(Programming
Embedded System)
Mechatronics Dept
/>
Ch01: Tổng quan
n
Hệ thố
thống nhú
nhúng
n
Một số
số ngơn ngữ
ngữ lập trì
trình
n
Ngơn ngữ
ngữ C
n
Lưu đồ
đồ
1
Hệ thống nhúng (embedded system)
system)
n
n
n
Một hệ thố
thống có khả
khả năng tự
tự trị
trị đượ
được nhú
nhúng vào
trong mộ
một môi trườ
trường hay mộ
một hệ thố
thống mẹ
mẹ.
Hệ thố
thống nhú
nhúng có
có vai trị đả
đảm nhậ
nhận mộ
một phầ
phần
công việ
việc cụ
cụ thể
thể của hệ
hệ thố
thống mẹ
mẹ.
Hệ thố
thống nhú
nhúng có
có thể
thể là một hệ
hệ thố
thống phầ
phần cứ
cứng
và cũng có
có thể
thể là một hệ
hệ thố
thống phầ
phần mề
mềm
Hệ thống nhúng (embedded system)
system)
n
Đặc điể
điểm
Các hệ
hệ thố
thống nhú
nhúng đượ
được thiế
thiết kế
kế để
để thự
thực hiệ
hiện mộ
một số
số
nhiệ
nhiệ m vụ
vụ chuyên dụ
dụng.
n Một hệ
hệ thố
thống nhú
nhúng thườ
thường không phả
phải là
là một khố
khối
riêng biệ
biệt mà
mà là một hệ
hệ thố
thống cá
các thiế
thiết bị
bị.
n Phầ
Phần mề
mề m đượ
được viế
viết cho cá
các hệ
hệ thố
thống nhú
nhúng đượ
được gọ
gọi
là firmware và
và đượ
được lưu trữ
trữ trong cá
các chip bộ
bộ nhớ
nhớ chỉ
chỉ
đọc (read(read-only memory) hoặ
hoặc bộ
bộ nhớ
nhớ flash chứ
chứ không
phả
phải là
là trong mộ
một ổ đĩ
đĩa.
n
2
Hệ thống nhúng (embedded system)
system)
n
n
n
n
Giao diệ
diện
Kiế
Kiến trú
trúc CPU
Thiế
Thiết bị
bị ngoạ
ngoại vi
…
Ngơn ngữ lập trình
n
Ngơn ngữ
ngữ lập trì
trình phả
phải thỏ
thỏa mãn đượ
được hai
điề
điều kiệ
kiện cơ bả
bản là
là:
Nó phả
phải dễ
dễ hiể
hiểu và
và dễ sử dụng đố
đối vớ
với ngườ
người lậ
lập
trì
trình,
nh, để con ngườ
người có
có thể
thể dùng nó
nó giả
giải quyế
quyết cá
các
bài tố
tốn khá
khác.
n Nó phả
phải miêu tả
tả một cá
cách đầ
đầy đủ
đủ và rõ rà
ràng cá
các
tiế
), để
tiến trì
trình (process
(process),
để có thể
thể chạ
chạy đượ
được trên cá
các
máy tí
tính khá
khác.
n
3
Ngơn ngữ lập trình (tiếp)
n
Ngơn ngữ
ngữ máy - Machine languages
n
n
Hợp ngữ
ngữ - Assembly languages
n
n
Ngơn ngữ
ngữ duy nhấ
nhất củ
của má
máy tí
tính – CPU
Sử dụng cá
các từ
từ khó
khóa tiế
tiếng Anh cho cá
các lệ
lệnh hay
nhó
nhó m lệ
lệnh củ
của mã má
máy.
Ngơn ngữ
ngữ cấp cao - HighHigh-level languages
n
Pascal, C, C++, VB, VC, Java,…
Java,…
Ngôn ngữ C
n
Tại sao lạ
lại chọ
chọn C
Từ khó
khóa ít (khoả
(khoảng 32 từ
từ khó
khóa).
n Thơng dụ
dụng (hầ
(hầu hế
hết code đề
đều viế
viết bằ
bằng C)
n Tính ổn đị
định (không
(không thay đổ
đổi nhiề
nhiều lắ
lắm theo thờ
thời
gian)
n Tốc độ
độ thự
thực thi nhanh
n Là nền tả
tảng nhiề
nhiều ngôn ngữ
ngữ khá
khác ( Java, C++,
awk, Perl).
n
4
Ngơn ngữ C (tiếp)
n
Từ khó
khóa
auto
break
case
char
continue default
do
goto
double
if
else
int
extern
long
float
register
for
return
short
union
static
void
struct
volatile
switch
while
typedef
_cs
_AH
sizeof
unsigne
d
_ds
_AL
_es
_AX
_ss
_BH
_CH
_BP
_CL
_DI
_CX
_SI
_DH
_SP
_BL
_DL
_BX
_DX
Flow chart
• Start /Begin bắt đầu giải thuật. Chỉ có 1 và chỉ 1 điểm START.
Start
• Dịng xử lý
• Input / Output dữ liệu
xuất/nhập
• Đặc tả thao tác xử lý hay tính tốn dữ liệu
No
Điều kiện
• Điều khiển rẽ nhánh
Yes
Giá trị xét phân nhánh
• Phát biểu rẽ nhánh khác
Trường hợp 1
Stop
Trường hợp i
Khác
• Stop/End kết thúc của giải thuật. Có thể có một hoặc
nhiều điểm STOP.
5
Flow chart (tiếp)
Giải phương trình ax + b = 0
Start
Nhập a, b
a=0 ?
Yes
No
X=-b/a
Yes
b=0 ?
No
Khơng có nghiệm
Vơ số nghiệm
Stop
Một chương trình bằng C
Khai báo thư viện
#include <stdio.h>
Chú thích
/* My first C program which prints Hello World */
Chương trình chính
int main()
{
printf ("Hello World!\n");
return 0;
}
Lệnh
Giá trị trả về của một hàm
Bắt đầu và kết thúc một khối lệnh
6
Ch02: Kiểu dữ liệu, biến và hằng
n
n
n
n
n
n
Kiể
Kiểu dữ
dữ liệ
liệu
Biế
Biến và
và hằng, cá
các phé
phép gá
gán cơ bả
bản
Kiể
Kiểu số
số nguyên
Kiể
Kiểu số
số thự
thực
Kiể
Kiểu Boolean
Kiể
Kiểu ký tự
tự
Kiểu dữ liệu
Cơ sở
Kiểu số nguyên
Kiểu số thực
Kiểu ký tự
Kiểu logic
Tự định nghĩa
Kiểu liệt kê
Vơ hướng
Kiểu dữ
liệu
Có cấu trúc
Array
Struct
File
Con trỏ
1
Biến và hằng, các phép gán cơ bản
n
Tên biến và hằng là một chuỗi kí tự liên tục gồm: Kí tự, chữ,
số, dấu gạch dưới. Khi đặt tên biến, cần phải tuân theo những
quy định sau:
n
n
n
n
Tên biến phải bắt đầu bằng một chữ cái hoặc dấu gạch dưới.
Trong tên biến khơng được có các khoảng trống ở giữa tên.
Khơng được đặt tên biến trùng với từ khóa.
Ví du:
n
n
n
name_1, _name2, sample32…
name 1, char, 34sample,…
là các tên biến hợp lệ.
là các tên biến không hợp lệ
Chú ý:
n
n
Độ dài tối đa của tên là khơng giới hạn, tuy nhiên chỉ có 31 ký tự đầu
tiên là có ý nghĩa.
Trong tên biến có phân biệt chữ hoa và chữ thường.
Biến và hằng, …. (tiếp)
n
Khai bá
báo biế
biến:
n
Kiểu_dữ_liệu tên_các_biến;
Kiểu_dữ_liệu: tên kiểu dữ liệu của các biến cần khai báo.
n Tên_các_biến: Các biến có cùng kiểu dữ liệu có thể được
khai báo bằng cách liệt kê danh sách tên các biến. Các biến
được phân cách nhau bởi dấu phẩy (,), cuối danh sách các
biến cần khai báo là dấu chấm phẩy
n
n
Ví dụ
char ten1, ten2;
n int a, b, c;
n
2
Biến và hằng, …. (tiếp)
n
Khai bá
báo hằ
hằng:
const Kiểu_dữ_liệu tên_các_hằng = giá_trị_hằng;
n Ví dụ
n
const int he_so = 123;
n const float gia_sp = 1,23;
n
Biến và hằng, …. (tiếp)
n
Phé
Phép gá
gán:
Lệnh gán (assignment statement) dùng để gán giá trị
của một biểu thức cho một biến.
n tên_biến = biểu_thức;
n Ví dụ:
n
a = 3;
n t = b+2
n x = Tong(y, z);
n
3
Kiểu số ngun
Kiểu dữ liệu
Từ khóa
Số byte
Dải giá trị
Character
char
1
-128 ÷ 127
Integer
int
2
-32768 ÷ 32767
Short integer
short
2
-32768 ÷ 32767
Long integer
long
4
-2147483648 ÷ 2147483647
Unsigned character
unsigned char
1
0 ÷ 255
Unsigned integer
unsigned int
2
0 ÷ 65535
Unsigned short integer
unsigned short
2
0 ÷ 65535
Unsigned long integer
unsigned long
4
0 ÷ 4294967295
Kiểu số nguyên (tiếp)
Phé
Phép tố
tốn
Cộng
Trừ
Trừ
Nhân
Chia
Lấy phầ
phần dư
Lấy phầ
phần ngun
Tăng
Giả
Giảm
Ký hiệ
hiệu
+
*
/
%
/
++
--
Ví d ụ
x+y
x–y
x*y
x/y
x%y
x/y
x++ or ++x
x-- or --x
--x
4
Kiểu số thực
Kiểu dữ liệu
Từ khóa Số byte
Dải giá trị
Số thự
thực có
có độ
độ chí
chính xá
xác đơn
float
4
1.2E1.2E-38 ÷ 3.4E38
Số thự
thực có
có độ
độ chí
chính xá
xác ké
kép
double
8
2.2E2.2E-308 ÷ 1.8E308
long float
10
3.4E3.4E-4932 ÷ 3.4E4932
Số thự
thực có
có độ
độ chí
chính xá
xác ké
kép độ
độ
dài lớ
lớn
Kiểu số thực
n
Biể
Biểu diễ
diễn
Ở dạng thậ
thập phân
12.345678; 98.7654321
n Ở dạng khoa họ
học
12.334e15 = 12.334*1015;
98,765e98,765e-45 = 98,765*10-45;
n
n
Phé
Phép tí
tính
Cộng, trừ
trừ, nhân, chia, phé
phép tăng giả
giảm
n Phé
Phép chia sẽ
sẽ cho số
số thự
thực, khơng có
có phé
phép %
n
5
Kiểu Boolean
n
n
n
Trong C khơng đị
định nghĩ
nghĩa rõ, nó
nó tồn tạ
tại dướ
dưới
dạng số
số nguyên.
Giá
Giá trị
trị 0 đượ
được hiể
hiểu là
là FALSE, giá
giá trị
trị khá
khác 0
đượ
được hiể
hiểu là
là TRUE.
Các phé
phép toá
toán
And (&&); OR (||); NOT (!).
n Các phé
phép toá
toán quan hệ
hệ
n
n
!= , == , >= , <= , > , <
Kiểu Boolean
n
n
n
n
n
n
n
0xF0 && 0x1F = ?
0b1000.1110 || 0b0100.0100 = ?
!0b1000.1110 = ?
0b1010.1010 != 0b0100.0100 = ?
0b1011.0010 == 0b0100.0100 = ?
0b1100.0100 >= 0b0100.0100 = ?
0xA5 > 0b1011.0001 = ?
6
Kiểu ký tự
Kiểu dữ liệu
Kiể
Kiểu có
có dấu
Kiể
Kiểu khơng dấ
dấu
n
Từ khóa
Số byte
char
1
128 ÷ 127
2
0 ÷ 125
unsigned char
Dải giá trị
Phân loạ
loại
n
n
n
Các ký tự
tự điề
điều khiể
khiển 0 => 31
Các ký tự
tự văn bả
bản 32 => 126
Các ký tự
tự đồ
đồ họa 127 => 255
Kiểu ký tự
n
Một số
số hàm thườ
thường dù
dùng
Chuyể
Chuyển giá
giá trị
trị thà
thành mã ASCII
toascii (int c)
toascii (0b1101.1001
(0b1101.1001)) = 0b0101.1001;
n Chuyể
Chuyển ký tự
tự thà
thành ký tự
tự thườ
thường
n
tolower (int c)
tolower (‘
(‘C’) = ‘c’
n
Chuyể
Chuyển ký tự
tự thà
thành ký tự
tự hoa
toupper (int c)
toupper (‘
(‘c’) = ‘C’
7
Khai báo các hằng tượng trưng
n
Mẫu khai bá
báo
#define tên_ban_
tên_ban_đầu dãy_thay_thế
dãy_thay_thế
n
Ví dụ
#define
n #define
n #define
n #define
n
mtrai1
mphai1
KEY_COLUMN_1
KEY_ROW_1
PINC.1
PINC.2
PINA.7
PORTA.1
8
Ch03: Câu lệnh, biểu thức và toán tử
n
n
n
n
n
n
n
Câu lệ
lệnh
Khố
Khối lệ
lệnh
Biể
Biểu thứ
thức
Toá
Toán tử
tử
Thứ
Thứ tự ưu tiên
Chuyể
Chuyển đổ
đổi giá
giá trị
trị
Một số
số hàm chuẩ
chuẩn
Câu lệnh
n
n
Câu lệ
lệnh là
là một chỉ
chỉ thị
thị hoà
hoàn chỉ
chỉnh, ra lệ
lệnh cho
máy thự
thực hiệ
hiện cơng việ
việc nà
nào đó
đó.
Ví dụ
n = i + j;
n lcd_putsf(“
lcd_putsf(“48CDT - DHNT”
DHNT”);
n Chaythang(5
Chaythang(5);
n
1
Khối lệnh
n
n
Khối lệnh là một tập hợp các lệnh được bắt đầu bằng
dấu “{” và kết thúc là dấu “}”
Ví dụ
{
Chaythang(3
Chaythang(3);
Turn_Left();
Chaythang(5
Chaythang(5);
Turn_Right();
x = so_vach * khoang_cach;
}
Biểu thức
n
Biể
Biểu thứ
thức bao gồ
gồm tó
tóan tử
tử và tố
tốn hạ
hạng
Tố
Tốn hạ
hạng có
có thể
thể là biế
biến, hằ
hằng, hà
hàm
n Tố
Tốn tử
tử là các phé
phép tố
tốn
n
n
Ví dụ
x = dis_x + 5*cos
(anpha);
5*cos(anpha);
n n = a*x + b*y;
n
2
Tốn tử
n
Phé
Phép tí
tính theo bí
bít
Tốn tử: AND (&); OR (|); XOR (^); đảo bit (~)
n Ví dụ:
n
0xF0 & 0x1F = ?
n 0b1000.1110 | 0b0100.0100 = ?
n ~0b1000.1110 = ?
n 0b1010.1010 ^ 0b0100.0100 = ?
n 0xA5 | 0b1011.0001 = ?
n
Toán tử
n
Phé
Phép gá
gán mở
mở rộng:
x += y;
ó x = x + y;
n x -= y;
ó x = x - y;
n x *= y;
ó x = x * y;
n…
Việ
Việc sử
sử dụng đơi khi gây khó
khó hiể
hiểu, nhưng có
có nhiề
nhiều chương
trì
trình dị
dịch tạ
tạo ra mã tố
tối ưu hơn nế
nếu ta sử
sử dụng nó
nó
n
n
Phé
Phép tăng/gi
tăng/giảảm
i = i + 1;
n i = i - 1;
n…
n a = ++i;
n a = i++;
n
ó i++ hoặ
hoặc ++i
ó i-- hoặ
hoặc --i
--i
ó i = i + 1;
ó a = i;
a = i;
i = i + 1;
3
Toán tử
n
Toá
Toán tử
tử quan hệ
hệ
Là các phé
phép so sá
sánh
n
Toá
Toán tử
tử sizeof()
Tính số
số byte mà
mà biế
biến (kiể
(kiểu dữ
dữ liệ
liệu) đó
đó chiế
chiếm.
n sizeof (int
(int)) = 2
n sizeof (long
(long)) = 4
n
n
Toá
Toán tử
tử điề
điều kiệ
kiện
biể
biểu_thứ
u_thức_1 ? biể
biểu_thứ
u_thức_2 : biể
biểu_thứ
u_thức_3
n a = b>c ? m:n;
n
Thứ tự ưu tiên giữa các phép tốn
n
n
n
Các phé
phép tố
tốn có
có mức ưu tiên khá
khác nhau
Nếu khơng nhớ
nhớ thứ
thứ tự thì
thì ta có
có thể
thể dùng dấ
dấu
ngoăc đơn
Ví dụ
n
n
f = 2*(a+b) – ( (x + y)/(a+x) );
f = 3* ( n – (2*m) );
4
Sự hiệu chỉnh khi tính tốn
n
n
n
n
Trong C cho phé
phép sự
sự trộ
trộn lẫ
lẫn cá
các toá
toán hạ
hạng
thuộ
thuộc cá
các kiể
kiểu dữ
dữ liệ
liệu khá
khác nhau.
Việ
Việc chuyể
chuyển đổ
đổi dữ
dữ liệ
liệu tự
tự độ
động có
có thể
thể mất dữ
dữ
liệ
liệu trong quá
quá trì
trình chuyể
chuyển đổ
đổi.
Ưu tiên chuyể
chuyển đổ
đổi về
về kiể
kiểu dữ
dữ liệ
liệu số
số nguyên
chuẩ
chuẩn
Chuyể
Chuyển đổ
đổi cá
các ký tự
tự về số nguyên dự
dựa và
vào
bảng mã ASCII
Ép kiểu
n
n
n
Chủ
Chủ độ
động việ
việc chuyể
chuyển đổ
đổi, không bị
bị mất dữ
dữ
liệ
liệu khi thự
thực hiệ
hiện cá
các phé
phép tố
tốn
(kiể
(kiểu_dữ
u_dữ_liêu)(tố
_liêu)(tốn_hạ
n_hạng)
Ví dụ
int n, m;
float tong;
tong = (float)n / m;
n tong = n/m;
n
5
Các hàm chuẩn số học
n
n
Các hà
hàm số
số học nằ
nằm trong thư việ
viện “math.h”
math.h”
Một số
số hàm
int abs(int
abs(int i);
n double sin(
sin(double d)
d)
n…
n
n
Ví dụ
sqrt(25) = 5;
n floor (3.3) = 3;
n…
n
6