Tải bản đầy đủ (.pdf) (33 trang)

Lập trình hệ thống nhúng

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (147.99 KB, 33 trang )

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

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



×