chap01 c linux vanlangembeddedsystems

23 126 0
chap01 c linux vanlangembeddedsystems

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

Thông tin tài liệu

LẬP TRÌNH HỆ THỐNG NHÚNG CƠ BẢN Chương 01:Lập trình C/C++ Linux (P1: Môi trường cách biên dịch) 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) Xuất nhập trực tiếp thiết bị qua Port (T5) Hệ Thống Nhúng - Embedded Systems (W 2008) Linux „ Các lệnh ‰ ‰ ‰ ‰ ‰ ‰ ‰ NNTu Ls, pwd, cd, clear, whoCat, less, tail, head, last, more Rmdir, Mkdir Rm, cp Su Ký tự mẫu (wild cards): ?, *, [] find pathname -name filename -print Rpm, grep, which, whereis, locate Hệ Thống Nhúng - Embedded Systems (W 2008) Linux „ Quyền: ‰ ‰ „ Chmod, chown User-group-others: RWXD Quyền truy cập thiết lập theo dạng ‰ ‰ NNTu Dạng dùng ký hiệu (symbolic):[ugo][+ -=][rwx] Dạng dùng số bát phân (octal):[0-7][0-7][0-7] Hệ Thống Nhúng - Embedded Systems (W 2008) Mơi trường lập trình NNTu Hệ Thớng Nhúng - Embedded Systems (W 2008) Nội dung biên dịch C „ Biên dịch thực thi chương trình C/C++ ‰ ‰ ‰ ‰ „ Giới thiệu process Tổ chức process Background foreground process Các lệnh thao tác với process Lập trình process với fork(), exec…() NNTu Hệ Thống Nhúng - Embedded Systems (W 2008) Quá trình tạo tập tin thực thi a, so Tập tin C/C++ gas/gcc/g++ c++/cc o Tập tin Obj Biên Dịch Tập tin C/C++ N c C, cc i ii NNTu gcc/g++/cc Liên Kết Tập Tin Thực Thi Tập tin Obj N Loader Image tiến trình nhớ Hệ Thống Nhúng - Embedded Systems (W 2008) Các công cụ „ GNU Compiler Collection (GCC) ‰ ‰ ‰ „ Trình tiện ích khác: ‰ „ Thư viện hàm tiện ích: libc, libstdc++, … Các trình biên dịch: gcc, g++, gcj, gas, … Trình khử lỗi : gdb nm, strip, ar, objdump, ranlib(dùng lệnh info binutils để xem thêm) Tiện ích: gmake, make, … NNTu Hệ Thớng Nhúng - Embedded Systems (W 2008) Trình biên dịch GNU C/C++ „ „ Công cụ dùng biên dịch chương trình C/C++ Quá trình biên dịch thành file thực thi gồm giai đoạn: ‰ ‰ ‰ ‰ 1.preprocessing (tiền xử lý) 2.compilation (biên dịch) 3.assembly (hợp dịch) 4.linking (liên kết) „ „ „ NNTu Bước 1, 2, thường xử lý tập tin đầu vào Bước 4: liên kết nhiều object module liên quan để tạo thành tập tin thực thi nhị phân can thiệp vào bước Hệ Thống Nhúng - Embedded Systems (W 2008) Quá trình biên dịch Hello.c gcc -E Hello.c -o Hello.cpp C, CC gcc Hello.c [-o Hello] gcc -S Hello.c [-o Hello.s] gcc c.o b.o Hello.o [-o Hello] gcc -c Hello.c [-o Hello.o] B.O CPP Hello.cpp S Hello.S gcc -x cpp-output -S Hello.cpp [-o Hello.s] A.OUT/ … O Hello.o Hello C.O gcc -x assembler -c Hello.s [-o Hello.o] NNTu Hệ Thống Nhúng - Embedded Systems (W 2008) 10 Một số tùy chọn Tùy chọn Công dụng -o FILENAME Chỉ định tên tập tin xuất -c Chỉ biên dịch mà không liên kết để tạo tập tin thực thi -I DIRNAME Tên thư mục chứa tập tin header -L DIRNAME Tên thư mục chứa thư viện Lib dạng (.a , so ) -O [n] Tối ưu mã thực thi -g Chèn mã hỗ trợ Debug -E Thực bước tiền xử lý -S Dịch sang mã Assembly -lLIB Liên kết với thư viện libLIB, chẳng hạn: -lm, -lpthread, -lmpi, … -ansi Biên dịch theo chuẩn ANSI NNTu Hệ Thống Nhúng - Embedded Systems (W 2008) 11 Biên dịch chương trình C/C++ File main.c #include #include "reciprocal.h“ Int main (int argc, char **argv) { int i; i = atoi(argv[1]); printf("The reciprocal of %d is %g\n", i, reciprocal (i)); return 0; } NNTu Hệ Thống Nhúng - Embedded Systems (W 2008) 12 Biên dịch chương trình C/C++ File reciprocal.h extern double reciprocal (int i); File reciprocal.c #include #include "reciprocal.h“ double reciprocal (int i) { assert (i != 0); return 1.0/i; } NNTu /* debug */ Hệ Thống Nhúng - Embedded Systems (W 2008) 13 Biên dịch chương trình C/C++ „ Biên dịch(khơng link) file chương trình nguồn C đơn lẻ ‰ Gcc -c main.c „ „ Biên dịch(khơng link) file chương trình nguồn C++ ‰ g++ -c myprog.cpp „ „ „ „ Kết object file tên main.o Kết file object tên myprog.o Biên dịch(khơng link) main.c có sử dụng file *.h thư mục “include/” (dùng tùy chọn -I để định đường dẫn) ‰ Gcc -c -I /include reciprocal.c Biên dịch(khơng link) có tối ưu m㠉 Gcc -c -O2 main.c Biên dịch có kèm thơng tin phục vụ debug => kích thước file output lớn ‰ Gcc -g reciprocal.c NNTu Hệ Thống Nhúng - Embedded Systems (W 2008) 14 Biên dịch chương trình C/C++ „ Liên kết(link) nhiều file đối tượng(object files) có ‰ g++ -o myapp main.o reciprocal.o ‰ Gcc -o myapp main.o reciprocal.o „ „ „ „ „ „ Tên file tạo gì? Cho biết quyền hạn file đó? Thựcthitạidấunhắclệnh: $ /myapp Liên kết object files với thư viện(libraries) khác Liên kết với thư viện chuẩn POSIX pthread (/usr/lib/libpthread.so) ‰ Gcc -o myapp main.o -lpthread Liên kết với thư viện libutility.a thư mục /usr/local/lib/somelib ‰ Gcc -o myapp main.o -L/usr/local/lib/somelib -lutility Liên kết với thư viện libtest.so thư mục làm việc hành ‰ Gcc -o myapp main.o -L -ltest NNTu Hệ Thống Nhúng - Embedded Systems (W 2008) 15 Biên dịch chương trình C/C++ „ „ „ „ „ „ Lưu ý biên dịch Linux Dùng g++ chương trình có chứa mã C lẫnC++ Dùng gcc chương trình có mã C Tập tin thực thi tạo khơng có exe, dll môi trường Windows Giả sử ứng dụng gồm nhiều tập tin source code, chẳng hạ main.c reciprocal.c Để tạo thành chương trình thực thi, biên dịch trực tiếp lệnh gcc sau: ‰ gcc -o myappmain.creciprocal.c Cách làm thủ công bất tiện không hiệu ứng dụng gồm nhiều tập tin ‰ Tham khảo thêm cơngcụ hữu ích GNU make NNTu Hệ Thớng Nhúng - Embedded Systems (W 2008) 16 Thư viện lập trình Linux „ „ Thư viện tĩnh Thư viện động NNTu Hệ Thống Nhúng - Embedded Systems (W 2008) 17 Thư viện lập trình Linux „ Thư viện tĩnh ‰ ‰ ‰ „ Tập hợp Object thành tập tin Tương tự “.LIB” Khi biên dịch phải định liên kết tới thư viện Cách tạo: ‰ Giả sử có tập tin: a.c, b.c Int sum(int a,int b) { return (a+b); } NNTu Int mult(int a,int b) { return (a*b); } Hệ Thống Nhúng - Embedded Systems (W 2008) 18 Thư viện lập trình Linux „ Tạo thư viện tĩnh có tên “libcal.a” ‰ Biên dịch tạo tập tin Object: „ ‰ Dùng lệnh ar để tạo thư viện „ ‰ nm libcal.a Dùng lệnh file để xem loại tập tin „ NNTu ar cr libcal.a a.o b.o Dùng lệnh nm xem kết „ ‰ gcc -c a.c b.c file libcal.a Hệ Thống Nhúng - Embedded Systems (W 2008) 19 Thư viện lập trình Linux „ Sử dụng thư viện ‰ Vd: myapp.c int main() { cout

Ngày đăng: 19/06/2018, 14:29

Tài liệu cùng người dùng

Tài liệu liên quan