Lập trình hệ thống nhúng
Trang 2Hệ thống nhúng ( embedded system )
n Một hệ thống có khả năng tự trị được nhúng vào
trong một môi trường hay một hệ thống mẹ.
n Một hệthống nhúng thường không phải làmột khối
riêng biệt mà là một hệ thống các thiết bị
n Phần mềm được viết cho các hệthống nhúng được gọi
là firmware và được lưu trữtrong các chip bộ nhớ chỉ
đọc (read-only memory) hoặc bộ nhớ flash chứkhông
phải là trong một ổ đĩa
Trang 3n Ngôn ngữ lập trình phải thỏa mãn được hai
điều kiện cơ bản là:
n Nóphải dễ hiểu và dễ sử dụng đối với người lập
trình, để con người có thểdùng nó giải quyết các
bài toán khác
n Nóphải miêu tả một cách đầy đủvà rõ ràng các
tiến trình (process), để có thể chạy được trên các
máy tínhkhác
Trang 4Ngôn ngữ lập trình ( tiếp )
n Ngôn ngữ máy - Machine languages
n Ngôn ngữ duy nhất của máy tính – CPU
n Tại sao lại chọn C
n Từ khóa ít (khoảng 32 từkhóa)
n Thông dụng (hầu hết code đều viết bằng C)
n Tính ổn định (không thay đổi nhiều lắm theo thời
gian)
n Tốc độ thực thi nhanh
n Là nền tảng nhiều ngôn ngữkhác ( Java, C++,
awk, Perl)
Trang 5Ngôn ngữ C ( tiếp )
n Từ khóa
_SP_SI
_DI
_BP
_DX_DL
_DH_CX
_CL
_CH
_BX_BL
_BH_AX
_AL
_AH
_ss_es
_ds
_cs
whilevolatile
voidunsigne
d
union
typedefswitch
structstatic
sizeof
short
returnregister
longint
if
goto
forfloat
externelse
double
do
defaultcontinue
charcase
break
auto
Flow chart
Start • Start /Begin bắt đầu giải thuật Chỉ có 1 và chỉ 1 điểm START.
• Input / Output dữ liệu xuất/nhập
Trang 6Flow chart ( tiếp )
Chú thích
Giá trị trả về của một hàm Bắt đầu và kết thúc một khối lệnh
Trang 7Ch02: Kiểu dữ liệu, biến và hằng
Array Struct File
Trang 8Biế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 Tên biến phải bắt đầu bằng một chữ cái hoặc dấu gạch dưới.
n Trong tên biến không được có các khoảng trống ở giữa tên.
n Không được đặt tên biến trùng với từ khóa.
n Ví du:
n name_1, _name2, sample32… là các tên biến hợp lệ.
n name 1, char, 34sample,… là các tên biến không hợp lệ
nKiểu_dữ_liệu: tên kiểu dữ liệu của các biến cần khai báo.
nTê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 Ví dụ
n char ten1, ten2;
n int a, b, c;
Trang 9Biến và hằng, … ( tiếp )
n Khai báo hằng:
n 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;
Biến và hằng, … ( tiếp )
n Phép gán:
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
Trang 10Kiểu số nguyên
0 ÷ 4294967295 4
unsigned long Unsigned long integer
0 ÷ 65535 2
unsigned short Unsigned short integer
0 ÷ 65535
2 unsigned int
Unsigned integer
0 ÷ 255
1 unsigned char Unsigned character
-2147483648 ÷ 2147483647
4 long
Long integer
-32768 ÷ 32767
2 short
Short integer
-32768 ÷ 32767
2 int
Integer
-128 ÷ 127
1 char
Character
Dải giá trị
Số byte
Từ khóa Kiểu dữ liệu
Kiểu số nguyên (tiếp)
x or x
Giảm
x++ or ++x++
Tăng
x / y/
Lấy phần nguyên
x % y
%Lấy phần dư
x / y/
Chia
x * y
*Nhân
x – y-
Trừ
x + y+
Cộng
Vídụ
Ký hiệuPhép toán
Trang 11Kiểu số thực
3.4E-4932 ÷ 3.4E4932 10
long float
Số thực có độ chính xác kép độ
dài lớn
2.2E-308 ÷ 1.8E308 8
double
Số thực có độ chính xác kép
1.2E-38 ÷ 3.4E38 4
n Phép tính
n Cộng, trừ, nhân, chia, phép tăng giảm
n Phép chia sẽ cho số thực, không có phép %
Trang 12Kiểu Boolean
n Trong C không định nghĩa rõ, nó tồn tại dưới
dạng số nguyên.
n Giá trị 0 được hiểu là FALSE, giá trị khác 0
được hiểu là TRUE.
Trang 13Kiểu ký tự
0 ÷ 125 2
unsigned char Kiểu không dấu
128 ÷ 127 1
char Kiểu có dấu
Dải giá trị
Số byte
Từ khóa Kiểu dữ liệu
Trang 14Khai báo các hằng tượng trưng
n Mẫu khai báo
#define tên_ban_đầu dãy_thay_thế
n Ví dụ
Trang 15Ch03: Câu lệnh, biểu thức và toán tử
n Câu lệnh là một chỉ thị hoàn chỉnh, ra lệnh cho
máy thực hiện công việc nào đó.
n Ví dụ
n n = i + j;
n lcd_putsf(“48CDT -DHNT”);
n Chaythang(5);
Trang 17Việc sử dụng đôi khi gây khó hiểu, nhưng có nhiều chương
trình dịch tạo ra mã tối ưu hơn nếu ta sử dụng nó
n Phép tăng/giảm
n i = i + 1; ó i++ hoặc ++i
n i = i - 1; ó i hoặc i
n a = ++i; ó i = i + 1; a = i;
Trang 18n Toán tử điều kiện
n biểu_thức_1 ? biểu_thức_2 : biểu_thức_3
n a = b>c ? m:n;
Thứ tự ưu tiên giữa các phép toán
n Các phép toán có mức ưu tiên khác nhau
n Nếu không nhớ thứ tự thì ta có thể dùng dấu
ngoăc đơn
n Ví dụ
n f = 2*(a+b) –( (x + y)/(a+x) );
n f = 3* ( n – (2*m) );
Trang 19Sự hiệu chỉnh khi tính toán
n Trong C cho phép sự trộn lẫn các toán hạng
thuộc các kiểu dữ liệu khác nhau.
n Việc chuyển đổi dữ liệu tự động có thể mất dữ
liệu trong quá trình chuyển đổi.
n Ưu tiên chuyển đổi về kiểu dữ liệu số nguyên
chuẩn
n Chuyển đổi các ký tự về số nguyên dựa vào
bảng mã ASCII
Ép kiểu
n Chủ động việc chuyển đổi, không bị mất dữ
liệu khi thực hiện các phép toán
Trang 20Các hàm chuẩn số học
n Các hàm số học nằm trong thư viện “ math.h ”
n int abs(int i);
n double sin(double d)
Trang 21n int scanf(“xâu định dạng”, dãy địa chỉc c biến);
n scanf(“%d%d”, &a, &ch);
Trang 22n void textcolor(int newcolor);
n textcolor(0); textcolor(15)
n void textbackground(int color);
n textbackground(0); textbackground(5);
n …
Trang 23Ch05: Các câu lệnh điều khiển
Trang 25Cấu trúc lựa chọn
n Cú pháp
switch (<biểu thức>)
{
case giá trị 1: khối lệnh 1; break;
case giá trị 2: khối lệnh 2; break;
case giá trị 3: khối lệnh 3; break;
.
case 0: printf("%d la so chan ",songuyen); break;
case 1: printf("%d la so le ",songuyen); break;
}
getch();
Trang 26printf("\n Day so tu 1 den 10 :");
for (i=1; i<=10; i++)
printf("%d ",i);
getch();
return 0;
}
Trang 28Cấu trúc vòng lặp (do … while)
Trang 29Khi gặp lệnh này trong các vòng lặp, chương trình sẽ
bỏ qua phần còn lại trong vòng lặp và tiếp tục thực
hiện lần lặp tiếp theo
Trang 31n Khái niệm: hàm là một đoạn chương trình cótên và
được gọi thực hiện ở nhiều nơi trong chương trình.
n Tại sao phải dùng chương trình con:
n Phân đoạn, module chương trình đểthuận tiện trong
quản lý, trình bày và phát triển (“chia đểtrị”)
n Cócông việc cần phải được thực hiện tại nhiều nơi
trong chương trình => tách công việc đó thành
chương trình con
n Các loại chương trình con: Function
Trang 32printf(“\nNhap chieu dai:”);scanf(“%d”,&x);
printf(“\nNhap chieu rong:”);scanf(“%d”,&y);