Ưu điểm của µVision

Một phần của tài liệu LUẬN VĂN: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 doc (Trang 46 - 65)

4.4.1. Ưu điểm của µVision IDE

µVision IDE có một số ưu điểm sau:[6]

• Device Database của µVision tự động cấu hình các công cụ phát triển cho vi điều khiển đích: Các lỗi trong cài đặt công cụ thực sự được loại bỏ và thời gian cấu hình cho công cụ là ngắn nhất.

• µVision IDE cho phép tích hợp thêm công cụ của nhà phát triển thứ ba. Điều này cho phép chúng ta nhanh chóng truy cập tới tất cả các công cụ phát triển từ một môi trường đơn. Tất cả các chi tiết cấu hình đều được lưu trong dự án (project) của µVision.

• µVision tích hợp việc quản lý dự án, trình soạn thảo và bộ gỡ lỗi trong một môi trường đơn nhằm tăng tốc cho việc phát triển các ứng dụng. Trong khi soạn thảo, ta có thể cấu hình các chức năng của bộ gỡ lỗi. Trong khi gỡ lỗi, ta cũng có thể sửa mã nguồn.

• Đồng nhất bộ gỡ lỗi với giao diện người dùng của bộ mô phỏng.

• Chức năng Code Coverage của bộ mô phỏng µVision phân tích, thống kê cho việc thực thi các chương trình, cho phép xem và in ra các báo cáo.

• Bộ mô phỏng µVision là một bộ gỡ lỗi duy nhất mô phỏng đầy đủ tất cả các thiết bị ngoại vi trong mạch của các thiết bị ARM như là Atmel, Philips, và thẻ thông minh của Samsung. Ta có thể nghiên cứu sự khác nhau giữa việc cấu hình phần cứng và tối ưu thiết kế phần cứng.

• µVision cũng cho phép mô phỏng nâng cao với giao diện mô phỏng nâng cao (AGSI - Advanced Simulation Interface) đối với các hệ thống phức tạp có thể được mô phỏng chính xác bằng việc thêm chính các trình điều khiển thiết bị ngoại vi.

4.4.2. Ưu điểm của µVision Simulator

µVision Simulator có một số ưu điểm sau:[7]

• Cho phép thiết lập không hạn chế số lượng điểm dừng.

• Mô phỏng các thiết bị ngoại vi đồng bộ với chương trình thực thi.

• Có khả năng mô phỏng cả những tình huống bị dừng hay ngắt điện đột ngột của phần cứng như là: trạng thái ngắt điện và chạy không tải.

• Các chức năng Code Coverage, Trace, Timing Profile, Logic Analyzer cho phép phân tích các vết và thời gian.

• Cho phép nhập các tín hiệu vào từ một ngôn ngữ kịch bản và đồng bộ với chương trình.

• Mô phỏng chính xác thời gian trong mối tương quan với các thiết bị ngoại vi.

4.5. Một số hạn chế của µVision phiên bản dùng thử

Keil hỗ trợ cho những người dùng mới, hay những người dùng có nhu cầu làm việc với các dự án nhỏ phiên bản dùng thử của µVision. Các phiên bản này được tải xuống trực tiếp từ hệ thống máy chủ của công ty. Tuy nhiên, vì đây là phiên bản dùng thử nên nó có một số hạn chế như sau:[9]

• Nếu chương trình có dung lượng lớn hơn 32 KB thì dữ liệu sẽ không được biên dịch, hợp ngữ hóa hay liên kết, và vì thế cũng sẽ không được gỡ lỗi.

• Bộ biên dịch thường không tạo ra danh sách tách rời của mã máy. Các tùy chọn biên dịch dòng lệnh --S, --asm và --interleave bị vô hiệu hóa.

Output Format) không liên kết với những tiện ích của nhà phát triển thứ ba. Công cụ có bản quyền sẽ tạo ra những tập tin ELF/DWARF chuẩn để người sử dụng có thể dùng được các tiện ích của nhà phát triển thứ ba.

• Bộ liên kết không chấp nhận các tệp mô tả sự tải phân tán cho các sơ đồ bộ nhớ phức tạp. Lệnh --scatter thường bị vô hiệu hóa.

• Địa chỉ tham chiếu cho mã lệnh và hằng trong bộ nhớ phải là 0x000080000, 0x000100000, 0x000200000, 0x000300000, 0x000400000, 0x010400000, 0xXX000000, hay 0xXX800000 ( với XX là mã thập lục phân từ 00-FF). Địa chỉ tham chiếu 0x0 là nơi bộ liên kết đặt mã khởi động của bộ nhớ Flash trên chip của hầu hết các vi điều khiển cơ bản của vi xử lý ARM.

