Cách thích hợp để làm cho ánh xạ pin thư viện cấu hình là gì?


8

Tôi đang làm việc với một số thư viện cung cấp API để tương tác với các chip phần cứng cụ thể (điều đó tạo ra các trình điều khiển này?). Tuy nhiên, các bảng hoặc tấm chắn tùy chỉnh khác nhau sẽ có chip được ánh xạ tới các chân khác nhau có nghĩa là thư viện cần được sửa đổi cho từng trường hợp. Cần sửa đổi thư viện không hoạt động tốt với Trình quản lý thư viện Arduino IDE.

Có các mẫu ưa thích / được đề xuất để hiển thị cấu hình này để thư viện không cần phải sửa đổi mỗi lần không?

Dưới đây là một ví dụ nơi nó được ghi lại phần nào cần thay đổi để phù hợp với bố cục pin của bảng của bạn.


Nhiều thư viện Arduino bình thường đã làm điều này - bắt đầu bằng cách tự làm quen với phương pháp đó, thậm chí từ góc độ người dùng.
Chris Stratton

Câu trả lời:


6

Phương pháp tôi sử dụng là cung cấp các chân làm tham số cho hàm tạo. Những số pin này được lưu trữ trong các biến để sử dụng sau này trong .begin()hàm và các nơi khác.

Hầu hết thời gian tôi sử dụng danh sách khởi tạo để giữ cho mọi thứ đơn giản. Ví dụ:

class Something {
    uint8_t _cs;
    uint8_t _dc;

    Something(uint8_t cs, uint8_t dc) : _cs(cs), _dc(dc) {}
    void begin();
};

void Something::begin() {
    pinMode(_cs, OUTPUT);
    pinMode(_dc, OUTPUT);
}

Something mySomething(10, 8);

6

Tôi sẽ sử dụng một trong hai khả năng sau:

Sử dụng các biến (lớp) và đặt chúng trong hàm tạo.

Ưu điểm:

  • Luôn khởi tạo
  • Dễ sử dụng (xây dựng và thiết lập pin cùng một lúc)

Sử dụng một phương pháp riêng (ví dụ: init).

Ưu điểm:

  • Có thể thay đổi linh hoạt

Nhận xét

Đối với cài đặt pin, chủ yếu là các mạch tĩnh được sử dụng nên cách tiếp cận đầu tiên có lẽ tốt hơn.

Đối với cài đặt, chủ yếu là phương pháp thứ hai là tốt hơn.

Nếu có nhiều chân liên quan (không có khả năng), hãy sử dụng cấu trúc hoặc lớp cài đặt pin riêng.

Macro

Những gì tôi sẽ không khuyên là macro. Khi người dùng cần tự thay đổi mã nguồn và các phiên bản mới được cài đặt, họ phải hợp nhất hoặc làm lại các thay đổi một lần nữa. Ưu điểm là mã (máy) ít hơn một chút, có thể nhanh hơn một chút và sử dụng bộ nhớ ít hơn một chút, nhưng cả ba khía cạnh đều tối thiểu.


2

tùy thuộc vào cách tiếp cận của bạn.

1) nếu bạn chỉ cung cấp các tệp nhị phân + tiêu đề, bạn sẽ phải thực hiện các biến số chân.

2) nếu bạn cung cấp mã nguồn và mong muốn người dùng biên dịch lại mã nguồn, hãy sử dụng macro.


2

Trong trường hợp bạn tránh các công cụ xây dựng C ++ thường là quá mức cần thiết trên Arduino, bạn có thể sử dụng #define(các macro giống như đối tượng).

Thích như vậy:

#define PIN_ONE 1
#define PIN_TWO 2

Bộ tiền xử lý sẽ thay thế liền mạch PIN_ONEbằng số 1 và PIN_TWOvới 2 giả sử các định nghĩa đó nằm trong .htệp tiêu đề thư viện . Điều này rất có thể sẽ mất ít tài nguyên nhất so với các giải pháp có thể khác.


Vấn đề là họ cần ở một nơi mà cả tệp .ino cũng như nguồn thư viện có thể đến được với họ. Điều này thường có nghĩa là một tệp tiêu đề riêng biệt với mọi thứ yêu cầu.
Ignacio Vazquez-Abrams

Bạn có chắc không? Khá chắc chắn rằng tôi có thể thực hiện các chuyển đổi #define trong .ino và chúng được sử dụng trong các thư viện, nhưng tôi có thể sai.
Avamander

1
Nó có thể hoạt động nếu mã cho thư viện hoàn toàn nằm trong tiêu đề, nhưng không phải nếu nó ở một đơn vị biên dịch khác hoàn toàn.
Ignacio Vazquez-Abrams

Vâng, điều đó có ý nghĩa, không biết giới hạn chính xác, thêm từ chối trách nhiệm đó.
Avamander
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.