Bạn có thể sử dụng arduinos
Nó được thiết kế cho môi trường Arduino. Các tính năng:
- Chỉ phân bổ tĩnh (không malloc/mới)
- Hỗ trợ chuyển đổi ngữ cảnh khi trì hoãn thực hiện
- Thực hiện semaphores
- Nhẹ, cả CPU và bộ nhớ
Tôi sử dụng nó khi Tôi cần phải nhận lệnh mới từ bluetooth/mạng/nối tiếp trong khi thực hiện các lệnh cũ và các lệnh cũ có sự chậm trễ trong chúng. Một sợi là sợi sever mà không vòng lặp sau:
while (1) {
while ((n = Serial.read()) != -1) {
// do something with n, like filling a buffer
if (command_was_received) {
arduinos_create(command_func, arg);
}
}
arduinos_yield(); // context switch to other threads
}
khác là thread lệnh đó thực hiện lệnh:
int command_func(void* arg) {
// move some servos
arduinos_delay(1000); // wait for them to move
// move some more servos
}
Tôi không thể đồng ý với điều này: "Cách tốt nhất là tạo các chức năng của riêng bạn và tránh đặt quá nhiều mã thực trong vòng trống mặc định" - không quan trọng liệu mã có nằm trong vòng lặp hay trong chức năng của riêng, nếu nó được * gọi * từ vòng lặp, nó khá nhiều điều tương tự thời gian khôn ngoan (cộng với một chức năng nhỏ gọi trên không) –
@MartinThompson Tôi không nghĩ rằng ông đã viết về nó thời gian khôn ngoan. Tôi nghĩ rằng anh ta đang đề cập đến tổ chức chức năng, thực tế là nó thực tế hơn nhiều để sắp xếp lại mã sau này (thêm TimedAction hoặc ArduinoThread sau này vào cùng một mã, ví dụ). – FrancescoMM
@FrancescoMM: cảm ơn - Tôi đã không đọc nó theo cách đó, nhưng bây giờ bạn nhắc đến nó, có lẽ đó là ý nghĩa của OP! Tôi nghĩ rằng đề cập đến "thời gian" trong câu đầu tiên thông qua tôi. –