Upload
ck47ht
View
129
Download
6
Embed Size (px)
DESCRIPTION
LậptrìnhnhúngvớiKeilCNộidungPhầnmềmnhúngLàmviệcvớiKeilCNgônngữAssembly
Citation preview
Lập trình nhúng với Keil C
GV: ThS. Phan Nguyệt Minh
http://sites.google.com/site/laptrinhnhungcanban
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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++
Keil C
20Lập trình nhúng căn bản
Tạo project mới
Lập trình nhúng căn bản 21
Chọn thiết bị
Lập trình nhúng căn bản 22
Tạo file source code
Lập trình nhúng căn bản 23
Lưu file source code
Lập trình nhúng căn bản 24
Thêm file vào project
Lập trình nhúng căn bản 25
Thêm file vào project
Lập trình nhúng căn bản 26
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);
};
}
Điều chỉnh thiết bị
Lập trình nhúng căn bản 28
Tạo file Hex
Lập trình nhúng căn bản 29
Biên dịch
Lập trình nhúng căn bản 30
Debug
Lập trình nhúng căn bản 31
Xem Port1
Lập trình nhúng căn bản 32
Kết quả chạy Debug
Lập trình nhúng căn bản 33
Step F11
Step Over F10
Tìm hiểu các ví dụ trong Keil C
Lập trình nhúng căn bản 34
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
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
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
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
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
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
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
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
Ngôn ngữ Assembly
Xem tài liệu
Lập trình nhúng căn bản 43
Đề 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
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
Q/A
Lập trình nhúng căn bản 46