46
Lập trình nhúng với Keil C GV: ThS. Phan Nguyệt Minh [email protected] [email protected] http://sites.google.com/site/laptrinhnhungcanban

LT Nhúng Căn Bản: Chương 2

  • Upload
    ck47ht

  • View
    129

  • Download
    6

Embed Size (px)

DESCRIPTION

LậptrìnhnhúngvớiKeilCNộidungPhầnmềmnhúngLàmviệcvớiKeilCNgônngữAssembly

Citation preview

Page 1: LT Nhúng Căn Bản: Chương 2

Lập trình nhúng với Keil C

GV: ThS. Phan Nguyệt Minh

[email protected]

[email protected]

http://sites.google.com/site/laptrinhnhungcanban

Page 2: LT Nhúng Căn Bản: Chương 2

Nội dung

Phần mềm nhúng

Làm việc với Keil C

Ngôn ngữ Assembly

2Lập trình nhúng căn bản

Page 3: LT Nhúng Căn Bản: Chương 2

Phần mềm nhúng

Phần mềm nhúng (Embedded Software) là

phần mềm máy tính, thực hiện một vai trò

hoàn chỉnh trong các hệ thống điện tử.

Lập trình nhúng căn bản 3

Page 4: LT Nhúng Căn Bản: Chương 2

Phần mềm nhúng

Vai trò chính của phần mềm nhúng là

tương tác với thế giới thực, được dành cho

các máy không phải là computer

Phần mềm nhúng được tích hợp trong các

thiết bị như xe hơi, điện thoại, thiết bị

audio, robot, đồ chơi, hệ thống bảo vệ,

TV, đồng hồ điện tử,…

Phần mềm có thể rất phức tạp trong các

ứng dụng như máy bay, tên lửa, các hệ

thống điều khiển tiến trình,…Lập trình nhúng căn bản 4

Page 5: LT Nhúng Căn Bản: Chương 2

Phần mềm nhúng

Phần mềm nhúng thường được viết cho

phần cứng chuyên biệt

Có thể sử dụng hệ điều hành thời gian

thực như LynxOS, VxWorks, PikeOS,

eCos, ThreadX, WindowsCE, Fusion

RTOS, Nucleus RTOS, RTEMS, Integrity

và QNX.

Lập trình nhúng căn bản 5

Page 6: LT Nhúng Căn Bản: Chương 2

Kiến trúc phần mềm nhúng

Vòng lặp kiểm soát đơn giản (Simple

control loop): Theo thiết kế này, phần

mềm được tổ chức thành một vòng lặp

đơn giản. Vòng lặp gọi đến các chương

trình con, mỗi chương trình con quản lý

một phần của hệ thống phần cứng hoặc

phần mềm.

Lập trình nhúng căn bản 6

Page 7: LT Nhúng Căn Bản: Chương 2

Kiến trúc phần mềm nhúng

Hệ thống ngắt điều khiển (Interrupt

controlled system)

◦ Các hệ thống nhúng thường được điều khiển

bằng các ngắt. Có nghĩa là các tác vụ của hệ

thống nhúng được kích hoạt bởi các loại sự

kiện khác nhau. Ví dụ, một ngắt có thể được

sinh ra bởi một bộ định thời sau một chu kỳ

được định nghĩa trước, hoặc bởi sự kiện khi

cổng nối tiếp nhận được một byte nào đó.

Lập trình nhúng căn bản 7

Page 8: LT Nhúng Căn Bản: Chương 2

Kiến trúc phần mềm nhúng

Hệ thống ngắt điều khiển

◦ Loại kiến trúc này thường được sử dụng trong

các hệ thống có bộ quản lý sự kiện đơn giản,

ngắn gọn và cần độ trễ thấp. Hệ thống này

thường thực hiện một tác vụ đơn giản trong

một vòng lặp chính. Đôi khi, các tác vụ phức

tạp hơn sẽ được thêm vào một cấu trúc hàng

đợi trong bộ quản lý ngắt để được vòng lặp xử

lý sau đó. Lúc này, hệ thống gần giống với

kiểu nhân đa nhiệm với các tiến trình rời rạc.

Lập trình nhúng căn bản 8

Page 9: LT Nhúng Căn Bản: Chương 2

Kiến trúc phần mềm nhúng

Đa nhiệm tương tác (Cooperative

multitasking)

◦ Một hệ thống đa nhiệm không ưu tiên cũng

gần giống với kỹ thuật vòng lặp kiểm soát đơn

giản ngoại trừ việc vòng lặp này được ẩn giấu

thông qua một giao diện lập trình API. Các

