• Không có kết quả nào được tìm thấy

Lập trình nhúng

N/A
N/A
Protected

Academic year: 2023

Chia sẻ "Lập trình nhúng"

Copied!
113
0
0

Loading.... (view fulltext now)

Văn bản

Tổng quan

  • Mở đầu
  • Khái niệm về hệ nhúng
  • Vai trò của hệ thống nhúng trong sự phát triển của lĩnh vực công nghệ cao
  • Đặc tính, phương pháp thiết kế và xu thế phát triển của các hệ nhúng
  • Môi trường thông minh
  • Các hệ điều hành nhúng và phần mềm nhúng
    • Hệ điều hành nhúng
    • Phần mềm nhúng

Trong các hệ thống tích hợp, hệ thống điều khiển tích hợp đóng vai trò rất quan trọng. Vào những năm 1930, các hệ thống tự động với camera cố định cơ học thường hoạt động chỉ với một chức năng xử lý. Các hệ thống tự động sử dụng rơle điện từ xuất hiện vào những năm 1940 xử lý khoảng 10 chức năng.

Vào những năm 1990, với sự phát triển của công nghệ phần cứng và phần mềm, các hệ thống điều khiển phân tán (DCS) xuất hiện với mức xử lý lên tới hàng trăm triệu (107). Hệ thống nhúng là hệ thống kết hợp tối ưu phần cứng và phần mềm. Thiết kế hệ thống nhúng là thiết kế phần cứng và phần mềm phối hợp.

Hiện nay, hầu hết các hệ thống tự động hóa thiết kế (CAD) thường dành cho thiết kế phần cứng. Ở Mỹ, có nhiều chương trình hỗ trợ của chính phủ cho việc phát triển hệ thống và phần mềm nhúng.

Hình 1.1 Một số ví dụ về các thống nhúng thông dụng
Hình 1.1 Một số ví dụ về các thống nhúng thông dụng

Lý thuyết thiết kế hệ thống nhúng

  • Quy trình thiết kế Top-Down
    • Pha phân tích
    • Pha thiết kế nguyên lý
    • Pha thiết kế kỹ thuật
    • Pha xây dựng hệ thống
    • Pha kiểm tra
  • Quy trình thiết kế Bottom-Up
  • Đặc tả hệ thống
    • Khái niệm đặc tả (specification)
    • Tại sao cần đặc tả
    • Phân loại các kỹ thuật đặc tả
    • Ứng dụng và ưu việt khỉ sử dụng đặc tả
    • Phương pháp đặc tả sử dụng “Máy trạng thái hữu hạn FSM”
  • Các phương pháp biểu diễn thuật toán
    • Ngôn ngữ tự nhiên
    • Dùng lưu đồ
    • Mã giả

Ví dụ: Xét bài toán thiết kế hệ thống điều khiển cho cửa tự động. Đầu tiên chúng ta cần xây dựng sơ đồ mô hình tổng quát của toàn bộ hệ thống. Với quy trình này, giai đoạn thiết kế kỹ thuật và thử nghiệm sau khi xây dựng hệ thống là quan trọng nhất.

Vì vậy, toàn bộ quy trình làm việc của hệ thống có thể được đọc qua thông số kỹ thuật. Đặc tả yêu cầu: Mục tiêu là mô tả đầy đủ và chi tiết các thỏa thuận giữa người dùng trong tương lai và người thiết kế hệ thống. Đặc tả kiến ​​trúc hệ thống: Để mô tả sự thỏa thuận giữa người thiết kế và người thực hiện.

Thông số kỹ thuật không chính thức: Sử dụng một trong các công cụ sau để mô tả hệ thống o Ngôn ngữ tự nhiên tự do. Các kỹ thuật đặc tả thường được sử dụng trong việc phát triển các hệ thống điều khiển.

Hình 2.2 Sơ đồ tổng quát của một hệ thống điều khiển động cơ
Hình 2.2 Sơ đồ tổng quát của một hệ thống điều khiển động cơ

Cấu trúc phần cứng

Cấu trúc tổng quát của hệ thống nhúng

  • Kiến trúc cơ bản
  • Cấu trúc phần cứng

