Mẫu tăng tốc độ I / O Arduino

Thật đơn giản để quên, tuy nhiên Arduino không sử dụng C ++. Thông thường, phần C ++ nằm trong các thư viện cũng như khung cũng như nhiều người chỉ có xu hướng mã hóa các chương trình chính của họ bằng cách sử dụng kiểu C chỉ cần sử dụng các đối tượng thư viện như phần mở rộng ngôn ngữ C. [Fredllll] Gần đây gần đây đã tạo ra một thư viện mẫu thiết kế để tăng tốc độ I / O của Arduino cũng như ông đã chia sẻ nó trên GitHub.

Nếu bạn đã từng làm bất cứ điều gì chuyên ngành với Arduino, rất có thể bạn hiểu rằng trong khi DigitalWrite tiện dụng, nhưng nó thực hiện rất nhiều công việc đằng sau hậu trường để đảm bảo pin là cấu hình cũng như điều này thêm chi phí cho mỗi cuộc gọi. [Các phiên bản mẫu thiết kế của Fredlllll có thể chuyển đổi chỉ định mã PIN trong hai chu kỳ. Bạn có thể cắt một nửa nếu bạn không ngại làm phiền các chân chỉ định của các chân khác trên cùng một cổng.

Bạn có thể sử dụng một hằng số để bật mã PIN, như thế này:

Chuyển đổi <1> ();
Nếu bạn không muốn sử dụng số ma thuật (và thông minh), bạn có thể xác định một hằng số:

const uint8_t ledpin = 1;
chuyển đổi ();
Bởi vì bạn rất có thể muốn thực hiện một số thời gian thanh lịch, cũng có một mẫu thiết kế nop cho phép bạn trì hoãn một số chu kỳ. Dưới đây là một số mã kiểm tra từ reddit tạo ra sóng vuông 1,3 MHz, ví dụ:

const uint8_t mypin = 5;
vòng lặp void () {
cli (); // Vô hiệu hóa ngắt khi chúng sẽ làm hỏng thời gian
làm {
SwitchOnBexclusive (); // 1 chu kỳ
nop <5> (); // 5 chu kỳ
swifyoffportofpin (); // 1 chu kỳ
nop <3> (); // 3 chu kỳ
} Trong khi (1) // Nhảy lại để làm là 2 chu kỳ
Không
Rõ ràng, đây cũng không phải là mức tối đa, bởi vì có tám chu kỳ trì hoãn trong vòng lặp.

Bạn không yêu cầu hiểu nhiều về các mẫu để sử dụng thư viện này, tuy nhiên nếu bạn muốn hiểu thêm, chúng tôi đã bao gồm chúng trong quá khứ. Chúng tôi đã lưu ý trước đó, DigitalWrite chậm hơn khoảng năm mươi lần so với quyền truy cập cổng trực tiếp, cũng như các hoạt động I / O khác không tốt hơn nhiều. Sẽ rất hấp dẫn khi kiểm tra xem các mẫu có thể làm cho các hoạt động khác hiệu quả hơn nhiều.

Back to top