nhà lập trình định nghĩa một loạt các nhiệm

vụ, mỗi nhiệm vụ chạy trong một môi trường

riêng của nó. Khi không cần thực hiện nhiệm

vụ đó thì nó gọi đến các tiến trình con tạm

nghỉ (bằng cách gọi “pause”, “wait”, “yeild”).Lập trình nhúng căn bản 9

Page 10: LT Nhúng Căn Bản: Chương 2

Kiến trúc phần mềm nhúng

Đa nhiệm tương tác

◦ Ưu điểm và nhược điểm của loại kiến trúc này

cũng giống với kiểm vòng lặp kiểm soát đơn

giản. Tuy nhiên, việc thêm một phần mềm

mới được thực hiện dễ dàng hơn bằng cách lập

trình một tác vụ mới hoặc thêm vào hàng đợi

thông dịch (queue-interpreter).

Lập trình nhúng căn bản 10

Page 11: LT Nhúng Căn Bản: Chương 2

Kiến trúc phần mềm nhúng

Đa nhiệm ưu tiên (Preemptive

multitasking)

◦ Ở loại kiến trúc này, hệ thống thường có một

đoạn mã ở mức thấp thực hiện việc chuyển đổi

giữa các tác vụ khác nhau thông qua một bộ

định thời. Đoạn mã này thường nằm ở mức mà

hệ thống được coi là có một hệ điều hành và vì

thế cũng gặp phải tất cả những phức tạp trong

việc quản lý đa nhiệm.

Lập trình nhúng căn bản 11

Page 12: LT Nhúng Căn Bản: Chương 2

Kiến trúc phần mềm nhúng

Đa nhiệm ưu tiên

◦ Bất kỳ tác vụ nào có thể phá hủy dữ liệu của

một tác vụ khác đều cần phải được tách biệt

một cách chính xác. Việc truy cập tới các dữ

liệu chia sẻ có thể được quản lý bằng một số

kỹ thuật đồng bộ hóa.

◦ Một giải pháp thường được đưa ra là sử dụng

một hệ điều hành thời gian thực. Lúc đó, các

nhà lập trình có thể tập trung vào việc phát

triển các chức năng của thiết bị chứ không cần

quan tâm đến các dịch vụ của hệ điều hành.Lập trình nhúng căn bản 12

Page 13: LT Nhúng Căn Bản: Chương 2

Kiến trúc phần mềm nhúng

Vi nhân (Microkernel)

◦ Khái niệm vi nhân (microkernel) là một bước

tiếp cận gần hơn tới khái niệm hệ điều hành

thời gian thực. Lúc này, nhân hệ điều hành

thực hiện việc cấp phát bộ nhớ và chuyển

CPU cho các luồng thực thi. Còn các tiến trình

người dùng sử dụng các chức năng chính như

hệ thống file, giao diện mạng lưới,… Nói

chung, kiến trúc này thường được áp dụng

trong các hệ thống mà việc chuyển đổi và giao

tiếp giữa các tác vụ là nhanh.

Lập trình nhúng căn bản 13

Page 14: LT Nhúng Căn Bản: Chương 2

Kiến trúc phần mềm nhúng

Nhân ngoại (Exokernel)

◦ Nhân ngoại (exokernel) tiến hành giao tiếp

hiệu quả bằng cách sử dụng các lời gọi

chương trình con thông thường. Phần cứng và

toàn bộ phần mềm trong hệ thống luôn đáp

ứng và có thể được mở rộng bởi các ứng dụng.

Lập trình nhúng căn bản 14

Page 15: LT Nhúng Căn Bản: Chương 2

Kiến trúc phần mềm nhúng

Nhân khối (monolithic kernels)

◦ Trong kiến trúc này, một nhân đầy đủ với các

khả năng phức tạp được chuyển đổi để phù

hợp với môi trường nhúng. Điều này giúp các

nhà lập trình có được một môi trường giống

với hệ điều hành trong các máy để bàn như

Linux hay Microsoft Windows và vì thế rất

thuận lợi cho việc phát triển. Tuy nhiên, nó lại

đòi hỏi đáng kể các tài nguyên phần cứng làm

tăng chi phí của hệ thống.

Lập trình nhúng căn bản 15

Page 16: LT Nhúng Căn Bản: Chương 2

Kiến trúc phần mềm nhúng

Nhân khối (monolithic kernels)

◦ Một số loại nhân khối thông dụng là

Embedded Linux và Windows CE. Mặc dù chi

phí phần cứng tăng lên nhưng loại hệ thống

nhúng này đang tăng trưởng rất mạnh, đặc biệt

là trong các thiết bị nhúng mạnh như Wireless

