Nhiệm vụ FreeRTOS sẽ bị trì hoãn trong bao lâu?


7

Tôi đang làm việc trong một dự án AWS IoT nơi MQTT thường xuyên, gọi lại lambdas và mọi thứ khác ngoài khởi tạo đều nằm trong một nhiệm vụ được tạo bởi xTaskCreatePinnedToCore().

Nhiệm vụ này thực hiện một số việc: kết nối với AWS, đăng ký các chủ đề và sau đó nó đi vào một vòng lặp vô hạn nơi nó gọi aws_iot_mqtt_yieldkiểm tra lỗi, v.v ... Trong mỗi vòng lặp tôi cũng gọi : vTaskDelay(10 / portTICK_RATE_MS);. Đó là từ một dự án ví dụ trong đó độ trễ là 1 giây và sau đó tôi giảm xuống còn 10ms. Độ trễ 'khỏe mạnh' là gì? Tại sao chúng ta thậm chí cần một sự chậm trễ ở đây? Cảm ơn!

Câu trả lời:


7

Bạn không cần trì hoãn, hoặc ít nhất là không phải thức dậy.

Nếu, như bạn đề xuất, bạn đã khởi tạo một chuỗi được kích hoạt bởi một cuộc gọi lại thì không cần phải có một vòng lặp chính. Trừ khi vòng lặp đó đang làm một cái gì đó hữu ích mỗi khi nó chạy, nó chỉ sử dụng thời gian CPU và năng lượng điện mỗi khi nó thức dậy và làm chậm lại.

Tôi sẽ đặt độ trễ của giá trị số nguyên tối đa, để trì hoãn hiệu quả mãi mãi hoặc đơn giản là chấm dứt chuỗi đó.

Nếu có một cái gì đó hữu ích trong vòng lặp, thì độ trễ hợp lý sẽ phụ thuộc hoàn toàn vào thứ đó là gì.

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.