Pluto-IDE is the professional development environment required to build, flash, and monitor firmware using the MagisV2 library on Pluto Drones.
Advanced task scheduling and timing utilities for real-time operations.
task_fn_ttypedef void (*task_fn_t)(void); // Function pointer for tasks
ScheduledFntypedef struct ScheduledFn {
task_fn_t task_function; // Function to execute
uint32_t interval_ms; // Execution interval in milliseconds
uint32_t last_run_ms; // Last execution time
bool repeat; // Whether task repeats
struct ScheduledFn *next; // Next task in linked list
} ScheduledFn;
Scheduler_Tasktypedef struct {
uint32_t _cookie; // Initialization guard
ScheduledFn *head; // Head of task list
} Scheduler_Task;
uint32_t micros(void) - Get current time in microsecondsuint32_t millis(void) - Get current time in millisecondsbool Scheduler_Add(Scheduler_Task *t, task_fn_t _task_function, uint32_t interval_ms, bool repeat) - Add taskbool Scheduler_Cancel(Scheduler_Task *t, task_fn_t _task_function) - Cancel taskvoid Scheduler_Clear(Scheduler_Task *t) - Clear all tasksvoid Execute_Scheduled(Scheduler_Task *t) - Execute scheduled tasksbool set(uint32_t time, bool repeat) - Configure interval (1-5000ms)void reset(void) - Reset interval timingbool check(void) - Check if interval elapsed// Basic timing
uint32_t startTime = micros();
// ... operation ...
uint32_t duration = micros() - startTime;
// Interval usage
Interval sensorUpdate;
Interval statusReport;
void loop() {
if (sensorUpdate.set(50, true)) { // Every 50ms
// Read sensors
}
if (statusReport.set(1000, true)) { // Every second
Monitor_Println("Status OK");
}
}
// Advanced scheduling
Scheduler_Task mainScheduler;
void sensorTask() {
uint32_t accel = Sensor_Get(Accelerometer, X);
Monitor_Print("Accel: ", accel);
}
void setupScheduler() {
Scheduler_Add(&mainScheduler, sensorTask, 100, true); // Every 100ms
}
void runScheduler() {
Execute_Scheduled(&mainScheduler);
}
