Tổng quan về các ngơn ngữ lập trình cho vi điều khiển

Một phần của tài liệu luận văn thạc sỹ khoa học ngiên cứu, thiết kế hệ điều hành trên bộ vi điều khiển 8 bit (Trang 39 - 42)

2.2. Ngơn ngữ lập trình cho vi điều khiển

2.2.1. Tổng quan về các ngơn ngữ lập trình cho vi điều khiển

Cho đến nay khi lập trình cho các bộ vi điều khiển ng−ời ta th−ờng sử dụng 2 ngơn ngữ chính đĩ là hợp ngữ và C. Hợp ngữ (assembly) là ngơn ngữ lập trình bậc thấp (chỉ đứng trên ngơn ngữ máy một bậc). Hợp ngữ sử dụng chính ngay tập lệnh của bộ vi điều khiển t−ơng ứng để viết nên một ch−ơng trình. Để biên dịch thành mã máy cĩ thể sử dụng trình dịch hợp ngữ (assembler) hoặc cĩ thể dùng chính bảng mã lệnh do nhà sản xuất cung cấp để mã hố các lệnh và tổng hợp thành mã (code) của ch−ơng trình. Chúng ta cùng xem xét ví dụ sau:

MOV AL,80H ; chuyển số 80H vào AL MOV BL,12H ; chuyển số 12H vào BL ADD AL,BL ; cộng hai số với nhau.

Trong đoạn ch−ơng trình trên nếu tra bảng mã sẽ cĩ đ−ợc mã của 3 lệnh lần l−ợt là:

B0 80 B3 12 80 C0

Nếu tổng hợp lại thì mã của đoạn ch−ơng trình trên sẽ là B0 80 B3 12

80 C0.

Cách tra bảng mã lệnh và hố lệnh sau đĩ tổng hợp thành mã ch−ơng trình cĩ thể gây ra nhầm lẫn và mất rất nhiều thời gian chính vì vậy mà trình dịch hợp ngữ ra đời. Cĩ trong tay trình dịch hợp ngữ ng−ời lập trình cĩ thể đã giảm bớt

đ−ợc khá nhiều cơng sức khi lập trình cho vi điều khiển. Tuy nhiên chúng ta cùng xem xét ví dụ sau:

Thực hiện phép tốn AX=7 * 9 + 12 * 8. Hợp ngữ:

MOV AL,7 ;số hạng thứ nhất chứa trong AL MOV BL,9 ;số hạng thứ hai chứa trong BL MUL BL ;nhân 2 số, kết quả chứa trong AX MOV CX,AX ;chuyển kết quả vào thanh ghi khác để chuẩn bi cho phép ;nhân thứ hai

MOV AL,12 MOV BL,8 MUL BL

ADD AX,CX ;cộng hai tích với nhau

AINSI C:

AX=7*9+12*8;

Rõ ràng với cùng một nhiệm vụ nh−ng AINSI C chỉ cần 1 dịng lệnh trong khi hợp ngữ cần tới 8 dịng lệnh và cả 8 dịng lệnh trên đều phải thao tác trên các thanh ghi (phần cứng). Từ lý do này mà ng−ời ta nghĩ đến việc nên sử dụng một ngơn ngữ cấp cao hơn để thay thế cho hợp ngữ và xây dựng trình dịch (compiler) cho ngơn ngữ cấp cao đĩ.

Khi thiết kế phần mềm cho một hệ thống nhúng nhỏ sử dụng 8085, việc sử dụng mã hợp ngữ (assembly code) để phát triển tồn bộ sản phẩm đã trở thành chuyện bình th−ờng. Đối với nhiều đề tài, đây là tiếp cận khả thi vì l−ợng mã cần đ−ợc tạo ra th−ờng nhỏ hơn 8 Kbyte và t−ơng đối đơn giản về bản chất. Nếu một kỹ s− phần cứng đ−ợc giao nhiệm vụ thiết kế cả phần cứng lẫn phần mềm, ng−ời này th−ờng cĩ khuynh h−ớng viết phần mềm bằng hợp ngữ. Ng−ời kỹ s− phần