router hoặc hệ thống định vị GPS.

Lập trình nhúng căn bản 16

Page 17: LT Nhúng Căn Bản: Chương 2

Kiến trúc phần mềm nhúng

Nhân khối (monolithic kernels)

◦ Lý do là:

Hệ thống này có cổng để kết nối đến các chip nhúng

thông dụng

Hệ thống cho phép sử dụng lại các đoạn mã sẵn có

phổ biến như các trình điều khiển thiết bị, Web

Servers, Firewalls, …

Việc phát triển hệ thống có thể được tiến hành với

một tập nhiều loại đặc tính, chức năng còn sau đó

lúc phân phối sản phẩm, hệ thống có thể được cấu

hình để loại bỏ một số chức năng không cần thiết.

Điều này giúp tiết kiệm được những vùng nhớ mà

các chức năng đó chiếm giữ.Lập trình nhúng căn bản 17

Page 18: LT Nhúng Căn Bản: Chương 2

Kiến trúc phần mềm nhúng

Nhân khối (monolithic kernels)

◦ Lý do là:

Hệ thống có chế độ người dùng để dễ dàng chạy các

ứng dụng và gỡ rối. Nhờ đó, qui trình phát triển

được thực hiện dễ dàng hơn và việc lập trình có tính

linh động hơn.

Có nhiều hệ thống nhúng thiếu các yêu cầu chặt chẽ

về tính thời gian thực của hệ thống quản lý. Còn

một hệ thống như Embedded Linux có tốc độ đủ

nhanh để trả lời cho nhiều ứng dụng. Các chức năng

cần đến sự phản ứng nhanh cũng có thể được đặt

vào phần cứng.

Lập trình nhúng căn bản 18

Page 19: LT Nhúng Căn Bản: Chương 2

Keil C

19Lập trình nhúng căn bản

Trình biên dịch

Debug

Mô phỏng cho các chip ARM, Cortex-M,

Cortex-R4, 8051, C166, và họ vi điều khiển

251

Ngôn ngữ Assembly, C/C++

Page 20: LT Nhúng Căn Bản: Chương 2

Keil C

20Lập trình nhúng căn bản

Page 21: LT Nhúng Căn Bản: Chương 2

Tạo project mới

Lập trình nhúng căn bản 21

Page 22: LT Nhúng Căn Bản: Chương 2

Chọn thiết bị

Lập trình nhúng căn bản 22

Page 23: LT Nhúng Căn Bản: Chương 2

Tạo file source code

Lập trình nhúng căn bản 23

Page 24: LT Nhúng Căn Bản: Chương 2

Lưu file source code

Lập trình nhúng căn bản 24

Page 25: LT Nhúng Căn Bản: Chương 2

Thêm file vào project

Lập trình nhúng căn bản 25

Page 26: LT Nhúng Căn Bản: Chương 2

Thêm file vào project

Lập trình nhúng căn bản 26

Page 27: LT Nhúng Căn Bản: Chương 2

Chương trình nháy đèn led

Lập trình nhúng căn bản 27

#include "regx51.h"

#define led1 P1_0

void delay(unsigned char time){

while(time--){

unsigned char j=125;

while(j--);

};

}

void main(){

while(1){

led1=1; delay(2000);

led1=0; delay(2000);

};

}

Page 28: LT Nhúng Căn Bản: Chương 2

Điều chỉnh thiết bị

Lập trình nhúng căn bản 28

Page 29: LT Nhúng Căn Bản: Chương 2

Tạo file Hex

Lập trình nhúng căn bản 29

Page 30: LT Nhúng Căn Bản: Chương 2

Biên dịch

Lập trình nhúng căn bản 30

Page 31: LT Nhúng Căn Bản: Chương 2

Debug

Lập trình nhúng căn bản 31

Page 32: LT Nhúng Căn Bản: Chương 2

Xem Port1

Lập trình nhúng căn bản 32

Page 33: LT Nhúng Căn Bản: Chương 2

Kết quả chạy Debug

Lập trình nhúng căn bản 33

Step F11

Step Over F10

Page 34: LT Nhúng Căn Bản: Chương 2

Tìm hiểu các ví dụ trong Keil C

Lập trình nhúng căn bản 34

Page 35: LT Nhúng Căn Bản: Chương 2

Ngôn ngữ Assembly

Sử dụng trực tiếp tập lệnh của bộ vi xử lý

nên quá trình điều hành chức năng rất sát

với cấu trúc phần cứng của hệ thống, tận

dụng triệt để khả năng của phần cứng mà

không một ngôn ngữ lập trình bậc cao nào

