Lập trình hệ nhúng - Chương 4: Kỹ thuật lập trình nâng cao
Bạn đang xem 20 trang mẫu của tài liệu "Lập trình hệ nhúng - Chương 4: Kỹ thuật lập trình nâng cao", để tải tài liệu gốc về máy bạn click vào nút DOWNLOAD ở trên
Tài liệu đính kèm:
- lap_trinh_he_nhung_chuong_4_ky_thuat_lap_trinh_nang_cao.pdf
Nội dung text: Lập trình hệ nhúng - Chương 4: Kỹ thuật lập trình nâng cao
- Chương 4 Kỹ thuật lập trình nâng cao Lập trình nhúng ARM-Linux 124
- Mục tiêu chương 4 . Sau khi kết thúc chương n{y, sinh viên có thể • Nắm được kh|i niệm tiến trình (process), quan hệ giữa c|c tiến trình • Trình b{y được cơ chế sử dụng signal để giao tiếp giữa c|c tiến trình • Lập trình sử dụng kỹ thuật đa tiến trình • Trình b{y kh|i niệm luồng • Lập trình ứng dụng đa luồng Lập trình nhúng ARM-Linux 125
- Nội dung 4.1. Tiến trình (process) 4.2. Cơ chế sử dụng signal 4.3. Lập trình giao tiếp đa tiến trình 4.4. Luồng (thread) 4.5. Lập trình ứng dụng đa luồng Lập trình nhúng ARM-Linux 126
- 4.1. Tiến trình (Process) . Kh|i niệm tiến trình . Lập trình đa tiến trình Lập trình nhúng ARM-Linux 127
- Khái niệm tiến trình . Tiến trình được tạo ra khi ta thực thi một chương trình . Đa tiến trình cho phép nhiều chương trình cùng thực thi v{ chia sẻ dữ liệu với nhau . C|c tham số của một tiến trình • PID (Process ID): số hiệu tiến trình • PPID (Parent Process ID): số hiệu tiến trình cha • Command: c}u lệnh được gọi để thực thi tiến trình ls –e –o pid,ppid,command Lập trình nhúng ARM-Linux 128
- PID, PPID .Lấy về PID: sử dụng hàm getpid() .Lấy về PPID: sử dụng hàm getppid() .Hàm getpid() và getppid() trả giá trị kiểu pid_t (bản chất là kiểu int) Lập trình nhúng ARM-Linux 129
- Dừng tiến trình . C|ch 1: Sử dụng tổ hợp phím Ctrl + C . C|ch 2: Sử dụng shell command kill PID Lập trình nhúng ARM-Linux 130
- Tạo tiến trình mới . Cách 1: sử dụng h{m system Lập trình nhúng ARM-Linux 131
- Tạo tiến trình mới . Cách 2: sử dụng h{m fork v{ exec Lập trình nhúng ARM-Linux 132
- 4.2. Cơ chế sử dụng signal . Signal l{ cơ chế cho phép giao tiếp giữa c|c tiến trình . Signal l{ cơ chế không đồng bộ . Khi tiến trình nhận được signal, tiến trình phải xử lý signal ngay lập tức . Linux hỗ trợ 32 SIGNAL Lập trình nhúng ARM-Linux 133
- Danh sách signal thường dùng Kiểu SIGNAL Lý do gửi SIGNAL SIGHUP Báo cho chương trình khi thoát khỏi terminal SIGINT Khi người dùng nhấn Ctrl + C để tắt chương trình SIGILL Khi chương trình chạy lệnh không hợp lệ SIGABRT Khi chương trình nhận được lệnh abort SIGKILL Khi chương trình nhận được lệnh kill (đóng chương trình) SIGUSR1 Tùy biến theo ứng dụng SIGUSR2 Tùy biến theo chương trình Lập trình nhúng ARM-Linux 134
- Gửi SIGNAL tới process . Cách 1: sử dụng shell command kill [-SIGNAL_TYPE] PID . Cách 2: sử dụng h{m kill trong chương trình, cho phép process n{y gửi signal tới process kh|c kill(PID, SIGNAL_TYPE) Lập trình nhúng ARM-Linux 135
- 4.3. Lập trình giao tiếp đa tiến trình . Cơ chế: • Tiến trình chính tạo ra c|c tiến trình con sử dụng lệnh fork v{ exec • Sử dụng cơ chế signal để trao đổi tín hiệu giữa c|c tiến trình Lập trình nhúng ARM-Linux 136
- Ví dụ . Bắt v{ xử lý signal được gửi tới một tiến trình (SIGTERM và SIGINT) Lập trình nhúng ARM-Linux 137
- killsignal.c Lập trình nhúng ARM-Linux 138
- Ví dụ: killsignal.c (tiếp) Lập trình nhúng ARM-Linux 139
- Demo Lập trình nhúng ARM-Linux 140
- 4.4. Luồng (thread) . Một chương trình mặc định chạy một luồng -> luồng chính . Luồng chính có thể tạo ra c|c luồng kh|c, c|c luồng sẽ chạy đồng thời -> tăng tốc chương trình . C|c luồng chia sẻ không gian nhớ, truy xuất file v{ các tài nguyên khác . Tham số của một luồng: • thread ID: số hiệu luồng (kiểu dữ liệu pthread_t) Lập trình nhúng ARM-Linux 141
- 4.5. Lập trình xử lý đa luồng . Tạo luồng . Truyền tham số cho luồng . Nhận gi| trị trả về từ luồng . Tắt luồng Lập trình nhúng ARM-Linux 142
- Tạo luồng . Khai b|o thư viện: pthread.h . H{m tạo luồng: pthread_create thread: thread id attr: các thuộc tính của luồng, mặc định để NULL start_routine: hàm thực thi trong luồng arg: các tham số truyền cho luồng . Biên dịch chương trình: gcc –o multithread multithread.c -pthread Lập trình nhúng ARM-Linux 143
- Mã nguồn tạo luồng Lập trình nhúng ARM-Linux 144
- Truyền tham số cho luồng . Khai báo cấu trúc dữ liệu chứa dữ liệu cần truyền cho luồng. Ví dụ: struct arg { //Ky tu can in char character; //So lan can in int count; }; . Truyền dữ liệu cho luồng khi tạo luồng qua tham số arg . Chương trình con thực thi luồng nhận tham số về và xử lý Lập trình nhúng ARM-Linux 145
- Mã nguồn truyền tham số cho luồng Lập trình nhúng ARM-Linux 146
- Tắt luồng . Sử dụng h{m pthread_cancel: . thread: nhận tham số thread id của luồng muốn tắt Lập trình nhúng ARM-Linux 147
- Mã nguồn tắt luồng Lập trình nhúng ARM-Linux 148
- Thảo luận Lập trình nhúng ARM-Linux 149