Hệ thống nhúng embedded system embedded system 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ẹ.. Hệ thống nhúng embedded system embedded system
Trang 1Mechatronics DeptDept
http http://www.ntu.edu.vn/ ://www.ntu.edu.vn/
Trang 3Hệ thống nhúng ((embedded system embedded system))
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ẹ.
Hệ thống nhúng có vai trò đảm nhận một phần
công việc cụ thể của hệ thống mẹ.
Hệ thống nhúng có thể là một hệ thống phần cứng
và cũng có thể là một hệ thống phần mềm
Trang 4Hệ thống nhúng ((embedded system embedded system))
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
đọc (read only memory) hoặc bộ nhớ flash chứ không only memory) hoặc bộ nhớ flash chứ không phải là trong một ổ đĩa
Trang 5Hệ thống nhúng ((embedded system embedded system))
Thiết bị ngoại vi
…
Trang 6Nó phải miêu tả một cách đầy đủ và rõ ràng các tiến trình (
tiến trình (process process), để có thể chạy được trên các ), để có thể chạy được trên các máy tính khác
Trang 7Ngôn ngữ lập trình ((tiếp tiếp))
Ngôn ngữ máy Ngôn ngữ máy Machine languages Machine languages
Ngôn ngữ duy nhất của máy tính Ngôn ngữ duy nhất của máy tính –– CPUCPU
Hợp ngữ Hợp ngữ Assembly languages Assembly languages
Sử dụng các từ khóa tiếng Anh cho các lệnh hay nhóm lệnh của mã máy
Ngôn ngữ cấp cao Ngôn ngữ cấp cao High High level languages level languages
Pascal, C, C++, VB, VC, Java,…
Trang 8Ngôn ngữ C
Tại sao lại chọn C
Từ khóa ít (khoảng 32 từ khóa)
Thông dụng (hầu hết code đều viết bằng C)
Tính ổn định (không thay đổi nhiều lắm theo thời
Tính ổn định (không thay đổi nhiều lắm theo thời gian)
Tốc độ thực thi nhanh
Là nền tảng nhiều ngôn ngữ khác ( Java, C++,
awk, Perl)
Trang 9Ngôn ngữ C ((tiếp tiếp))
auto break case char continue continue default default
do double else extern float for
goto if int long register return short sizeof static struct switch typedef short sizeof static struct switch typedef union unsigne
Trang 10Flow 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
Stop • Stop/End kết thúc của giải thuật Có thể có một hoặc
nhiều điểm STOP.
Trang 11Flow chart (( tiếp ))
Trang 12Một chương trình bằng C
#include <stdio.h>
/* My first C program which prints Hello World */
Khai báo thư viện
Trang 13Ch02: Kiểu dữ liệu, biến và hằng
Trang 14Kiểu dữ liệu
Vô hướng Kiểu dữ
Cơ sở
Tự định nghĩa
Kiểu số nguyên Kiểu số thực Kiểu ký tự Kiểu logic Kiểu liệt kê
Trang 15Biến và hằng, các phép gán cơ bả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:
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:
name_1, _name2, sample32… là các tên biến hợp lệ.
name 1, char, 34sample,… là các tên biến không hợp lệ
Trang 16Biến và hằng, … (( tiếp ))
Khai Khai báo báo biến biế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.
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
Ví dụ
char ten1, ten2;
int a, b, c;
Trang 17Biến và hằng, … (( tiếp ))
Khai báo hằng:
const Kiểu_dữ_liệu tên_các_hằng = giá_trị_hằng;
Ví dụ
const int he_so = 123;
const float gia_sp = 1,23;
Trang 19Kiểu số nguyên
Kiểu dữ liệu Từ khóa Số byte Dải giá trị
Character char 1 128 128 ÷ ÷ 127 127
Integer int 2 32768 32768 ÷ ÷ 32767 32767
Short integer short 2 32768 32768 ÷ ÷ 32767 32767
Short integer short 2 32768 32768 ÷ ÷ 32767 32767
Long integer long 4 2147483648 2147483648 ÷ ÷ 2147483647 2147483647 Unsigned character unsigned char 1 0 0 ÷ ÷ 255 255
Unsigned integer unsigned int 2 0 0 ÷ ÷ 65535 65535
Unsigned short integer
Unsigned short integer unsigned short unsigned short 2 0 0 ÷ ÷ 65535 65535
Unsigned long integer unsigned long 4 0 0 ÷ ÷ 4294967295 4294967295
Trang 20Kiểu số nguyên (( tiếp ))
Trang 21Kiểu số thực
Kiểu dữ liệu Từ khóa Số byte Dải giá trị
Số thực có độ chính xác đơn float 4 1.2E 1.2E 38 38 ÷ ÷ 3.4E38 3.4E38
Số thực có độ chính xác kép double 8 2.2E 2.2E 308 308 ÷ ÷ 1.8E308 1.8E308
Số thực có độ chính xác kép độ long float 10 3.4E 3.4E 4932 4932 ÷ ÷ 3.4E4932 3.4E4932
Số thực có độ chính xác kép độ
dài lớn
long float 10 3.4E 3.4E 4932 4932 ÷ ÷ 3.4E4932 3.4E4932
Trang 22Phép tính
Cộng, trừ, nhân, chia, phép tăng giảm
Phép chia sẽ cho số thực, không có phép %
Trang 243 !!0b1000.1110 = ? 0b1000.1110 = ?
4.
4 0b1010.1010 0b1010.1010 != != 0b0100.0100 = ? 0b0100.0100 = ? 5.
5 0b1011.0010 0b1011.0010 == == 0b0100.0100 = ? 0b0100.0100 = ? 6.
6 0b1100.0100 0b1100.0100 >= >= 0b0100.0100 = ? 0b0100.0100 = ? 7.
7 0xA5 0xA5 > > 0b1011.0001 = ? 0b1011.0001 = ?
Trang 25Kiểu ký tự
Kiểu dữ liệu Từ khóa Số byte Dải giá trị
Kiểu có dấu char 1 128 128 ÷ ÷ 127 127 Kiểu không dấu unsigned char 2 0 0 ÷ ÷ 125 125
Phân loại
Các ký tự điều khiển 0 => 31
Các ký tự văn bản 32 => 126
Các ký tự đồ họa 127 => 255
Trang 26Chuyển ký tự thành ký tự thường
tolower (int c) tolower (‘
Trang 27Khai báo các hằng tượng trưng
#define tên_ban_đầu dãy_thay_thế
Trang 28Ch03: Câu lệnh, biểu thức và toán tử
Trang 33i = i + 1; i++ hoặc ++i i++ hoặc ++i
i = i i = i 1; 1; ii hoặc hoặc ii
…
a = ++i; i = i + 1; i = i + 1; a = i;
a = i++; a = i; a = i; i = i + 1;
Trang 34Toán tử
Toán tử quan hệ
Là các phép so sánh
Toán tử sizeof()
Tính số byte mà biến (kiểu dữ liệu) đó chiếm
sizeof (sizeof (intint) = 2) = 2
sizeof (sizeof (longlong) = 4) = 4
Toán tử điều kiện
biểu_thức_1 ? biểu_thức_2 : biểu_thức_3
a = b>c ? m:n;
Trang 35Thứ tự ưu tiên giữa các phép toán
Các phép toán có mức ưu tiên khác nhau
Nếu không nhớ thứ tự thì ta có thể dùng dấu ngoăc đơn
f = 2*(a+b) f = 2*(a+b) –– ( (x + y)/(a+x) );( (x + y)/(a+x) );
f = 3* ( n f = 3* ( n –– (2*m) );(2*m) );
Trang 36Sự hiệu chỉnh khi tính toá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.
Việc chuyển đổi dữ liệu tự động có thể mất dữ liệu trong quá trình chuyển đổi.
Ưu tiên chuyển đổi về kiểu dữ liệu số nguyên chuẩn
Chuyển đổi các ký tự về số nguyên dựa vào
bảng mã ASCII
Trang 38Các hàm chuẩn số học
Các hàm số học nằm trong thư viện “ Các hàm số học nằm trong thư viện “math.h math.h””
int int abs abs(int i);(int i);
double double sin sin((double ddouble d))
Trang 40Nhập dữ liệu
Hàm scanf()
int scanf(“xâu định dạng”, dãy địa chỉ các biến);
scanf(“%d%d”, &a, &ch);
Trang 41int puts(const char *st);
int puts(const char *st);
puts(“puts(“MechatronicsMechatronics”);”);
int putchar(int ch);
putchar(putchar(4848), putchar (‘), putchar (‘00’)’)
…
Trang 42Các hàm trình bày màn hình
Hàm di chuyển con trỏ
gotoxy(int x, int y);
gotoxy(gotoxy(2020, , 1010););
void textcolor(int newcolor);
void textcolor(int newcolor);
textcolor(textcolor(00); textcolor(); textcolor(1515))
void textbackground(int color);
textbackground(textbackground(00); textbackground(); textbackground(55););
…
Trang 43Ch05: Các câu lệnh điều khiển
Trang 44No
Trang 53case 0: printf("%d la so chan ",songuyen); break; case 1: printf("%d la so le ",songuyen); break; }
getch();
return 0;
}
Trang 60No
Trang 611 Điều kiện? (Đúng→B2; Sai kết thúc)
Trang 62return 0;
}
Trang 64Cấu trúc trúc vòng vòng lặp lặp ((while while and do … while and do … while))
Yes
N o
Trang 66ch = getch();
clrscr();
printf("Ky tu vua nhap: %c", ch);
} while(ch!=27);
return 0;
}
Trang 69if (i==3) break;
} getch();
return 0;
}
Trang 70for(i=1;i<5;i++) {
printf(“\n%d”,i);
if (i==3) break;
} printf(“j: %d”, j);
if (j==6) break;
} getch();
return 0;
}
Trang 71if ((i%2)!=0)
continue;
printf(“\n%d”,i);
} getch();
return 0;
}
Trang 72for(i=1;i<5;i++) {
return 0;
}
Trang 74Hàm ((chương chương trình trình con) con)
Khái niệm 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
Tại sao phải dùng chương trình con:
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ị”)
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
Các loại chương trình con: Function
Trang 75Hàm ((chương chương trình trình con) con)
<kiểu_dl> tên(kiểu_dl1 biến1,…)
void void Ve_tam_giac Ve_tam_giac(int (int n n)) float
float Can_bac_hai Can_bac_hai(float (float n n)) float
float Can_bac_hai Can_bac_hai(float (float n n)) float
float Dien_tich_h_thang Dien_tich_h_thang(int (int aa, int , int b b, int , int h h))
Trang 76Hàm ((chương chương trình trình con) con)
printf(“\nNhap chieu dai:”);scanf(“%d”,&x);
printf(“\nNhap chieu rong:”);scanf(“%d”,&y); dientich=tich(x,y);
printf(“\nDien tich hinh chu nhat: %d”,dientich); getch();
return 0;
}
Trang 77Hàm ((chương chương trình trình con) con)
Trang 78Khai Khai báo báo mảng mảng::
Kiểu_dữ_liệu tên_các_biến[số lượng];
Kiểu_dữ_liệu: tên kiểu dữ liệu của các biến cần khai báo.
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
Số lượng: Số phần tử của mảng
Ví dụ
char ten1[10], ten2[5];
int a[12], b[6], c[8];
Trang 81Ví dụ
char route[20] = “7R4L6R3R4L1L2”
n = strlen(route); // get length of route
for(i=n-1; i>=0; i )
if(ch==L)
Quaytrai();
else {
for(j=0; j<(ch-48); j++)
Chaythang1vach(); {
} }
Trang 82Ví dụ
char route[20] = “7R4L6R3R4L1L2”
n = strlen(route); // get length of route
for(i=n-1; i>=0; i )
{
ch = route[i];
switch(ch) {
case ‘R’: Quayphai(); break; case ‘L’: Quaytrai(); break; default:
for(j=0; j<(ch-48); j++)
Chaythang1vach(); }
}