Nhúng C cho ô tô tự lái Phần 1

May 10 2022
Loại số nguyên Vì vậy, bạn đã sẵn sàng viết mã nhúng cho ô tô tự lái như WAYMO hoặc bộ điều nhiệt thông minh như Nest. Bạn muốn viết mã sẽ chuyển đến một bộ xử lý cụ thể để phân tích dữ liệu cảm biến nhất định để đưa ra quyết định như rẽ phải hoặc bật nhiệt.

Loại số nguyên

Ảnh của David von Diemar trên Unsplash

Vì vậy, bạn đã sẵn sàng viết mã nhúng cho ô tô tự lái như WAYMO hoặc bộ điều nhiệt thông minh như Nest. Bạn muốn viết mã sẽ chuyển đến một bộ xử lý cụ thể để phân tích dữ liệu cảm biến nhất định để đưa ra quyết định như rẽ phải hoặc bật nhiệt.

Hãy ngồi lại và suy nghĩ sâu hơn một chút. Hãy chia nhỏ vấn đề. Hãy chỉ tập trung vào một phần cụ thể của vấn đề.

Ví dụ, tôi sẽ chỉ nói về một vấn đề duy nhất sẽ xử lý vị trí hiện tại của xe tự lái mà trong thuật ngữ kỹ thuật được gọi là ĐỊA ĐIỂM. Mà theo kinh nghiệm của tôi là vấn đề khó nhất về mặt kỹ thuật.

Trong bài toán bản địa hóa, có nhiều dữ liệu cảm biến giúp đưa ra quyết định về vị trí hiện tại, hướng mà nó đang hướng tới cũng như tư thế (JUMPING như TRX). Chúng ta sẽ tập trung suy nghĩ rằng chiếc xe sẽ tiến về phía trước và chúng ta chỉ cần biết nó đã di chuyển về phía trước bao nhiêu.

Ảnh của Jorgen Hendriksen trên Unsplash

Hãy đơn giản hóa vấn đề hơn. Chúng tôi sẽ cho rằng sẽ không xảy ra bất kỳ vụ trượt lốp nào như cách lái xe của những gã hói trong NHANH CHÓNG & NỔI TIẾNG. Và cũng giả sử lốp hoàn toàn tròn và mỗi vòng quay của lốp được chuyển thành chu vi có thể tự tin cung cấp cho bạn quãng đường chúng ta đã di chuyển về phía trước.

Cho trước, chúng ta biết kích thước lốp, chúng ta chỉ cần biết lốp quay bao nhiêu vòng. Để làm được điều đó, chúng tôi có một bộ cảm biến được gọi là bộ mã hóa, theo dõi chuyển động quay của bánh xe.

Ảnh của Bechir Kaddech trên Unsplash

Bạn có thể coi bộ mã hóa là bánh xe đạp. Trong ảnh, nó cho thấy các chấu trong bánh xe. Bạn có thể thấy từ hình ảnh rằng có khoảng 48 nan hoa cho bánh xe.

Bây giờ nếu tôi trở thành một người nhỏ bé bị cắm vào phía trước của xe đạp, và tôi có tầm nhìn đơn hướng giống như một con mắt bị mắc kẹt trên một con dê, tôi chỉ có thể nhìn thấy một người nói tại một thời điểm.

Nếu tôi muốn xác định bánh xe quay bao nhiêu lần mỗi phút, tôi sẽ ở đó với đồng hồ bấm giờ và đếm số lần tôi thấy đã nói. Giả sử tôi đếm được 960 người nói trong một phút. Điều đó có nghĩa là, bánh xe của tôi đã quay 20 vòng.

Giả sử chu vi bánh xe của tôi là 2200 mm. Điều đó có nghĩa là xe đạp của tôi đã đi được quãng đường 2200 * 20 = 44000 mm hay 44 m. Đây chính xác là cách một bộ phân giải / mã hóa vị trí góc trong xe.

Nhưng ngoài đời, không có tôi ngồi ở ngã ba hay ở trục xe đếm số. Một bộ điều khiển nhúng sẽ làm điều đó cho chúng ta.

Bây giờ chúng ta hãy suy nghĩ xem xét thiết kế quan trọng cho điều này là gì. Trong bộ điều khiển nhúng của tôi, tôi muốn lưu trữ dữ liệu này. Bây giờ tôi nên định nghĩa nó như thế nào?

Vì vậy, chúng ta nên luôn chọn kiểu dữ liệu cho các biến quan tâm của mình bằng cách sử dụng các ma trận hiệu suất chính sau đây cho ứng dụng nhúng

  1. Ký ức:

