pw_async_basic#

Unstable

This module includes basic implementations of pw_async’s Dispatcher and FakeDispatcher.

API#

Moved: pw_async_basic

Usage#

First, set the following GN variables:

pw_async_TASK_BACKEND="$dir_pw_async_basic:task"
pw_async_FAKE_DISPATCHER_BACKEND="$dir_pw_async_basic:fake_dispatcher"

Next, create a target that depends on //pw_async_basic:dispatcher:

pw_executable("hello_world") {
  sources = [ "hello_world.cc" ]
  deps = [
    "//pw_async_basic:dispatcher",
  ]
}

Next, construct and use a BasicDispatcher.

#include "pw_async_basic/dispatcher.h"

void DelayedPrint(pw::async::Dispatcher& dispatcher) {
  dispatcher.PostAfter([](auto&){
     printf("hello world\n");
  }, 5s);
}

int main() {
  pw::async::BasicDispatcher dispatcher;
  DelayedPrint(dispatcher);
  dispatcher.RunFor(10s);
  return 0;
}

Size Report#

Label

Segment

Delta

Construct a task

FLASH

-4

__bi_84

-2

pw::containers::internal::IntrusiveForwardListItem::DoGetPrevious()

+36

main

+8

vClearInterruptMaskFromISR

NEW

+44

pw::async::backend::NativeTask::NativeTask()

NEW

+24

pw::containers::internal::IntrusiveListItemBase<>::unlist()

NEW

+20

fit::internal::target<>::ops

NEW

+20

pw::async::backend::NativeTask::~NativeTask()

NEW

+20

pw::containers::internal::IntrusiveListItemBase<>::~IntrusiveListItemBase()

NEW

+18

pw::containers::internal::LegacyIntrusiveList<>::Item::~Item()

NEW

+12

pw::async::Task::Task()

NEW

+6

fit::internal::inline_trivial_target_move<>()

NEW

+4

fit::internal::target<>::invoke()

NEW

+2

fit::internal::inline_target_get()

+208