Lập trình nhúng đại học 24 Embedded VXL/VDK là một loại rất điển hình và được sử dụng rộng rãi hiện nay. Chúng ra đời và được sử dụng sau sự phát triển của chip xử lý ứng dụng cho máy tính. Vì đối tượng ứng dụng là thiết bị nhúng nên cấu trúc cũng được điều chỉnh phù hợp với ứng dụng.

Hiện tại chúng ta có thể thấy các họ điều khiển vi xử lý của nhiều nhà sản xuất như Intel, Atmel, Motorola, Infineon. Về cấu trúc, chúng tương tự như các chip xử lý được phát triển cho PC, nhưng ở mức độ đơn giản hơn nhiều về chức năng và tài nguyên. Về cấu trúc, chip vi điều khiển là chip vi xử lý được tích hợp các thiết bị ngoại vi.

Thiết bị ngoại vi thường là khối chức năng chung cho các thiết bị ngoại vi, như bộ định thời, bộ đếm, bộ chuyển đổi A/D, giao diện song song và nối tiếp... Mức độ tích hợp thiết bị ngoại vi cũng khác nhau tùy theo mục đích sử dụng. Ứng dụng mục tiêu sẽ có thể tìm thấy chip chính xác. Trên thực tế, đối với các ứng dụng yêu cầu mức độ tích hợp cao, giải pháp tích hợp trên chip sẽ được sử dụng; mặt khác, hầu hết các chip đều cung cấp các giải pháp mở rộng ngoại vi để đáp ứng nhiều ứng dụng.

Một số nền tảng phần cứng thông dụng

  • Vi điều khiển Atmega8
  • Kit Arduino Uno R3
  • Vi điều khiển MSP430G2553
  • Kit MSP430 Launchpad
  • Vi điều khiển PIC18F2550
  • Kit PIC18F2550 Pinguino

Bài giảng Lập trình nhúng 29 - Để điều khiển vi điều khiển từ nguồn xung nhịp bên ngoài, chân XTAL2 ở chế độ rảnh, chân XTAL1 được nối với tín hiệu dao động ngoài. IOREF: Có thể đo điện áp hoạt động của vi điều khiển trên Arduino UNO trên chân này. Việc đặt điện áp trên 13V vào hộp RESET trên bo mạch có thể làm hỏng bộ vi điều khiển ATmega328.

Bộ nhớ Flash 32 KB: Hướng dẫn lập trình được lưu trữ trong bộ nhớ Flash của vi điều khiển. 2 KB cho SRAM (Bộ nhớ truy cập ngẫu nhiên tĩnh): Giá trị của các biến được khai báo trong quá trình lập trình được lưu trữ tại đây. Để lập trình, gửi lệnh và nhận tín hiệu từ mạch Arduino, nhóm phát triển của dự án này cũng đã cung cấp cho người dùng môi trường lập trình Arduino có tên Arduino IDE (Integrated Development Environment), như hình dưới đây.

Lập trình nhúng đọc CPU RISC 34 + 16 bit giúp thực hiện được nhiều ứng dụng, điều này cũng được phản ánh qua kích thước của mã lập trình. Lập trình bộ nhớ flash cho phép thay đổi mã linh hoạt trên phạm vi rộng. Bộ nhớ flash cũng có thể được lưu dưới dạng nhật ký dữ liệu. Nhưng msp430 bên trong hỗ trợ thạch anh lên đến 16 MHz, tùy thuộc vào cách điều này được chỉ định trong lập trình.

Bài giảng Lập trình nhúng 37 Sơ đồ khối các chân vào và ra trên bộ Launchpad MSP430. Để lập trình, gửi lệnh và nhận tín hiệu từ bộ công cụ, nhóm phát triển dự án này cũng cung cấp cho người dùng môi trường lập trình ngôn ngữ Arduino trên bộ công cụ Launchpad MSP430, được gọi là Energia IDE (Môi trường phát triển tích hợp), như sau: Hình bên dưới. Cổng nối tiếp đồng bộ chính MSSP (Master Synchronous Serial Port) ADC 10 bit, 13 đầu vào, thời gian thu thập dữ liệu có thể lập trình.