2. Lưu trữ:

Chúng ta có thể cần sử dụng biến mà chúng ta đang khai báo trong một chương trình nhỏ hơn để thực hiện một việc gì đó. Vì vậy, nếu chúng ta sử dụng một biến lớn, kích thước chương trình / tệp thực thi sẽ lớn hơn và ngốn bộ nhớ.

3. Sức mạnh xử lý:

Logic tương tự như trước đây. Nếu bạn xác định loại biến lớn hơn, bộ xử lý sẽ mất nhiều thời gian hơn để xử lý bất cứ thứ gì liên quan đến biến. Vì vậy, một lần nữa, nhỏ hơn bạn có thể phù hợp là tốt hơn.

4. Phần cứng cụ thể:

Đôi khi, phần cứng mà bạn đang sử dụng, có thể bị hạn chế về kiểu dữ liệu. Bạn cần phải kiểm tra điều đó. Bản đồ bộ nhớ được sử dụng trong thanh ghi cho bộ phần cứng cụ thể đó có thể là một hạn chế trong khi chọn kiểu dữ liệu cho biến của bạn.

Bây giờ chúng ta hãy xem câu lệnh trên cho một kiến ​​trúc cụ thể. Nếu chúng ta sử dụng Kiến trúc bộ lệnh (ISA) 32-bit cho dữ liệu bộ mã hóa của mình, chúng ta cần tập trung vào loại bộ xen kẽ mà nó có thể hỗ trợ.

Kiến trúc này có thể hỗ trợ short / int ngắn có kích thước điển hình là 16 bit, phạm vi từ 0 đến 65,535 đối với không có dấu và -32,768 đến 32767 đối với có dấu.

Kiến trúc này cũng có thể hỗ trợ kiểu dữ liệu int có thể lên đến 32 bit. Điều đó làm cho phạm vi từ 0 đến 4,294,967,296 cho chưa dấu hoặc khoảng -2,147e9 đến + 2,147e9 cho có dấu.

Photo by Science ở chế độ HD trên Unsplash

Giả sử bộ mã hóa chúng tôi đang sử dụng để cảm biến tốc độ bánh xe có chứa chính xác như các nan hoa của bánh xe đạp. Vì vậy, chúng ta cần đếm đến 48. Nhưng bạn có muốn sử dụng trực tiếp int hay short cho cảm biến tốc độ bánh xe của chúng ta không. Ngay cả khi chúng tôi sử dụng short int, tôi vẫn sử dụng nhiều bộ nhớ hơn mức tôi cần sử dụng. Ngoài ra, nếu tôi dự định thực hiện bất kỳ quá trình xử lý nào bằng dữ liệu này (ví dụ: lấy mẫu để truyền thông), tôi sẽ sử dụng nhiều bộ nhớ hơn cũng như sức mạnh xử lý. Trông giống như một phản ứng dây chuyền phải không?

Vì vậy, để ngăn chặn sự bùng nổ của việc sử dụng bộ nhớ, chúng ta có thể làm một điều gì đó khác. Và cảm ơn các nhà khoa học và các chuyên gia kiến ​​trúc ban đầu. Chúng ta có thể sử dụng thư viện <stdint.h> . Đi kèm với các phần thưởng sau:

  1. Nó có thể giúp chúng ta xác định độ rộng chính xác của biến int .
  2. Điều này cũng giúp chúng tôi về tính di động
  3. Cũng giúp chúng tôi dễ đọc

Chúng tôi chỉ đơn giản xác định nó bằng cách sử dụng int8_t. Nếu số chúng ta cần đếm vượt quá 128 nhưng vẫn dưới 255, chúng ta vẫn có thể sử dụng bộ xen 8 bit bằng cách sử dụng kiểu dữ liệu uint8_t. Bằng cách này, chúng tôi tiết kiệm bộ nhớ của bộ xử lý cũng như các loại đạn khác cho các tác vụ phức tạp khác.

Vì vậy, đây là các loại khác nhau mà bạn có thể sử dụng

int8_t, int16_t, int32_t, int64_t, uint8_t, uint16_t, uint32_t, uint64_t

Tóm lại, hãy luôn chú ý đến những điều sau trong khi quyết định kiểu dữ liệu cho ứng dụng nhúng của bạn.

  1. Luôn sử dụng các loại di động, có kích thước cố định để có độ rõ ràng và chắc chắn
  2. Tham khảo ý kiến ​​của nhân viên hệ thống hoặc sử dụng vật lý để ước tính phạm vi yêu cầu và loại nhỏ nhất.

© Copyright 2021 - 2022 | vngogo.com | All Rights Reserved