làm được.

Lập trình nhúng căn bản 35

Page 36: LT Nhúng Căn Bản: Chương 2

Ngôn ngữ Assembly

Có tốc độ thực hiện nhanh hơn nhiều so

với các ngôn ngữ bậc cao. Do vậy nó rất

thích hợp với các chức năng yêu cầu thời

gian thực chẳng hạn như thao tác với các

tín hiệu biến đổi nhanh.

Lập trình nhúng căn bản 36

Page 37: LT Nhúng Căn Bản: Chương 2

Ngôn ngữ Assembly

Các chương trình viết bằng ngôn ngữ

Assembly phải được dịch ra ngôn ngữ

máy (dạng nhị phân) vì đây là dạng duy

nhất mà hệ vi xử lý có thể hiểu được. Có

nhiều chương trình biên dịch nhưng thông

dụng nhất hiện nay Macro Assembler của

hãng Microsoft và Turbo Assembler của

hãng Borland.

Lập trình nhúng căn bản 37

Page 38: LT Nhúng Căn Bản: Chương 2

Ngôn ngữ Assembly

Bộ ký tự của Assembly

◦ Các chữ cái latin: 26 chữ hoa A-Z, 26 chữ

thường a-z.

◦ Các chữ số thập phân: „0‟ - „9‟

◦ Các ký hiệu phép toán, các dấu chấm câu và

các ký hiệu đặc biệt: + - * / @ ? $ , . : [ ] ( ) <

> { } & % ! \ # v.v...

◦ Các ký tự ngăn cách: space và tab

Lập trình nhúng căn bản 38

Page 39: LT Nhúng Căn Bản: Chương 2

Ngôn ngữ Assembly

Từ khóa

◦ Từ khóa là các từ của riêng Assembly như tên

các thanh ghi, tên lệnh dạng gợi nhớ của bộ vi

xử lý, tên toán tử... Các từ khóa này đòi hỏi

người lập trình phải dùng đúng như Assembly

quy định. Các từ khóa có thể viết bằng chữ

hoa hoặc chữ thường đều được.

Lập trình nhúng căn bản 39

Page 40: LT Nhúng Căn Bản: Chương 2

Ngôn ngữ Assembly

Tên tự đặt

◦ Tên là một dãy ký tự dùng để biểu thị tên

hằng, tên biến, tên nhãn, tên chương trình con,

tên đoạn nhớ... Tên do người lập trình tự đặt

nhưng phải tuân theo quy tắc sau:

◦ Quy tắc đặt tên: Tên chỉ gồm chữ cái, chữ số

và một số́ ký tự đặc biệt như ? @ _ $ Chữ đầu

của tên bắt buộc phải là chữ cái. Trong tên

không có dấu cách. Tên có thể dài từ 1 đến 35

ký tự.

Lập trình nhúng căn bản 40

Page 41: LT Nhúng Căn Bản: Chương 2

Ngôn ngữ Assembly

Cấu trúc một lệnh Assembly

◦ Một chương trình Assembly bao gồm các

dòng lệnh, một dòng lệnh có thể là một lệnh

thật dưới dạng gợi nhớ của bộ vi xử lý hoặc

một hướng dẫn cho chương trình dịch

(assembler directive, đôi khi gọi là lệnh giả).

Lập trình nhúng căn bản 41

Page 42: LT Nhúng Căn Bản: Chương 2

Ngôn ngữ Assembly

Một dòng lệnh của Assembly có thể có

những trường sau (không nhất thiết phải

có đủ các trường):

Tên Mã lệnh Các toán hạng Chú giải

Ví dụ:

LAP: MOV AH,[BX] ; Copy nội dung

của ô nhớ có địa chỉ DS:BX vào AH

Lập trình nhúng căn bản 42

Page 43: LT Nhúng Căn Bản: Chương 2

Ngôn ngữ Assembly

Xem tài liệu

Lập trình nhúng căn bản 43

Page 44: LT Nhúng Căn Bản: Chương 2

Đề tài

Lập trình cho vi điều khiển 8051

Lập trình cho ARM

Tìm hiểu ngôn ngữ Assembly

Hệ điều hành thời gian thực RTOS

Hệ điều hành nhúng

Lập trình nhúng căn bản 44

Page 45: LT Nhúng Căn Bản: Chương 2

Tài liệu tham khảo

John Catsoulis, Designing Embedded

Hardware, O'Reilly, 2005

http://www.keil.com

http://www.dientuvietnam.net

Lập trình nhúng căn bản 45

Page 46: LT Nhúng Căn Bản: Chương 2

Q/A

Lập trình nhúng căn bản 46