Mặc dù có một số hạn chế như trên, nhưng với đối tượng là sinh viên, những người nghiên cứu và làm việc với các dự án nhỏ thì bản dùng thử này đã cung cấp những tính năng cần thiết và hoàn toàn miễn phí cho họ.

4.6. Cài đặt

Trước khi cài đặt phần mềm, ta cần kiểm tra xem hệ thống của ta có thỏa mãn một số yêu cầu sau đây không:

• Hệ điều hành của máy chủ là từ Windows 2000 trở lên. • Có chuột hoặc những thiết bị tương tự chuột.

• Không gian ổ đĩa cứng phải còn tối thiểu là 300MB. • RAM tối thiểu là 512 MB.

• Máy tính dòng Pentium trở lên.

Các sản phẩm của Keil có thể tải xuống trực tiếp từ trang chủ của công ty: http://www.keil.com hoặc dùng các đĩa CD-ROM của công ty. Trên trang chủ của Keil luôn cập nhật những phiên bản mới nhất các sản phẩm của công ty.

Công cụ có thể được cài đặt theo một trong hai cách sau đây: • Cài đặt thông qua mạng internet:

- Ta điền vào bảng thu thập thông tin của công ty, sau đó tải tập tin mdk410.exe

xuống.

thường.

• Cài đặt từ đĩa CD-ROM:

- Chèn đĩa CD vào ổ, phần mềm sẽ tự động khởi động việc cài đặt. Nếu không được thì ta có thể chạy tập tin setup.exe.

- Chọn Install Products & Updates từ thanh thực đơn của đĩa. - Cài đặt từng bước theo hướng dẫn.

Đối với các phần mềm có bản quyền, chúng ta có thể liên hệ trực tiếp với công ty Keil hoặc các công ty đại diện cho Keil tại khu vực chúng ta sống để có thể biết chi tiết giá thành phần mềm.