cứng th−ờng khơng quen với một ngơn ngữ cấp cao nh− C chẳng hạn hoặc ng−ời này khơng quan tâm đến ngơn ngữ cấp cao.

Khuyết điểm của các đề tài đ−ợc viết bằng hợp ngữ cĩ thể là khĩ đọc và khĩ bảo trì, đặc biệt khi các ch−ơng trình cho các đề tài này khơng đ−ợc chú thích tốt. Ngồi ra, l−ợng mã cĩ thể sử dụng lại từ một đề tài viết bằng hợp ngữ th−ờng rất thấp. Việc sử dụng ngơn ngữ cấp cao nh− C cĩ thể giải quyết các vấn đề này.

Một ch−ơng trình đ−ợc viết bằng C sẽ dễ đọc hơn so với ch−ơng trình đ−ợc viết bằng hợp ngữ. Do ch−ơng trình viết bằng C sở hữu các cấu trúc lớn hơn, ta dễ dàng hiểu và bảo trì ch−ơng trình. Do tính cĩ module của ngơn ngữ C, một ch−ơng trình viết bằng C cĩ thể sử dụng lại mã một cách tốt hơn khi đi từ đề tài khác. Việc chia ch−ơng trình thành nhiều hàm sẽ thúc đẩy cấu trúc phần mềm tốt hơn và dẫn đến các hàm cĩ thể đ−ợc lấy ra từ một đề tài và sử dụng vào đề tài khác, nh− vậy sẽ giảm tổng thời gian phát triển.

Một ngơn ngữ cấp cao chẳng hạn nh− C cho phép ng−ời phát triển viết ch−ơng trình t−ơng đồng nhiều hơn với suy nghĩ của con ng−ời so với ch−ơng trình viết bằng hợp ngữ. Ng−ời phát triển cĩ thể tập trung nhiều thời gian hơn vào việc thiết kế các giải thuật của hệ thống thay vì phải tập trung vào việc thực hiện riêng rẽ các giải thuật. Điều này sẽ làm giảm một cách đáng kể thời gian phát triển và làm giảm thời gian gỡ rối vì ch−ơng trình sẽ dễ hiểu hơn.

Bằng cách sử dụng ngơn ngữ giống nh− C, ng−ời lập trình khơng cần phải am t−ờng kiến trúc của bộ vi điều khiển. Điều này cĩ nghĩa là một ng−ời ch−a quen với một bộ vi điều khiển cho sẵn cĩ thể xây dựng một đề tài nhanh hơn vì tổ chức bên trong của bộ vi điều khiển đích cĩ thể khơng cần nghiên cứu. Ngồi ra ch−ơng trình đ−ợc phát triển bằng C sẽ dễ dàng sử dụng với các hệ thống khác so với ch−ơng trình đ−ợc phát triển bằng hợp ngữ.

Nhiều bộ vi điều khiển cĩ các trình dịch ngơn ngữ C, các trình dịch này hỗ trợ AINSI C.

Tất cả các điều này khơng cĩ ý muốn nĩi rằng hợp ngữ khơng cĩ vai trị của mình. Trên thực tế nhiều hệ thống nhúng (đặc biệt là các hệ thống thời gian thực) kết hợp ch−ơng trình C và ch−ơng trình hợp ngữ.

Đối với các thao tác cĩ thời gian tới hạn, ch−ơng trình hợp ngữ th−ờng là ph−ơng pháp duy nhất đ−ợc lựa chọn. Tuy nhiên theo kinh nghiệm, phần cịn lại của đề tài (bao gồm nhiều giao diện phần cứng) cĩ thể và nên đ−ợc phát triển bằng C. Một trong những điều quan trọng nhất về ngơn ngữ C là ngơn ngữ này cho phép ta thực hiện các thao tác mức thấp của phần cứng nếu cần, lại cịn cung cấp cho ta chức năng và khái niệm trừu t−ợng của ngơn ngữ cấp cao.

Một phần của tài liệu luận văn thạc sỹ khoa học ngiên cứu, thiết kế hệ điều hành trên bộ vi điều khiển 8 bit (Trang 39 - 42)

Tải bản đầy đủ (PDF)

(86 trang)