Các lựa chọn thay thế nhanh nhất để gọi các chức năng Arduino là gì digitalread()
và là digitalwrite()
gì? Các giải pháp dành riêng cho chip hoặc dành riêng cho chip đều được chấp nhận.
Các lựa chọn thay thế nhanh nhất để gọi các chức năng Arduino là gì digitalread()
và là digitalwrite()
gì? Các giải pháp dành riêng cho chip hoặc dành riêng cho chip đều được chấp nhận.
Câu trả lời:
Truy cập các cổng kỹ thuật số trực tiếp!
3 phương pháp tôi đã thử nghiệm là
- kỹ thuật sốWrite (pin, THẤP); kỹ thuật sốWrite (pin, CAO);
- CLR (PORTB, 0); THIẾT LẬP (PORTB, 0);
- PORTB | = _BV (0); PORTB & = ~ (_BV (0));
[...]
Như bạn có thể thấy, digitalWrite mất khoảng 56 chu kỳ để hoàn thành, trong khi địa chỉ Cổng trực tiếp mất 2 chu kỳ. Đó là một sự khác biệt lớn về thời gian đối với các chương trình có nhiều hoạt động IO!
Thư viện này là một lựa chọn tốt: http://code.google.com.vn/p/digitalwritefast/
Như đề xuất ở trên, truy cập các cổng kỹ thuật số trực tiếp. Nhưng với phong cách!
Bằng cách viết các giá trị được mã hóa trực tiếp vào các thanh ghi phần cứng, bạn mất khả năng đọc và tính di động.
Tôi đã xuất bản trên Github một công cụ mà tôi gọi là HWA cho phép bạn sử dụng giao diện hướng đối tượng đến phần cứng không yêu cầu trình biên dịch C ++ và tạo mã nhị phân hiệu quả cao.
HWA có ở đó: https://github.com/duparq/hwa
Mọi người tại Arduino.SE đã thảo luận và thử nghiệm điều này. Hóa ra, digitalWriteFast()
không có nhiều cải thiện so với thường xuyên digitalWrite()
. Truy cập cổng trực tiếp, tuy nhiên, nhanh hơn khoảng 35-40 lần digitalWrite()
.
Sử dụng ChipKit Uno32. Nó nhanh hơn nhiều so với Arduinos dựa trên AVR. Nó cũng sẽ đối phó với các vấn đề thời gian của bạn.