Tại Việt Nam, công ty Vijasemi (trang chủ đặt tại: http://www.vijasemi.com) là đại diện và nhà phân phối độc quyền các sản phẩm phát triển trên nền tảng chíp ARM và các công cụ phát triển của ARM/Keil. Chúng ta có thể liên hệ với công ty để biết thêm thông tin về các sản phẩm, công cụ có bản quyền và để được hỗ trợ kỹ thuật.

Việc sử dụng sản phẩm có bản quyền sẽ cung cấp cho chúng ta nhiều tiện ích hơn so với các bản dùng thử của công ty.

CHƯƠNG 5: ỨNG DỤNG CÔNG CỤ µVISION VÀO VIỆC GỠ LỖI

Ở chương 4, khóa luận đã chỉ ra những ưu điểm của việc dùng công cụ µVision vào việc gỡ lỗi. Chương này, khóa luận sẽ trình bày ứng dụng của công cụ vào việc gỡ lỗi cho một số chương trình dưới đây.

5.1. Vi điều khiển LPC2148

Các chương trình viết trong chương này đều được viết cho vi điều khiển LPC2148 của công ty NXP (trang chủ đặt tại: http://www.nxp.com) được phát triển dựa trên nhân của họ vi xử lý ARM và được µVision hỗ trợ gỡ lỗi, mô phỏng.

Đối với các kỹ sư lập trình, kỹ sư kiểm thử, gỡ lỗi cho phần mềm nhúng thì họ không chỉ phải hiểu các ngôn ngữ lập trình, hiểu phần mềm, mà còn phải hiểu cả phần cứng của thiết bị mà mình lập trình hay gỡ lỗi. Đây là một khác biệt khá lớn trong công việc lập trình giữa phần mềm nhúng và phần mềm ứng dụng thông thường.

LPC2148 cũng như các sản phẩm cùng họ ARM7TDMI-S được ứng dụng trong nhiều lĩnh vực khác nhau. Chi tiết các thông số kỹ thuật của vi điều khiển sẽ được trình bày ở phần phụ lục “Các thông số kỹ thuật của vi điều khiển LPC2148. ”

5.2. Chương trình “Đèn led nhấp nháy”

Mỗi kỹ sư lập trình khi bắt đầu một ngôn ngữ lập trình, một công cụ mới thì Hello world luôn là chương trình đầu tiên được viết ra. Chương trình hiển thị dòng chữ “Hello world” trên màn hình như một sự khởi đầu mới, là lời chào thân ái khi chúng ta bắt đầu tiếp cận với một ngôn ngữ lập trình mới.

Đối với các kỹ sư lập trình phần mềm nhúng thì chương trình Hello world chính là lập trình cho các đèn led nhấp nháy để báo hiệu rằng hệ thống của ta đang làm việc.

Mục đích của chương trình nhấp nháy led dưới đây là lập trình để các đèn led ở các chân cắm 0, 2, 4, 6 trên GPIO Port 0 nhấp nháy:

Bảng 5.1: Mã lệnh của chương trình Led.c

/* Chuong trinh Led.c

** Muc dich: nhay cac led 0, 2, 4, 6 tren Port0 trong thoi gian 600000 micro giay ** Kiem tra cac led co hoat dong khong?

*/

#include"lpc214x.h"

void delay(unsigned long int);

/* Ham main co nhiem vu thuc thi cac chuong trinh chinh*/ int main()

{

IODIR0 = 0x00000055; // Dat GPIO pin 0, 2, 4, 6 = Output IOSET0 = 0x00000055; // Set GPIO-1[24] Output Pin(OFF LED)

while(1) {

IOCLR0 = 0x00000055; // Xoa Output GPIO1[24] Pin (ON LED) delay(600000); // Delay

IOSET0 = 0x00000055; // Set Output GPIO1[24] Pin (OFF LED)

delay(600000); // Delay }

}

/* Ham tre voi khoang thoi gian cho truoc time*/ void delay(unsigned long time)

{ while(time > 0) { time--; } }

Ý nghĩa của các giá trị, phép gán, hàm:

• IODIR0: bật các chân cắm 0, 2, 4, 6 của cổng Port 0, thiết lập trạng thái của các chân cắm là trạng thái xuất (giá trị nhị phân tại các chân cắm là 1 – chân cắm ở trạng thái xuất).

• IOSET0: đưa các chân cắm tương ứng bit = 1 trong thanh ghi lên mức cao khi đã thiết lập trạng thái xuất.

• IOCLR0: đưa các chân cắm tương ứng bit = 1 trong thanh ghi xuống mức thấp khi đã thiết lập trạng thái xuất.

• Hàm delay: hàm làm trễ thời gian giữa 2 lần nhấp nháy led với một khoảng thời gian cho trước.

• Giá trị: 0x00000055 là giá trị theo cơ số 16, tương đương với giá trị 00000000000000000000000101010101 các giá trị tại bit 0, 2, 4, 6 là 1.

Thực hiện Translate (nhấn Ctrl + F7) để biên dịch chương trình, kiểm tra xem chương trình có lỗi hay không? Sau đó Build (nhấn F7) để chương trình được biên dịch lại, kết nối và tạo ra tập tin thực thi .hex. Nếu chương trình không có lỗi biên dịch – các lỗi ngữ nghĩa (compiler error) thì chương trình mới có thể được gỡ lỗi, mô phỏng.

Thực hiện gỡ lỗi cho chương trình bằng Debug (nhấn Ctrl + F5) để bắt đầu quá trình gỡ lỗi và chạy chương trình mô phỏng bằng Run (F5).

Thông thường thì chương trình sẽ gọi ra ngay màn hình hiển thị của GPIO để cho chúng ta thấy led đang nhấp nháy, nếu không thấy ta có thể vào thẻ Peripherals - GPIO – Fast GPIO – Port 0 để bật hiển thị GPIO.

Sau khi chạy chương trình và gỡ lỗi, ta được kết quả như sau:

Hình 5.1. Kết quả thực thi chương trình Led.c

Chương trình đã mô phỏng cho sự nhấp nháy của led bằng việc nhấp nháy các chân cắm 0, 2, 4, 6 của thanh ghi GPIO. Chương trình cũng cho thấy tốc độ nhấp nháy của led nhanh hay chậm phụ thuộc vào thời gian làm trễ mà ta đã viết.

5.3. Chương trình Hello world

Ở chương trình trên, ta mô phỏng sự hoạt động của các các chân cắm trên cổng để đèn led nhấp nháy. Chương trình tiếp theo là để minh họa cho việc sử dụng cổng nối tiếp UART để ghi ra các chuỗi kí tự.

Chương trình thực hiện việc ghi ra cổng nối tiếp UART dòng chữ “Hello world” và lặp lại 5 lần dòng chữ: “This is my embedded programming. ”:

Bảng 5.2: Mã lệnh Hello.c

/* Chuong trinh Hello.c thuc hien viec in ra man hinh cac dong chu Hello world. * va 5 lan dong chu “This is my embedded programming. ”

*/

#include <stdio.h>

#include <LPC214x.H> /* Thu vien LPC214x.h */

/* Ham main thuc hien chuong trinh chinh */ int main () {

int count = 5; // Khai bao gia tri cua bien dem count = 5 // Cac khai bao cho cac chan cam, cong

PINSEL0 = 0x00050000; // Bat RXD1 và TXD1

U1LCR = 0x83; // Bat DLAB = 1, 8 bit. 1 stop bit

U1DLL = 97; // 9600 Baud Rate @ 15MHz VPB Clock U1LCR = 0x03; // DLAB = 0

printf ("Hello World\n"); // In ra “Hello world”

// Ham in ra 5 lan dong chu “This is my embedded programming. ” while (count > 0) {

printf("This is my embedded programming. \n"); count --;

}

// Ham lap vo han de dung chuong trinh while (1) {;}

}

Ý nghĩa của các hàm, giá trị, phép gán:

• PINSEL0 có giá trị 0x00050000 tương đương với mã nhị phân có các bit 16 và 18 có giá trị bằng 1. Bit 16 trong PINSEL0 có giá trị bằng 1 tức là mở cổng truyền dữ liệu TXD1 của UART1. Bit 18 trong PINSEL0 có giá trị bằng 1 là mở cổng nhận dữ liệu RXD1 của UART1.

• Ở đây U1LCR có giá trị là 0x83 tương đương với mã nhị phân 1000 0011. Trong đó bit 7 bằng 1 là bật DLAB lên, bit 2 bằng 0 là có 1 stop bit, bit 0 và 1 là 11 nên trạng thái là truy cập với độ dài 8 bit ký tự.

• U1DLL truy cập vào bộ khóa chia (Divisor Latch Access) của UART1. Giá trị 97 là để tính toán tốc độ baud của thiết bị.

• Giá trị của U1LCR là 0x03 là tắt DLAB (bit 7 đại diện cho DLAB chuyển về mức 0).

• Vòng lặp while (count > 0) để chương trình in ra 5 lần dòng chữ “This is my embedded programming. ”

• Vòng lặp while (1) là vòng lặp vô hạn, để chương trình dừng lại, không tiếp tục thực hiện lại hàm main.

Để thực hiện việc in các ký tự ra cổng nối tiếp thì ta còn cần phải viết các hàm phụ để thực hiện việc truyền nhận dữ liệu từ chương trình đến cổng nối tiếp UART1.

Sau khi biên dịch và thực hiện chương trình ta được kết quả như sau:

Hình 5.2. Kết quả thực thi chương trình Hello world

Chương trình của ta lập trình cho việc ghi ra cổng nối tiếp UART1, nhưng trong hình thì cổng xuất ra các ký tự lại là cổng UART1. Điều này được giải thích như sau: trong bộ gỡ lỗi của µVision các cổng nối tiếp UART được đánh số từ UART1, UART2 chứ không đánh số như trong thiết kế của LPC2148 là UART0, UART1. Vì vậy, UART2 tương ứng với UART1 mà ta đã khai báo trong chương trình.

5.4. Nhận xét

Chương trình đèn led nhấp nháy và truyền các dữ liệu ra cổng nối tiếp UART là hai chương trình đơn giản được viết bằng KeilC và được biên dịch, chạy, gỡ lỗi và mô phỏng trong µVision.

giúp cho người lập trình, ngay cả khi không có các thiết bị phần cứng thích hợp vẫn có thể viết các ứng dụng của mình trực tiếp trên µVision IDE và sau đó chạy trên các thiết bị phần cứng đã được mô phỏng và thực hiện các chức năng tương tự như với các vi điều khiển thật sự.

Tuy nhiên, µVision chỉ là một công cụ mô phỏng, công cụ sẽ khó tránh khỏi việc có một vài sai khác so với việc chạy trên các vi điều khiển thật, nhưng sai khác này không quá lớn và ta vẫn có thể chấp nhận được.

CHƯƠNG 6: KẾT LUẬN

Các hệ thống nhúng được ứng dụng rộng rãi trong đời sống của chúng ta, và chúng ngày càng phát triển vượt bậc cả về số lượng lẫn chất lượng. Việc gỡ lỗi cho các hệ thống nhúng ngày càng trở lên quan trọng hơn do số lượng các hệ thống nhiều lên, đòi hỏi của người dùng với sản phẩm cũng cao hơn, sản phẩm cần có được độ ổn định, an toàn và chất lượng tốt.

Đáp ứng mục tiêu gỡ lỗi cho các hệ thống nhúng, sau một thời gian nghiên cứu và học hỏi, khóa luận đã đạt được các kết quả sau:

• Khóa luận đã mang đến một cái nhìn tổng quát về hệ thống nhúng, trình bày những đặc điểm của một hệ thống nhúng thông thường. Khóa luận cũng đã đưa ra một số thông tin về các ngôn ngữ lập trình để các kỹ sư lập trình có thể lựa chọn cho mình được ngôn ngữ lập trình thích hợp với hệ thống của mình.

• Khóa luận cũng đã đưa ra lý thuyết về các kỹ thuật gỡ lỗi cho hệ thống nhúng bằng nhiều phương pháp khác nhau, từ kiểm thử cho máy chủ, đến sử dụng các

Một phần của tài liệu LUẬN VĂN: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 doc (Trang 46 - 65)