Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống
1
/ 15 trang
THÔNG TIN TÀI LIỆU
Thông tin cơ bản
Định dạng
Số trang
15
Dung lượng
286,48 KB
Nội dung
LẬP TRÌNH HỆ THỐNG NHÚNG CƠ BẢN Chương 01:Lập trình C/C++ Linux (P4: Thread) GV: Email: Nguyễn Ngọc Tú Tu.NN79@gmail.com Nội dung Giới thiệu lập trình nhúng mơi trường Linux (T1) NNTu Tiến trình (T2) Xuất nhập truyền nhận sử dụng IPC (T3-4) Thread Xuất nhập trực tiếp thiết bị qua Port (T5) Hệ Thống Nhúng - Embedded Systems (W 2008) Khái niệm NNTu Hệ Thống Nhúng - Embedded Systems (W 2008) Khái niệm Các thread process chia sẻ mã (text section) liệu (data section) Phần mô tả tập tin Các vùng riêng thread NNTu Thread ID Stack Thanh ghi Hệ Thống Nhúng - Embedded Systems (W 2008) Chuẩn Thread POSIX (Portable Operating System Interface) thread hay gọi IEEE 1003.1, 1003.1c phổ biến hệ thống *NIX đặc tả giao diện lập trình API thư viện user-level thread Sun Thread NNTu Hệ Thống Nhúng - Embedded Systems (W 2008) POSIX Threads Khởi tạo thread #include int pthread_create( pthread_t * thread, pthread_attr_t * attr, void * (*start_routine)(void *), void * arg); Kết trả hàm 0: NNTu Tạo thread thành công tham số thread chứa thread ID #0: Thất bại (mã lỗi trả errno) Hệ Thống Nhúng - Embedded Systems (W 2008) POSIX Threads Các tham số thread: attr: Tham chiếu đến hàm user định nghĩa Hàm chứa đoạn mã thực thi cho thread arg: NNTu chứa thiết lập thuộc tính cho thread, tham số attr = NULL thiết lập theo giá trị mặc định start_routine: biến trỏ kiểu pthread_t chứa ID thread tham số truyền vào cho hàm start_routine Hệ Thống Nhúng - Embedded Systems (W 2008) POSIX Threads Thread kết thúc thực thi hàm start_routine kết thúc Có lời gọi hàm pthread_exit() tường minh Thread bị ngắt lời gọi hàm pthread_cancel() process kết thúc thread gọi hàm hệ thống exec() Lời gọi hàm kết thúc thread tường minh NNTu void pthread_exit (void * retval); Hệ Thống Nhúng - Embedded Systems (W 2008) VD1: File thr1.c #include #include void* func(void* arg) { int i; for (i = 0; i < 2; i++) { printf ("This is thread %d\n", sleep (1); } } int main (int argc, char **argv) { int i; pthread_t tid[5]; for (i = 0; i < 5; i++){ pthread_create ( &tid[i], NULL, } sleep (5); return 0; *((int*)arg)); func, (void*)&tid[i]); } NNTu Hệ Thống Nhúng - Embedded Systems (W 2008) VD1: Biên dịch thực thi $gcc thr1.c -o thr1 $./thr1 –lpthread (chỉ định liên kết với thư viện POSIX pthread) This This This This This This This This This This NNTu is is is is is is is is is is threadthreadthreadthreadthreadthreadthreadthreadthreadthread 1026 2051 3076 4101 5126 1026 2051 3076 4101 5126 Hệ Thống Nhúng - Embedded Systems (W 2008) 10 Chờ Threads PTHREAD_JOIN #include int pthread_join ( th, **thread_return); Hàm pthread_join() pthread_t void khiến cho thread gọi hàm phải tạm ngưng thực thi chờ/đợi đến thread có số thread ID kết thúc Tham số thread_return chứa kết trả về(chính giá trị lệnh return hàm pthread_exit(…)) Nếu thread kết thúc trước lời gọi hàm -> lỗi (nonzero) NNTu Hệ Thống Nhúng - Embedded Systems (W 2008) 11 VD2: File thr2.c #include #include void* func(void* arg) { for (int i = 0; i < 2; i++) { printf ("This is thread %d\n", (int*)arg)); sleep (1); } } int main (int argc, char **argv) { int i; pthread_t tid[3]; for (i = 0; i < 3; i++){ pthread_create (&tid[i], NULL, func, pthread_join (tid[i], NULL); } return 0; } NNTu Hệ Thống Nhúng - Embedded Systems (W 2008) (void*)&tid[i]); 12 VD3: struct char_print_parms { char character; int count; }; void* char_print (void* args) { struct char_print_parms* p = (struct char_print_parms*) args; for (int i = 0; i < p->count; ++i) printf ("%c", p->character); return NULL; } int main () { pthread_t tid; struct char_print_parms th_args; th_args.character = 'X'; th_args.count = 300; pthread_create(&tid, NULL, &char_print, &th_args); pthread_join (tid, NULL); return 0; } NNTu Hệ Thống Nhúng - Embedded Systems (W 2008) 13 Bài tập Threads NNTu Hệ Thống Nhúng - Embedded Systems (W 2008) 14 Q/A NNTu Hệ Thống Nhúng - Embedded Systems (W 2008) 15 ... * *thread_ return); Hàm pthread_join() pthread_t void khiến cho thread gọi hàm phải tạm ngưng th c thi chờ/đợi đến thread c số thread ID kết th c Tham số thread_ return chứa kết trả về(chính... Hàm chứa đoạn mã th c thi cho thread arg: NNTu chứa thiết lập thu c tính cho thread, tham số attr = NULL thiết lập theo giá trị m c định start_routine: biến trỏ kiểu pthread_t chứa ID thread. .. Systems (W 2008) Khái niệm C c thread process chia sẻ mã (text section) liệu (data section) Phần mô tả tập tin C c vùng riêng thread NNTu Thread ID Stack Thanh ghi Hệ Thống Nhúng