diff --git a/.codespellrc b/.codespellrc index 4ed2e6b695cf6..14770824d320c 100644 --- a/.codespellrc +++ b/.codespellrc @@ -9,7 +9,6 @@ exclude-file = .codespell-ignore-lines skip = LICENSE, */CODEOWNERS, - */system/zbus/images/*, # Ignore seemingly misspelled words. # lowercase: case insensitive diff --git a/Documentation/applications/system/zbus/images/zbus_anatomy.svg b/Documentation/applications/system/zbus/images/zbus_anatomy.svg deleted file mode 100644 index e9bc6c79cefc9..0000000000000 --- a/Documentation/applications/system/zbus/images/zbus_anatomy.svg +++ /dev/null @@ -1,3 +0,0 @@ - - - diff --git a/Documentation/applications/system/zbus/images/zbus_observation_mask.svg b/Documentation/applications/system/zbus/images/zbus_observation_mask.svg deleted file mode 100644 index 4405a8f3e4aed..0000000000000 --- a/Documentation/applications/system/zbus/images/zbus_observation_mask.svg +++ /dev/null @@ -1,152 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/Documentation/applications/system/zbus/images/zbus_operations.svg b/Documentation/applications/system/zbus/images/zbus_operations.svg deleted file mode 100644 index 419cc6c3d5d5f..0000000000000 --- a/Documentation/applications/system/zbus/images/zbus_operations.svg +++ /dev/null @@ -1,49 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/Documentation/applications/system/zbus/images/zbus_overview.svg b/Documentation/applications/system/zbus/images/zbus_overview.svg deleted file mode 100644 index 24861bbbe3375..0000000000000 --- a/Documentation/applications/system/zbus/images/zbus_overview.svg +++ /dev/null @@ -1,3 +0,0 @@ - - - diff --git a/Documentation/applications/system/zbus/images/zbus_type_of_observers.svg b/Documentation/applications/system/zbus/images/zbus_type_of_observers.svg deleted file mode 100644 index 1bc29e3dadf16..0000000000000 --- a/Documentation/applications/system/zbus/images/zbus_type_of_observers.svg +++ /dev/null @@ -1,18 +0,0 @@ - - - - - - - - - - - - - - - - - - diff --git a/Documentation/applications/system/zbus/index.rst b/Documentation/applications/system/zbus/index.rst deleted file mode 100644 index ab7eac19cb63c..0000000000000 --- a/Documentation/applications/system/zbus/index.rst +++ /dev/null @@ -1,210 +0,0 @@ -========================== -``zbus`` ZBus message bus -========================== - -Port of the `zbus `_ -message bus to NuttX, built entirely on native NuttX primitives. ZBus -implements many-to-many communication through **channels** (typed shared -messages) observed by **observers**, keeping publishers and consumers -fully decoupled. - -.. figure:: images/zbus_overview.svg - :alt: zbus usage overview - :width: 75% - - A typical zbus application architecture. - -Channels and observers are defined statically, in any source file, with -declarative macros. The definitions are collected at link time through -iterable sections (see the Iterable Sections component documentation) -- -there is no runtime registration and no central list to maintain. - -.. figure:: images/zbus_anatomy.svg - :alt: zbus anatomy - :width: 70% - - ZBus anatomy: channels, observers and observations. - -Observer types -============== - -.. figure:: images/zbus_type_of_observers.svg - :alt: zbus observer types - :width: 70% - - The four observer types. - -======================== =================================================== -Type Behavior -======================== =================================================== -Listener Callback executed synchronously in the publisher - context (``ZBUS_LISTENER_DEFINE``). -Subscriber Receives channel references through a message - queue; waits with ``zbus_sub_wait()`` - (``ZBUS_SUBSCRIBER_DEFINE``). -Message subscriber Receives a *copy* of every published message, in - order; waits with ``zbus_sub_wait_msg()`` - (``ZBUS_MSG_SUBSCRIBER_DEFINE``, - ``CONFIG_ZBUS_MSG_SUBSCRIBER``). -Async listener Callback executed on a dedicated task with a - copy of the message - (``ZBUS_ASYNC_LISTENER_DEFINE``, - ``CONFIG_ZBUS_ASYNC_LISTENER``). -======================== =================================================== - -Runtime observers (``zbus_chan_add_obs()``/``zbus_chan_rm_obs()``, -``CONFIG_ZBUS_RUNTIME_OBSERVERS``), per-observation notification masks, -observer enable/disable, message validators and channel user data are -also supported. - -.. figure:: images/zbus_observation_mask.svg - :alt: zbus observation mask - :width: 75% - - Observer enable/disable and per-observation masks: disabling the - observer (b) silences every channel; masking observations (c, d) - silences individual channels. - -Example -======= - -The figure below shows the kind of decoupled architecture zbus enables: -every block only talks to channels, so each one can be replaced without -touching the others. - -.. figure:: images/zbus_operations.svg - :alt: zbus sensor-based application - :width: 85% - - A sensor-based application built on zbus. - -.. code-block:: c - - #include - - struct acc_msg - { - int x; - int y; - int z; - }; - - static void listener_cb(const struct zbus_channel *chan) - { - const struct acc_msg *msg = zbus_chan_const_msg(chan); - printf("x=%d y=%d z=%d\n", msg->x, msg->y, msg->z); - } - - ZBUS_LISTENER_DEFINE(acc_listener, listener_cb); - ZBUS_SUBSCRIBER_DEFINE(acc_subscriber, 4); - - ZBUS_CHAN_DEFINE(acc_chan, /* Name */ - struct acc_msg, /* Message type */ - NULL, /* Validator */ - NULL, /* User data */ - ZBUS_OBSERVERS(acc_listener, /* Observers, in */ - acc_subscriber),/* priority order */ - ZBUS_MSG_INIT(.x = 0, .y = 0, .z = 0)); - - /* Publisher: */ - - struct acc_msg msg = { 1, 10, 100 }; - zbus_chan_pub(&acc_chan, &msg, 1000); - - /* Subscriber thread: */ - - const struct zbus_channel *chan; - if (zbus_sub_wait(&acc_subscriber, &chan, ZBUS_FOREVER) == 0) - { - zbus_chan_read(chan, &msg, 500); - } - -A complete runnable example is available in ``apps/examples/zbus`` -(``CONFIG_EXAMPLES_ZBUS``), and a cmocka test suite covering the whole -API in ``apps/testing/zbus`` (``CONFIG_TESTING_ZBUS``). - -Not ported -========== - -The following Zephyr zbus features are **not available** in this port: - -* **Multi-domain proxy agent** (``CONFIG_ZBUS_PROXY_AGENT``): bridges - channels between domains/cores over IPC. Experimental upstream and - tied to the Zephyr IPC service; a NuttX equivalent would be built on - rpmsg and is left as future work. -* **Publishing from interrupt handlers**: the Zephyr original allows - ``zbus_chan_pub()`` from ISRs with ``K_NO_WAIT``. This port is a - userspace library and its primitives (semaphores, message queues, lazy - initialization) are not ISR-safe: interrupt handling belongs to the - driver, which should hand the data to a thread (the usual NuttX - pattern) that then publishes it. ``test_timer_driven_publisher`` in - ``apps/testing/zbus`` shows the pattern with a kernel timer interrupt - delivering a signal to a sampling thread. -* **Priority boost (Highest Locker Protocol)** - (``CONFIG_ZBUS_PRIORITY_BOOST``): the Zephyr hand-rolled protection - against priority inversion during the notification process. Not - needed: enable the native ``CONFIG_PRIORITY_INHERITANCE`` so the - channel semaphores get equivalent protection from the kernel. -* **net_buf pools and pool isolation** - (``CONFIG_ZBUS_MSG_SUBSCRIBER_BUF_*``): obsolete by design in this - port -- message queues copy the payload on ``mq_send``, so no shared - reference-counted buffers exist at all. -* **Static/user-provided runtime observer nodes** - (``CONFIG_ZBUS_RUNTIME_OBSERVERS_NODE_ALLOC_STATIC/NONE``): runtime - observer nodes are always heap-allocated in this port. - -Differences from the Zephyr original -==================================== - -* Timeouts are plain milliseconds (``int32_t``): ``ZBUS_NO_WAIT`` (0) and - ``ZBUS_FOREVER`` (-1) replace ``K_NO_WAIT``/``K_FOREVER``. -* Subscriber queues are POSIX message queues opened lazily on first API - use through the kernel ``file_mq_*`` interface, making them usable from - any task (a ``mqd_t`` descriptor would die with the opening task). -* Initialization is lazy (``pthread_once`` on the first API call) - replacing the Zephyr ``SYS_INIT`` hook; no explicit init call is - needed. -* Async listeners run on a dedicated task per listener (spawned on - first use; priority and stack size are configurable) instead of the - Zephyr system work queue. - -Configuration -============= - -Requirements: - -* The board linker script must provide the zbus iterable sections, either - by including ```` inside ``.text`` (see the - ``linum-stm32h753bi`` board) or through - ``CONFIG_ITERABLE_SECTIONS_LINKER_INSERT`` - (zero-touch mode; see its help text for the MEMORY-layout constraint). -* ``CONFIG_MQ_MAXMSGSIZE`` must be at least - ``CONFIG_ZBUS_MSG_SUBSCRIBER_MAX_MSG_SIZE`` plus the size of a pointer - when message subscribers or async listeners are used, otherwise their - queues fail to open with ``-EINVAL``. -* FLAT build (the library uses the kernel ``file_mq_*`` interface - directly). - -Main options: - -* ``CONFIG_ZBUS`` -- enable the library. -* ``CONFIG_ZBUS_CHANNEL_NAME`` / ``CONFIG_ZBUS_OBSERVER_NAME`` -- name - fields and lookup by name. -* ``CONFIG_ZBUS_CHANNEL_ID`` -- numeric channel identifiers - (``ZBUS_CHAN_DEFINE_WITH_ID``, ``zbus_chan_from_id()``). -* ``CONFIG_ZBUS_MSG_SUBSCRIBER`` -- message subscribers - (+ ``_MAX_MSG_SIZE``, ``_QUEUE_SIZE``). -* ``CONFIG_ZBUS_ASYNC_LISTENER`` -- async listeners (+ ``_PRIORITY``, - ``_STACKSIZE`` of their tasks). -* ``CONFIG_ZBUS_RUNTIME_OBSERVERS`` -- runtime observers. -* ``CONFIG_ZBUS_CHANNEL_PUBLISH_STATS`` -- publish timestamp/count. -* ``CONFIG_ZBUS_ASSERT_MOCK`` -- invalid parameters return ``-EFAULT`` - instead of asserting (for tests). - -Credits -======= - -The zbus design and the diagrams in this page come from the upstream -`Zephyr zbus documentation -`_ -by Rodrigo Peixoto and contributors (Apache License 2.0). diff --git a/Documentation/platforms/arm/stm32h7/boards/linum-stm32h753bi/index.rst b/Documentation/platforms/arm/stm32h7/boards/linum-stm32h753bi/index.rst index 01e0e026c1790..9b469c9c80af3 100644 --- a/Documentation/platforms/arm/stm32h7/boards/linum-stm32h753bi/index.rst +++ b/Documentation/platforms/arm/stm32h7/boards/linum-stm32h753bi/index.rst @@ -1298,28 +1298,3 @@ This example demonstrates how to use the CAN-FD peripherals can0 and can1 with t can0 051 [8] 00 11 22 33 44 55 66 77 can0 051 [16] 00 11 22 33 44 55 66 77 88 99 AA BB CC DD EE FF - -zbus ----- - -Enables the zbus message bus library (``apps/system/zbus``, a port of the -Zephyr zbus — see :doc:`its documentation -`) with all observer types (listeners, -subscribers, message subscribers, async listeners, ISR publisher and -runtime observers), together with its example application:: - - nsh> zbus - zbus: publishing 5 messages to acc_chan - zbus: listener: x=1 y=10 z=100 - zbus: subscriber: x=1 y=10 z=100 - ... - zbus: done - -The cmocka test suite from ``apps/testing/zbus`` is also included and can -be used to validate the whole zbus API on the board:: - - nsh> cmocka_zbus_test - [==========] tests: Running 16 test(s). - ... - [==========] tests: 16 test(s) run. - [ PASSED ] 16 test(s). diff --git a/boards/arm/stm32h7/linum-stm32h753bi/configs/zbus/defconfig b/boards/arm/stm32h7/linum-stm32h753bi/configs/zbus/defconfig deleted file mode 100644 index 040c5d0b6346c..0000000000000 --- a/boards/arm/stm32h7/linum-stm32h753bi/configs/zbus/defconfig +++ /dev/null @@ -1,75 +0,0 @@ -# -# This file is autogenerated: PLEASE DO NOT EDIT IT. -# -# You can use "make menuconfig" to make any modifications to the installed .config file. -# You can then do "make savedefconfig" to generate a new defconfig file that includes your -# modifications. -# -# CONFIG_STANDARD_SERIAL is not set -CONFIG_ALLOW_MIT_COMPONENTS=y -CONFIG_ARCH="arm" -CONFIG_ARCH_BOARD="linum-stm32h753bi" -CONFIG_ARCH_BOARD_LINUM_STM32H753BI=y -CONFIG_ARCH_CHIP="stm32h7" -CONFIG_ARCH_CHIP_STM32=y -CONFIG_ARCH_CHIP_STM32H753BI=y -CONFIG_ARCH_CHIP_STM32H7=y -CONFIG_ARCH_CHIP_STM32H7_CORTEXM7=y -CONFIG_ARCH_INTERRUPTSTACK=2048 -CONFIG_ARCH_SETJMP_H=y -CONFIG_ARCH_STACKDUMP=y -CONFIG_ARMV7M_DCACHE=y -CONFIG_ARMV7M_DCACHE_WRITETHROUGH=y -CONFIG_ARMV7M_DTCM=y -CONFIG_ARMV7M_ICACHE=y -CONFIG_BOARD_LOOPSPERMSEC=43103 -CONFIG_BUILTIN=y -CONFIG_DEBUG_FEATURES=y -CONFIG_DEBUG_SYMBOLS=y -CONFIG_EXAMPLES_ALARM=y -CONFIG_EXAMPLES_ZBUS=y -CONFIG_FS_PROCFS=y -CONFIG_IDLETHREAD_STACKSIZE=2048 -CONFIG_INIT_ENTRYPOINT="nsh_main" -CONFIG_INIT_STACKSIZE=4096 -CONFIG_INTELHEX_BINARY=y -CONFIG_LIBM=y -CONFIG_LINE_MAX=64 -CONFIG_MM_REGIONS=4 -CONFIG_MQ_MAXMSGSIZE=96 -CONFIG_NSH_BUILTIN_APPS=y -CONFIG_NSH_DISABLE_IFUPDOWN=y -CONFIG_NSH_DISABLE_VCONFIG=y -CONFIG_NSH_FILEIOSIZE=512 -CONFIG_NSH_READLINE=y -CONFIG_PREALLOC_TIMERS=4 -CONFIG_RAM_SIZE=245760 -CONFIG_RAM_START=0x20010000 -CONFIG_RAW_BINARY=y -CONFIG_RR_INTERVAL=200 -CONFIG_RTC_ALARM=y -CONFIG_RTC_DATETIME=y -CONFIG_RTC_DRIVER=y -CONFIG_SCHED_CPULOAD_SYSCLK=y -CONFIG_SCHED_WAITPID=y -CONFIG_STACK_COLORATION=y -CONFIG_START_DAY=6 -CONFIG_START_MONTH=12 -CONFIG_START_YEAR=2011 -CONFIG_STM32_PWR=y -CONFIG_STM32_RTC=y -CONFIG_STM32_USART1=y -CONFIG_SYSTEM_NSH=y -CONFIG_TASK_NAME_SIZE=20 -CONFIG_TESTING_CMOCKA=y -CONFIG_TESTING_OSTEST=y -CONFIG_TESTING_ZBUS=y -CONFIG_USART1_SERIAL_CONSOLE=y -CONFIG_ZBUS=y -CONFIG_ZBUS_ASYNC_LISTENER=y -CONFIG_ZBUS_CHANNEL_ID=y -CONFIG_ZBUS_CHANNEL_NAME=y -CONFIG_ZBUS_CHANNEL_PUBLISH_STATS=y -CONFIG_ZBUS_MSG_SUBSCRIBER=y -CONFIG_ZBUS_OBSERVER_NAME=y -CONFIG_ZBUS_RUNTIME_OBSERVERS=y diff --git a/boards/arm/stm32h7/linum-stm32h753bi/scripts/flash.ld b/boards/arm/stm32h7/linum-stm32h753bi/scripts/flash.ld index 036b6b4c5ebf5..b726e5c457607 100644 --- a/boards/arm/stm32h7/linum-stm32h753bi/scripts/flash.ld +++ b/boards/arm/stm32h7/linum-stm32h753bi/scripts/flash.ld @@ -126,7 +126,6 @@ SECTIONS *(.got) *(.gcc_except_table) *(.gnu.linkonce.r.*) -#include _etext = ABSOLUTE(.); } > flash @@ -157,7 +156,6 @@ SECTIONS *(.data .data.*) *(.gnu.linkonce.d.*) CONSTRUCTORS -#include . = ALIGN(4); _edata = ABSOLUTE(.); } > sram AT > flash diff --git a/include/nuttx/linker/common-insert.ld b/include/nuttx/linker/common-insert.ld index 77d4faa6b99c2..44a11e06c2aff 100644 --- a/include/nuttx/linker/common-insert.ld +++ b/include/nuttx/linker/common-insert.ld @@ -54,11 +54,6 @@ SECTIONS { .iterable_sections : SUBALIGN(4) { -#ifdef CONFIG_ZBUS - ITERABLE_SECTION(zbus_channel) - ITERABLE_SECTION(zbus_observer) - ITERABLE_SECTION(zbus_channel_observation) -#endif } } INSERT AFTER .text; diff --git a/include/nuttx/linker/common-ram.ld b/include/nuttx/linker/common-ram.ld index a7920fee55fc1..30b56edae833a 100644 --- a/include/nuttx/linker/common-ram.ld +++ b/include/nuttx/linker/common-ram.ld @@ -40,8 +40,4 @@ * sections; blocks are added below, each guarded by its Kconfig option. */ -/* zbus needs no RAM iterable sections: notification masks live in .bss - * and are initialized at runtime from ROM-preserved values. - */ - #endif /* !CONFIG_ITERABLE_SECTIONS_LINKER_INSERT */ diff --git a/include/nuttx/linker/common-rom.ld b/include/nuttx/linker/common-rom.ld index 32621d396c59d..7c0467c25e896 100644 --- a/include/nuttx/linker/common-rom.ld +++ b/include/nuttx/linker/common-rom.ld @@ -44,10 +44,4 @@ * #endif */ -#ifdef CONFIG_ZBUS -ITERABLE_SECTION(zbus_channel) -ITERABLE_SECTION(zbus_observer) -ITERABLE_SECTION(zbus_channel_observation) -#endif - #endif /* !CONFIG_ITERABLE_SECTIONS_LINKER_INSERT */