Nguồn điện 5V đơn để lập trình nối tiếp trên mạch qua 2 chân Mạch gỡ lỗi qua 2 chân. Bài giảng Lập trình nhúng 41 tốc độ nối tiếp lên tới 57600 baud, USB gốc, đọc và ghi EEPROM, truy cập ngắt. Để lập trình cũng như gửi lệnh và nhận tín hiệu từ kit, nhóm phát triển trong dự án này cũng đã cung cấp cho người dùng môi trường lập trình ngôn ngữ Arduino trên bộ PIC18F2550 Pinguino có tên Pinguino IDE (Integrated Development Environment) như sau: hình bên dưới.

Hình 3.3 Sơ đồ chân Atmega8  3.2.1.3 Sơ đồ khối của Atmega8
Hình 3.3 Sơ đồ chân Atmega8 3.2.1.3 Sơ đồ khối của Atmega8

Phần mềm nhúng

Đặc điểm phần mềm nhúng

Lập trình nhúng với ngôn ngữ Arduino

  • Cấu trúc
    • setup()
    • loop()
    • Cú pháp mở rộng
    • Toán tử số học
    • Toán tử so sánh
    • Toán tử logic
    • Toán tử hợp nhất
    • Cấu trúc điều khiển
  • Giá trị
    • Hằng số
    • Kiểu dữ liệu
    • Chuyển đổi kiểu dữ liệu
    • Phạm vi của biến và phân loại biến
    • Hàm hỗ trợ sizeoff()
  • Hàm và thủ tục
    • Nhập xuất Digital
    • Nhập xuất Analog
    • Hàm thời gian
    • Hàm toán học
    • Hàm lượng giác
    • Sinh số ngẫu nhiên
    • Nhập xuất nâng cao
    • Bits và Bytes
    • Ngắt

Nếu biểu thức điều kiện trả về TRUE, [câu lệnh 1] sẽ được thực thi, nếu không, [câu lệnh 2] sẽ được thực thi. Trong lập trình Arduino, CAO là hằng số có giá trị nguyên là 1. Trong lập trình Arduino, THẤP là hằng số có giá trị nguyên là 0.

Có thể thấy, các hàm kiểu này không sử dụng mệnh đề “return” để trả về giá trị của hàm. Có thể dễ dàng nhận thấy kiểu dữ liệu này không chứa các giá trị âm so với kiểu int. Hàm char() có nhiệm vụ chuyển đổi kiểu dữ liệu của một giá trị thành char.

Hàm byte() chịu trách nhiệm chuyển đổi kiểu dữ liệu của một giá trị thành byte. Hàm int() có nhiệm vụ chuyển đổi kiểu dữ liệu của một giá trị thành int. Hàm word() có nhiệm vụ chuyển đổi kiểu dữ liệu của một giá trị thành word.

Hàm long() chịu trách nhiệm chuyển đổi kiểu dữ liệu của một giá trị thành long. Hàm float() có nhiệm vụ chuyển đổi kiểu dữ liệu của một giá trị thành float. Nếu bạn thay đổi giá trị của một biến không đổi, trình biên dịch sẽ báo lỗi.

Sau đây là ví dụ về đọc từng giá trị từ một chuỗi nhất định. Bài giảng Lập trình nhúng 80 Tín hiệu xuất ra chân số, với 2 giá trị: CAO hoặc THẤP. Ví dụ: micros() trả về giá trị 10, có nghĩa là chương trình đã chạy được 40 micro giây.

Tuy nhiên, các giá trị nó trả về luôn được biết trước (cố định). Lưu ý rằng: chuỗi giá trị được hàm Random() trả về đã thay đổi. Với cùng một phạm vi giá trị được truyền vào hàm Random(), hàm RandomSeed() xác định thứ tự các giá trị mà Random() trả về.

Vì vậy, nếu dữ liệu đầu vào là chuỗi 16 bit, highByte() trả về 8 bit đầu tiên; nếu dữ liệu đầu vào là một chuỗi 8 bit hoặc nhỏ hơn, highByte() trả về giá trị 0.

Tài liệu tham khảo

Tài liệu liên quan