Các kỹ thuật gỡ lỗi trong việc phát triển hệ thống nhúng với ngôn ngữ c

  • Số trang: 65 |
  • Loại file: PDF |
  • Lượt xem: 11 |
  • Lượt tải: 0
nganguyen

Đã đăng 34173 tài liệu

Mô tả:

ĐẠI HỌC QUỐC GIA HÀ NỘI TRƯỜNG ĐẠI HỌC CÔNG NGHỆ Ngô Thị Nga CÁC KỸ THUẬT GỠ LỖI TRONG VIỆC PHÁT TRIỂN HỆ THỐNG NHÚNG VỚI NGÔN NGỮ C KHÓA LUẬN TỐT NGHIỆP ĐẠI HỌC HỆ CHÍNH QUY Ngành: Công nghệ thông tin HÀ NỘI - 2010 ĐẠI HỌC QUỐC GIA HÀ NỘI TRƯỜNG ĐẠI HỌC CÔNG NGHỆ Ngô Thị Nga CÁC KỸ THUẬT GỠ LỖI TRONG VIỆC PHÁT TRIỂN HỆ THỐNG NHÚNG VỚI NGÔN NGỮ C KHÓA LUẬN TỐT NGHIỆP ĐẠI HỌC HỆ CHÍNH QUY Ngành: Công nghệ thông tin Cán bộ hướng dẫn: TS. Đặng Văn Hưng Cán bộ đồng hướng dẫn: ThS. Vũ Quang Dũng HÀ NỘI - 2010 LỜI CẢM ƠN Em xin chân thành cảm ơn Bộ môn Công nghệ phần mềm, Khoa Công nghệ thông tin, Trường Đại học Công nghệ, Đại học Quốc gia Hà Nội đã tạo điều kiện thuận lợi cho em trong quá trình học tập, rèn luyện và thực hiện đề tài khóa luận tốt nghiệp. Em xin gửi lời cảm ơn chân thành đến tất cả thầy cô trong trường đã giúp đỡ, dìu dắt em từ những ngày đầu tiên nhập trường. Em xin gửi lời cảm ơn sâu sắc nhất đến TS. Đặng Văn Hưng, TS. Trần Thị Minh Châu, ThS. Vũ Quang Dũng, những thầy cô đã cho em định hướng, tận tình chỉ bảo, hướng dẫn và giúp đỡ em trong quá trình tìm hiểu về hệ thống nhúng, cùng các kiến thức cần thiết khác để em hoàn thành khóa luận. Em xin gửi những lời cảm ơn, những tình cảm thương yêu tới gia đình, và người thân. Những người luôn bên em, động viên em cả về tinh thần và vật chất trong thời gian qua. Trong quá trình thực hiện khóa luận, em cũng đã nhận được nhiều sự chia sẻ, giúp đỡ, động viên của các thành viên lớp Công nghệ phần mềm K51, và của những thành viên trong diễn đàn sinh viên Đại học Công nghệ. Tôi xin gửi tới các bạn sự biết ơn sâu sắc. Đề tài “Các kỹ thuật gỡ lỗi trong việc phát triển hệ thống nhúng với ngôn ngữ C ” là một đề tài khá khó, lại được hoàn thành trong quỹ thời gian hạn hẹp nên khó tránh khỏi những khiếm khuyết. Em mong nhận được những góp ý chân thành từ thầy cô giáo và các bạn để đề tài có thể mở rộng và nghiên cứu kỹ hơn, đưa vào trong thực tiễn ngành công nghệ thông tin hiện nay. Hà Nội, ngày 15 tháng 05 năm 2010 Sinh viên Ngô Thị Nga i TÓM TẮT KHÓA LUẬN Khóa luận tập trung trình bày tổng quan về hệ thống nhúng, định nghĩa, đặc trưng của hệ thống, những khó khăn trong việc tìm hiểu một hệ thống nhúng. Sau đó, khóa luận đưa ra những kỹ thuật gỡ lỗi thường được áp dụng trên hệ thống nhúng, trong đó bao gồm cả các kỹ thuật gỡ lỗi dựa trên các công cụ phần mềm và công cụ phần cứng. Từ đó, khóa luận lựa chọn trình bày công cụ gỡ lỗi µVision của công ty Keil ARM, đây là một công cụ mạnh về gỡ lỗi theo kỹ thuật mô phỏng – một kỹ thuật được các kỹ sư lập trình áp dụng rất nhiều trong thực tế. Để minh họa cho việc áp dụng kỹ thuật gỡ lỗi và sử dụng công cụ gỡ lỗi, khóa luận xây dựng các chương trình phần mềm ứng dụng nhỏ là Đèn led nhấp nháy và Hello World – truyền các chuỗi ký tự ra cổng nối tiếp. Khóa luận áp dụng kỹ thuật và công cụ gỡ lỗi trên hai chương trình đó. ii MỤC LỤC CHƯƠNG 1: MỞ ĐẦU.............................................................................................1 1.1. Đặt vấn đề......................................................................................................1 1.2. Đề tài, đối tượng nghiên cứu và phương pháp nghiên cứu.............................1 1.3. Mục tiêu của khóa luận..................................................................................2 1.4. Cấu trúc của khóa luận...................................................................................2 CHƯƠNG 2: TỔNG QUAN.....................................................................................3 2.1. Hệ thống nhúng..............................................................................................3 2.1.1. Hệ thống nhúng là gì? ............................................................................3 2.1.2. Các thiết bị phần cứng thông thường......................................................3 2.1.3. Đặc trưng của hệ thống nhúng................................................................6 2.1.4. Ví dụ về hệ thống nhúng ........................................................................8 2.2. Sự lựa chọn ngôn ngữ lập trình cho hệ thống nhúng......................................8 CHƯƠNG 3: CÁC KỸ THUẬT GỠ LỖI ..............................................................10 3.1. Gỡ lỗi...........................................................................................................10 3.1.1. Gỡ lỗi trong quá trình phát triển hệ thống nhúng..................................10 3.1.2. Định nghĩa gỡ lỗi ..................................................................................11 3.1.3. Tầm quan trọng của việc gỡ lỗi.............................................................12 3.1.4. Mục đích của quá trình gỡ lỗi ..............................................................12 3.2. Kiểm thử trên máy chủ ................................................................................13 3.2.1. Kỹ thuật cơ bản ....................................................................................13 3.2.2. Gọi các thường trình ngắt .....................................................................15 3.2.3. Gọi thường trình ngắt định thời ............................................................15 3.2.4. Các tệp kịch bản và tệp kết xuất ...........................................................15 3.2.5. Những phản đối, hạn chế và nhược điểm..............................................16 3.3. Bộ mô phỏng ...............................................................................................17 3.4. Sử dụng macro assert ..................................................................................20 3.5. Sử dụng các công cụ trong phòng thí nghiệm ..............................................21 3.5.1. Máy hiện sóng ......................................................................................22 3.5.2. Bộ phân tích logic (Logic Analyzer) ....................................................24 3.5.2.1. Bộ phân tích logic theo chế độ thời gian .......................................26 3.5.2.2. Bộ phân tích logic theo chế độ trạng thái ......................................26 3.5.3. Bộ mô phỏng trong mạch .....................................................................28 CHƯƠNG 4: CÔNG CỤ GỠ LỖI...........................................................................31 4.1. Lý do chọn họ vi xử lý ARM........................................................................31 4.2. Giới thiệu công cụ µVision...........................................................................32 4.3. Các chức năng chính của công cụ µVision ..................................................33 4.3.1. Các chức năng của µVision IDE...........................................................33 4.3.2. Các chức năng của µVision Debugger..................................................35 4.4. Ưu điểm của µVision ...................................................................................37 4.4.1. Ưu điểm của µVision IDE.....................................................................37 4.4.2. Ưu điểm của µVision Simulator...........................................................38 iii 4.5. Một số hạn chế của µVision phiên bản dùng thử .........................................38 4.6. Cài đặt..........................................................................................................39 CHƯƠNG 5: ỨNG DỤNG CÔNG CỤ µVISION VÀO VIỆC GỠ LỖI...............41 5.1. Vi điều khiển LPC2148................................................................................41 5.2. Chương trình “Đèn led nhấp nháy”..............................................................41 5.3. Chương trình Hello world............................................................................43 5.4. Nhận xét.......................................................................................................45 CHƯƠNG 6: KẾT LUẬN.......................................................................................47 TÀI LIỆU THAM KHẢO.........................................................................................49 PHỤ LỤC: CÁC THÔNG SỐ KỸ THUẬT CỦA VI ĐIỀU KHIỂN LPC2148......50 iv DANH MỤC HÌNH ẢNH Hinh 2.1. Hệ thống nhúng thông thường Hình 3.1. Quá trình phát triển phần mềm nhúng Hình 3.2. Hệ thống kiểm thử Hình 3.3. Đồ thị máy hiện sóng Hình 3.4. Máy hiện sóng Hình 3.5. Bộ phân tích logic Hình 3.6. Chế độ thời gian của bộ phân tích logic Hình 3.7. Chế độ trạng thái của bộ phân tích logic Hình 4.1. Mẫu đăng ký sử dụng phần mềm Keil Hình 4.2. Giao diện IDE Hình 4.3. Giao diện của Debugger Hình 5.1. Kết quả chạy chương trình Led Hình 5.2. Kết quả chạy chương trình Hello world DANH MỤC BẢNG BIỂU Bảng 2.1. Họ vi xử lý ARM Bảng 3.1. Hàm NDEBUG Bảng 4.1. Các chức năng của MicroVision IDE Bảng 4.2. Các chức năng của MicroVision Debugger Bảng 5.1. Chương trình Led.c Bảng 5.2. Chương trình Hello.c v DANH SÁCH CÁC THUẬT NGỮ VÀ KHÁI NIỆM Thuật ngữ Khái niệm AGSI Advanced Simulation Interface – Giao diện mô phỏng nâng cao. ARM Advanced RISC Machine – Máy có bộ lệnh RISC mở rộng. AVR Đây là cấu trúc RISC 8 – bit của công ty Atmel. Big - Endian Bộ nhớ lưu các ký tự quan trọng nhất ở các bit địa chỉ thấp nhất. Cross–compiler Biên dịch chéo. Debugger Bộ gỡ lỗi. DWARF Đây là một định dạng tập tin gỡ lỗi được dùng trong nhiều trình biên dịch. ELF Executable and Linkable Format hay Extensible Linking Format – Tệp tin lưu dưới dạng thực thi và liên kết. Ground Điện áp bằng 0, tình trạng nối đất. ICE In – circuit Emulator – Bộ mô phỏng trong mạch. IDE Intergrated Development Environment – Môi trường phát triển tích hợp. ISS Instruction Set Simulator – Bộ mô phỏng tập lệnh. LED Light Emitting Diode – Đèn hai cực quang phát xạ. Linker/ Locator Bộ liên kết/ Định vị. Little - endian Bộ nhớ lưu các ký tự quan trọng nhất ở các bit địa chỉ cao nhất. MIPS Million Intruction Per Second – Số triệu dòng lệnh thực hiện trong một giây, Overlay memory Bộ nhớ nạp chồng. RAM Random Access Memory – Bộ nhớ truy cập ngẫu nhiên. RE Read Enable signal – Tín hiệu cho phép đọc từ ROM. RISC Reduced Instruction Set Computing – Máy tính dùng tập lệnh rút gọn. ROM Read Only Memory – Bộ nhớ chỉ đọc. vi Thuật ngữ RTOS Khái niệm Real Time Operating System – Hệ điều hành thời gian thực. Symbolic Định dạng kết xuất ký hiệu. Output Format VCC Voltage Connected to Collector – Điệp áp kết nối bộ gom – VCC thường đại diện cho điện áp ở mức cao (High). vii CHƯƠNG 1: MỞ ĐẦU 1.1. Đặt vấn đề Ngày nay, chúng ta có thể nhìn thấy các thiết bị nhúng ở khắp mọi nơi xung quanh ta từ những vật dụng đơn giản như chiếc đồng hồ điện tử, lò vi sóng, tủ lạnh, máy điện thoại di dộng, máy in, máy ảnh kỹ thuật số... đến những hệ thống lớn như các hệ thống điều khiển các dây chuyền sản xuất trong công nghiệp, điều khiển các hoạt động trong lò phản ứng hạt nhân... Chúng ta khó mà có thể tìm được một thiết bị điện tử mà bên trong nó không có một vài vi xử lý, vi điều khiển. Đặc biệt là các họ vi xử lý ARM đã được ứng dụng rất nhiều trong các thiết bị nhúng. Các hệ thống nhúng ngày càng phát triển, các phần mềm để điều khiển cho các thiết bị cũng ngày càng đa dạng. Vì vậy, các nhà sản xuất cần đảm bảo cho các thiết bị của mình đến được tay người dùng với độ ổn định, hiệu quả và ít lỗi nhất có thể. Quá trình gỡ lỗi sẽ đảm bảo cho sản phẩm có chất lượng tốt nhất. Hiện nay, có rất nhiều công cụ gỡ lỗi cho hệ thống nhúng, các kỹ sư lập trình cần phải chọn cho mình được một công cụ gỡ lỗi phù hợp với thiết bị của mình để đạt hiệu quả gỡ lỗi cao nhất. 1.2. Đề tài, đối tượng nghiên cứu và phương pháp nghiên cứu Đề tài của khóa luận là “Các kỹ thuật gỡ lỗi trong việc phát triển hệ thống nhúng với ngôn ngữ C”. Khóa luận mong muốn cung cấp cho các kỹ sư lập trình phần mềm nhúng một cái nhìn tổng quát về hệ thống, các kỹ thuật gỡ lỗi, công cụ gỡ lỗi. Đối tượng nghiên cứu chính trong đề tài là vi điều khiển LPC2148 của công ty Philips. Đây là một vi điều khiển được thiết kế dựa trên cấu trúc của vi xử lý ARM đã được sử dụng rộng rãi trong nhiều thiết bị, sản phẩm. Khóa luận tập trung tìm hiểu về lý thuyết hệ thống nhúng, các kỹ thuật gỡ lỗi, sau đó áp dụng các kiến thức đó vào thực hiện việc gỡ lỗi cho phần mềm nhúng. Khóa luận tập trung nghiên cứu kỹ thuật gỡ lỗi bằng phương pháp mô phỏng. Phương pháp này có ưu điểm là phổ biến, có nhiều công cụ, dễ sử dụng, được sự hỗ trợ lớn về mặt kiến thức và chuyên môn từ các nhà sản xuất và cộng đồng người sử dụng, có thể áp dụng phương pháp mô phỏng này khi phần cứng còn đang được phát triển, hay phần cứng không có sẵn. 1 1.3. Mục tiêu của khóa luận Để đạt được các vấn đề đã nêu ra, khoá luận sẽ lần lượt trình bày những kiến thức cần thiết để giải quyết yêu cầu trên. Khóa luận sẽ tập trung vào một số các vấn đề sau: • Tìm hiểu khái quát về hệ thống nhúng, các đặc điểm của hệ thống và việc lựa chọn các ngôn ngữ lập trình cho hệ thống. • Tìm hiểu các kỹ thuật gỡ lỗi cơ bản cho hệ thống nhúng. • Tìm hiểu công cụ gỡ lỗi µVision, các chức năng, ưu nhược điểm của chương trình. • Xây dựng chương trình, ứng dụng công cụ gỡ lỗi vào việc gỡ lỗi cho chương trình để thấy được những ưu nhược điểm của công cụ. 1.4. Cấu trúc của khóa luận Khóa luận được trình bày theo cấu trúc như sau: Chương mở đầu: Giới thiệu về đề tài, mục tiêu của khóa luận và cấu trúc khóa luận. Chương hai: Giới thiệu tổng quan về hệ thống nhúng, định nghĩa hệ thống nhúng, các đặc trưng của hệ thống và việc chọn lựa một ngôn ngữ lập trình phù hợp với hệ thống nhúng. Chương ba: Tiếp cận với các kỹ thuật gỡ lỗi thường dùng trong hệ thống nhúng: kiểm thử trên máy chủ, kiểm thử sử dụng bộ mô phỏng, macro assert và gỡ lỗi dùng các thiết bị phần cứng. Chương bốn: Tiếp cận tìm hiểu công cụ gỡ lỗi µVision của công ty Keil ARM, là một công cụ hỗ trợ việc gỡ lỗi rất hiệu quả cho các vi xử lý thuộc họ ARM, giới thiệu các chức năng, ưu nhược điểm của công cụ. Chương năm: Xây dựng ví dụ minh họa và áp dụng công cụ để gỡ lỗi cho các chương trình “Đèn led nhấp nháy” và “Hello world” bằng kỹ thuật mô phỏng để thực hiện mục tiêu của khóa luận. Chương sáu: Đánh giá kết quả khóa luận đã đạt được và nêu ra hướng phát triển trong tương lai của đề tài. 2 CHƯƠNG 2: TỔNG QUAN Chương 2 giới thiệu tổng quan về: hệ thống nhúng: định nghĩa hệ thống nhúng, đặc trưng của hệ thống, ví dụ về hệ thống. Và sự lựa chọn ngôn ngữ lập trình cho hệ thống nhúng. 2.1. Hệ thống nhúng 2.1.1. Hệ thống nhúng là gì? Thuật ngữ hệ thống nhúng thường được dùng để chỉ bất kỳ hệ thống máy tính nào ẩn chứa bên trong các thiết bị, hệ thống [4]. Bên cạnh đó còn có nhiều định nghĩa khác cho khái niệm hệ thống nhúng. Dưới đây là một khái niệm được đưa ra trong từ điển Các hệ thống nhúng: “Hệ thống nhúng là một sự kết hợp giữa phần cứng và phần mềm của máy tính và có thể có thêm các thiết bị cơ khí hay các bộ phận khác, nó được thiết kế để thực hiện một chức năng cụ thể”. [2] Trong vài trường hợp, hệ thống nhúng có thể chỉ là một phần nhỏ trong một hệ thống lớn như trong các thiết bị điều khiển xe hơi. Bởi những thiết kế của hệ thống nhúng là để phục vụ cho một vài chức năng cụ thể đã được định trước như là bộ phận hẹn giờ trong lò vi sóng, hệ thống điều khiển đèn giao thông,... nên nó khác với các máy tính cá nhân thông thường – hệ thống có thể thực hiện nhiều nhiệm vụ khác nhau do người dùng cài đặt. [1] 2.1.2. Các thiết bị phần cứng thông thường Bất kỳ một hệ thống thông thường nào cũng đều có các thành phần cấu thành nên nó. Một hệ thống nhúng thông thường sẽ gồm có một số thành phần như hình 2.1 sau: Hình 2.1. Hệ thống nhúng thông thường 3 Mỗi hệ thống đều cần có vi xử lý để điều khiển các thông tin và dữ liệu trong hệ thống. Trong các thiết bị gia dụng như lò vi sóng, nồi cơm điện, hay chiếc điện thoại cũng có ít nhất một bộ vi xử lý. Các vi xử lý được chia làm hai loại: bộ vi xử lý chính dùng để điều khiển các thiết bị trung tâm, và các vi xử lý phụ được thêm vào để mở rộng các tập lệnh của vi xử lý chính, quản lý bộ nhớ, các đường truyền, và các thiết bị nhập xuất. Trong các thiết bị nhúng, vi xử lý chính thường là các vi điều khiển, để phù hợp với các phần mềm, các chương trình rất nhỏ ẩn chứa bên trong những thiết bị. Các vi xử lý giống như bộ não của con người, nếu không có nó thì các thiết bị không thể hoạt động được. Chính vì thế, vi xử lý đóng vai trò trung tâm, quan trọng nhất trong thiết bị. Thiết bị nhúng được ứng dụng rộng rãi trong nhiều lĩnh vưc, nó cũng tiêu thụ nhiều nhất số vi xử lý được sản xuất ra hàng năm. Các họ vi xử lý được phát triển và ứng dụng rộng rãi là 8051 của Intel, họ AVR của Atmel, họ ARM của công ty ARM,... trong các họ này thì các thiết bị được xây dựng trên nền tảng thiết kế của ARM là phổ biến nhất. Bảng 2.1 sẽ đưa ra một số vi xử lý của họ ARM và ứng dụng của chúng trong các thiết bị điện tử. 4 Bảng 2.1. Một số họ vi xử lý ARM và ứng dụng của nó [10] Họ Lõi Đặc tính MIPS điển hình/ MHz ARM7T ARM7TDMI 15 MIPS/ 16.8 3-tầng pipeline DMI (-S) MHz Ứng dụng Game Boy Advance, Nintendo DS, iPod Nintendo DS, Nokia N-Gage, Conexant 802.11 chip ARM946E-S ST Micro STR91xF, gồm cạc Ethernet ARM966E-S ARM9E ARM926EJJazelle DBX S Cortex-A8 Cortex XScale 220 MIPS/ 200 MHz NEON, Jazelle RCT, Thumb-2 Điện thoại di động: Sony Ericsson (K, W series),Siemens và Benq (đời x65 và đời mới hơn) Texas Instruments OMAP3 Cortex-R4 600 DMIPS Broadcom là một hãng sử dụng Cortex-M3 120 DMIPS/ 100MHz Họ vi điều khiển Luminary Micro PXA27x 800 MIPS/ 624 MHz HTC Universal, Zaurus SL-C1000 PXA900 Blackberry 8700 IXP460/IXP 465 Một hệ thống nhúng cần sử dụng bộ nhớ cho hai mục đích: để lưu trữ chương trình và lưu trữ dữ liệu. Không giống như một hệ thống máy tính cá nhân – các chương trình và dữ liệu đuợc lưu trong những phần bộ nhớ giống nhau, hệ thống nhúng dùng các bộ nhớ khác nhau cho các mục đích khác nhau. Bởi vì thông thường một hệ thống nhúng không có ổ đĩa cứng để nạp chương trình, chương trình phải được lưu trong bộ nhớ, thậm chí ngay cả khi tắt nguồn. Bộ nhớ của hệ thống nhúng thường là: bộ nhớ chỉ đọc (ROM), bộ nhớ truy cập ngẫu nhiên (RAM) và có thể là cả bộ nhớ mở rộng với các hệ thống lớn. [4] 5 Các hệ thống nhúng cũng có thể chứa các thiết bị đầu vào và thiết bị đầu ra. Ví dụ như trong các máy điện thoại di động, thiết bị đầu vào là các nút bấm trên bề mặt điện thoại, và thiết bị đầu ra là màn hình điện thoại và loa. Các thiết bị đầu vào của hệ thống nhúng thường ở dưới dạng các thiết bị cảm biến, đầu dò, tín hiệu, hay các nút bấm. Các thiết bị đầu ra của hệ thống thường là màn hình và các tín hiệu. Hệ thống nhúng không giống các máy vi tính thông thường, có một số thành phần của máy vi tính có thể sẽ không có trong hệ thống nhúng. Các thành phần đó là: • Bàn phím: Một số hệ thống có thể có vài nút bấm để người dùng nhập dữ liệu đầu vào, như là máy in, nhưng cũng có những hệ thống không có bàn phím như là máy điện báo. • Chuột: Đối với những máy tính thông thường thì chuột máy tính sẽ làm cho việc sử dụng máy tính được dễ dàng, thuận lợi hơn. Nhưng trong hầu hết các hệ thống nhúng thì chuột đều không xuất hiện. Các tác vụ mà chúng ta thực hiện với hệ thống thường được kích hoạt qua các nút bấm, các cảm biến điện tử. • Màn hình: Nhiều hệ thống sẽ có một màn hình tinh thể lỏng hiển thị vài chức năng đặc trưng, ví dụ như máy giặt thì có một màn hình hiển thị chế độ đang giặt. Hay một số hệ thống chỉ có điốt phát quang để báo hiệu thiết bị đang ở chế độ nào, ví dụ như máy in có đèn nháy để biết rằng máy đang ở chế độ in hay chế độ chờ. • Ổ đĩa cứng: Do thiết kế nhỏ gọn, nên các hệ thống nhúng thường không có ổ đĩa cứng gắn rời bên ngoài mà các chương trình và dữ liệu của hệ thống nhúng thì thường được lưu trữ ở bộ nhớ trong của máy tính (RAM và ROM). • Đĩa quang, loa, tai nghe: hầu hết các hệ thống nhúng không cần tới những thiết bị này. Ngoài ra thì hệ thống nhúng còn có thể có thêm các bộ phận như là: các cổng nối tiếp, các cổng kết nối mạng internet, các phần cứng tương tác với bộ cảm biến,... 2.1.3. Đặc trưng của hệ thống nhúng Mỗi hệ thống nhúng đều có những đặc trưng khác nhau, để thỏa mãn được những yêu cầu khác nhau. Vì các hệ thống nhúng thường nhỏ và chỉ có một số thiết bị cần thiết - nó không giống như các máy vi tính thông thường, nên khi làm việc với các hệ thống nhúng ta gặp rất nhiều khó khăn: 6 • Công suất: Hệ thống cần điều khiển được một lượng lớn dữ liệu trong một khoảng thời gian rất ngắn. • Tính đáp ứng: Hệ thống cần lặp lại các sự kiện một cách nhanh chóng. Ví dụ: việc nhấp nháy của các điôt phát quang là trong một chu kỳ ngắn, lặp lại liên tục. • Khả năng kiểm thử: Kiểm thử cho một hệ thống nhúng có thể là một việc rất khó khăn. • Khả năng gỡ lỗi: Làm thế nào để ta tìm ra các lỗi trong chương trình của hệ thống nhúng với thiết kế đặc trưng là không bàn phím, không màn hình? Làm sao để biết được một phần mềm nào đó đang làm gì trong thiết bị nhúng quả là một việc không dễ dàng gì. Ở đây chúng ta cần đến các thiết bị, các chương trình phần mềm riêng biệt để gỡ lỗi cho nó. • Độ tin cậy: Hệ thống nhúng phải có thể tự điều khiển được trong bất kỳ tình huống nào mà không có sự can thiệp của con người. Với các hệ thống lái xe tự động, hệ thống cần quyết định tất cả những việc cần làm, như chạy ở tốc độ bao nhiêu, đi hướng nào. Hệ thống gần như phải chạy tốt trong mọi trường hợp có thể tính toán trước của nhà sản xuất với độ ổn định cao. • Không gian bộ nhớ: Bộ nhớ của hệ thống nhúng thường bị giới hạn, chúng ta cần phải làm cho các phần mềm và dữ liệu chứa vừa vặn trong không gian nhớ đó. Các thanh ghi địa chỉ thường chỉ là loại 8 bit, hay 16 bit, nên việc cung cấp không gian nhớ là rất hạn chế. Vì vậy một nhiệm vụ khó khăn đặt ra cho các kỹ sư lập trình là phải tối ưu mã làm sao cho với số dòng lệnh ít nhất, chương trình nhỏ nhất mà vẫn có thể thực hiện đuợc các tác vụ yêu cầu. • Cài đặt chương trình: Thông thường ta sẽ cần một công cụ đặc biệt để nạp các chương trình vào trong hệ thống. • Điện năng tiêu thụ: Các hệ thống nhúng thường ở trong các thiết bị nhỏ, nên điện năng tiêu thụ cũng ít. Thông thường mức tiêu thụ điện năng trên các thiết bị này đuợc tính bằng mW/ MIPS (miliwatts/ MIPS, MIPS – số triệu dòng lệnh thực hiện được trong một giây), giá trị này càng nhỏ thì điện năng tiêu thụ càng ít. Mức tiêu thụ điện năng nhỏ cũng làm cho thiết bị sử dụng các pin nhỏ hơn, nhẹ hơn, thiết kế của thiết bị cũng nhỏ gọn hơn. 7 • Tốc độ tính toán: Tốc độ tính toán của một thiết bị thường được đo bằng MIPS. Nếu các thiết bị có chỉ số MIPS càng cao thì làm việc càng hiệu quả, Ngày nay các thiết bị có độ rộng các thanh ghi là từ 8 – 64 bit, với các thiết bị nhúng thì thường dùng các vi xử lý có độ rộng thanh ghi là 8 - 16 bit, các thanh ghi 32 - 64 bit cho phép nạp đuợc nhiều chương trình, dữ liệu vào thiết bị hơn. [1] • Giá thành phát triển: Với các hệ thống nhúng trong các thiết bị hàng ngày, các thiết bị nhỏ, thì giá thành phát triển của một sản phẩm có thể cũng sẽ nhỏ, nhưng khi áp dụng để sản xuất hàng loạt các sản phẩm đó thì công ty vẫn có lãi. Với các thiết bị chuyên biệt, giá thành sản phẩm đến hàng triệu đôla, thì giá thành phát triển của nó cũng tương đối lớn. • Giá thành sản phẩm: Với các thiết bị thông thường, giá thành sản phẩm của nó có thể chỉ nhỏ hơn 10 đôla, điều đó ảnh hưởng rất lớn đến các thiết kế của sản phẩm. 2.1.4. Ví dụ về hệ thống nhúng Với sự phát triển mạnh mẽ của các hệ thống nhúng, ta có thể bắt gặp chúng ở khắp mọi nơi. Ví dụ điển hình của một hế thống nhúng mà ta có thể bắt gặp hàng ngày đó là chiếc điện thoại di động. Thiết kế của chiếc điện thoại di động ngày nay nhỏ gọn, thường có các nút bấm hay có khả năng điều khiển bằng màn hình chạm (touch-screen) dùng để nhập liệu, màn hình để hiển thị các thông tin, bộ nhớ trong từ vài KB đến vài trăm MB, có thể hỗ trợ bộ nhớ mở rộng, và tiêu thụ ít điện năng, các máy điện thoại thường dùng pin sạc. Hầu hết các máy điện thoại di động đều thực hiện được các chức năng thông thường như là nghe, gọi, nhắn tin, tra danh bạ, báo thức, ghi chú, hiển thị ngày tháng, chơi các chương trình điện tử đơn giản. Với những máy điện thoại di động cao cấp, ta còn có thể nghe nhạc, truy cập mạng internet, quay phim, chụp ảnh, đọc sách, và thậm chí có các các hệ điều hành hỗ trợ cho người sử dụng thực hiện các tác vụ yêu cầu. Giá thành một chiếc điện thoại cũng không quá cao, mà độ tin cậy và độ ổn định của điện thoại di động là khá cao. 2.2. Sự lựa chọn ngôn ngữ lập trình cho hệ thống nhúng Đối với một dự án phần mềm nhúng việc chọn ngôn ngữ lập trình cho nó là rất 8 quan trọng. Ngôn ngữ lập trình này phải đáp ứng được cho việc thiết kế các hệ thống với chỉ vài byte, KB đến vài trăm MB bộ nhớ, và hỗ trợ tốt cho nhóm phát triển với số lượng nhà lập trình từ một vài người đến hàng trăm người. Ngôn ngữ này cũng phải được dịch ra các mã máy để nạp vào thiết bị một cách dễ dàng. Hiện nay, ngôn ngữ được sử dụng phổ biến nhất là C. Ngôn ngữ C có rất nhiều ưu điểm hỗ trợ cho việc phát triển các hệ thống nhúng. Nó là một ngôn ngữ dễ học, dễ dùng, khả chuyển và có thể chạy trên hầu hết các hệ điều hành. Các đoạn mã viết bằng ngôn ngữ C cũng nhỏ, gọn, dễ biên dịch và gỡ lỗi hơn. Một trong những tính năng nổi bật để làm cho C trở thành một ngôn ngữ thích hợp cho việc lập trình: C là “ngôn ngữ trung gian”. Nó vừa hỗ trợ cho người lập trình có thể can thiệp sâu vào phần cứng máy tính, cũng vừa là một ngôn ngữ lập trình bậc cao với cấu trúc và các tập lệnh dễ hiểu. Ngoài ngôn ngữ C, chúng ta có thể lập trình cho hệ thống nhúng bằng một số ngôn ngữ như Assembly, Ada, C++, Java,... Nhưng việc lập trình trên các ngôn ngữ này gặp một số khó khăn. Assembly có ưu điểm là can thiệp sâu vào phần cứng, mã lệnh viết ra có thể thực thi trực tiếp, nhược điểm của nó là khó học, khó sử dụng. C++ là một ngôn ngữ lập trình bậc cao, hướng đối tượng nên cũng khó cho người lập trình tác động nhiều đến phần cứng. Ngôn ngữ Java với công nghệ JavaME cũng là một ngôn ngữ mới cho phép người lập trình viết các ứng dụng chạy trên nền các thiết bị phần cứng nhỏ như chip, thẻ thông minh, điện thoại... 9 CHƯƠNG 3: CÁC KỸ THUẬT GỠ LỖI Trong chương này, khóa luận sẽ đưa ra khái niệm về gỡ lỗi và các kỹ thuật gỡ lỗi cho các phần mềm của hệ thống nhúng. Các kỹ sư lập trình có thể áp dụng một hoặc kết hợp một vài phương pháp gỡ lỗi để cho kết quả tốt nhất. 3.1. Gỡ lỗi 3.1.1. Gỡ lỗi trong quá trình phát triển hệ thống nhúng Quá trình phát triển hệ thống nhúng và phần mềm ứng dụng thông thường đều gồm những bước giống nhau. Hình 3.1 là biểu đồ những giai đoạn cơ bản của một quá trình phát triển phần mềm nhúng. Hình 3.1. Quá trình phát triển phần mềm nhúng Quá trình phát triển phần mềm nhúng thường bắt đầu bằng giai đoạn thiết kế, và cài đặt. Sau đó là giai đoạn sinh mã, nạp mã, gỡ lỗi và sửa lỗi, đây là một quá trình lặp đi lặp lại và tiêu tốn thời gian, công sức của các kỹ sư lập trình nhất. Ngoài ra còn một số giai đoạn khác nữa như là kiểm thử, tối ưu mã, tích hợp hay sau khi sản phẩm được đưa tới người tiêu dùng thì chúng ta còn cần phải tiến hành bảo trì cho sản phẩm. Trong giai đoạn thiết kế, các kỹ sư lập trình sử dụng các công cụ, ngôn ngữ đặc tả mô hình hóa các chức năng của hệ thống, để từ đó có thể cài đặt đúng các chức năng 10 mà hệ thống yêu cầu. Giai đoạn cài đặt, các kỹ sư lập trình viết các chương trình của mình bằng các ngôn ngữ lập trình như Assembly, C/C++, Java... Các ngôn ngữ lập trình này thường dễ học, dễ sử dụng, khả chuyển giúp cho các kỹ sư lập trình trong một đội có thể hiểu được chương trình của nhau. Giai đoạn tiếp theo là sinh mã. Các hệ thống nhúng của chúng ta không hiểu các lệnh, các chương trình được viết bằng những ngôn ngữ bậc cao, chúng chỉ hiểu được mã máy - dạng các chuỗi bit 0, 1. Vì vậy sau khi cài đặt, chúng ta cần biên dịch, liên kết, định địa chỉ bộ nhớ cho các tệp tin chương trình thành một tệp tin thực thi dạng mã nhị phân để hệ thống có thể hiểu được, quá trình này gọi là sinh mã. Các máy đích có kiến trúc khác nhau thì chương trình thực thi trong nó sẽ khác nhau, vì vậy các tệp tin thực thi dạng mã nhị phân này thường phải tuân theo một số định dạng nhất định như là hex hay elf… là những định dạng phổ biến mà nhiều hệ thống hiểu được. Giai đoạn nạp mã và gỡ lỗi là giai đoạn mà chúng ta nạp tệp tin thực thi đã được sinh ra ở trên vào trong máy đích, và tìm các lỗi có trong chương trình. Thời gian này là để chúng ta tìm các lỗi khi chương trình chạy trên phần cứng, các lỗi này có thể là những lỗi do không tương thích giữa phần cứng và phần mềm, hay những lỗi thời gian phản ứng chậm hơn so với quy định,... Đây là một giai đoạn quan trọng trong quá trình phát triển phần mềm vì nó giúp đảm bảo chất lượng cho phần mềm. Phần sau của khóa luận sẽ trình bày cụ thể về công việc gỡ lỗi cho hệ thống nhúng. Sau khi tìm ra được lỗi thì các kỹ sư lập trình bắt đầu sửa các lỗi trong chương trình của mình, để đảm bảo cho chương trình của mình chạy tốt. Quá trình sinh mã, nạp mã, gỡ lỗi và sửa lỗi được tiến hành lặp đi lặp lại, để đảm bảo cho sản phẩm khi đi tới người tiêu dùng là ít lỗi nhất, và ổn định nhất có thể. 3.1.2. Định nghĩa gỡ lỗi Không có một hệ thống nào hoàn hảo cả, hầu như các hệ thống đều có lỗi, chỉ khác nhau ở tỷ lệ lỗi nhiều hay ít. Việc kiểm thử và gỡ lỗi giúp chúng ta giảm thiểu được các lỗi, để có thể đưa tới cho khách hàng những sản phẩm ít lỗi hơn. Gỡ lỗi là quá trình loại bỏ các lỗi ra khỏi chương trình, các lỗi từ bản đặc tả tới lỗi trong khi phát triển mã lệnh. Gỡ lỗi là hành động sửa lại các lỗi sau khi viết và bắt đầu kiểm thử hệ thống. Gỡ lỗi thường là phần tốn công sức nhất trong quá trình phát triển hệ thống. [2] 11
- Xem thêm -