Skip to content

Commit 6ec6173

Browse files
rodrigopexnashif
authored andcommitted
samples: zbus: add isolated pool to msg_sub sample
Add isolated pool (static and dynamic) to the sample illustrating how to use that and performing some testing in different scenarios. Signed-off-by: Rodrigo Peixoto <[email protected]>
1 parent 3b10caf commit 6ec6173

File tree

5 files changed

+248
-4
lines changed

5 files changed

+248
-4
lines changed

samples/subsys/zbus/msg_subscriber/Kconfig

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,4 +7,9 @@ config ZBUS_MSG_SUBSCRIBER_SAMPLE
77
select SYS_HEAP_LISTENER
88
select SYS_HEAP_RUNTIME_STATS
99

10+
config ZBUS_MSG_SUBSCRIBER_SAMPLE_ISOLATED_BUF_POOL_SIZE
11+
int "Set size of the isolated pool"
12+
default 32
13+
depends on ZBUS_MSG_SUBSCRIBER_NET_BUF_POOL_ISOLATION
14+
1015
source "Kconfig.zephyr"

samples/subsys/zbus/msg_subscriber/README.rst

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,8 +6,9 @@
66

77
Overview
88
********
9-
This sample illustrates how to use a message subscriber in different
10-
ways in conjunction with other types of observers.
9+
This sample illustrates how to use a message subscriber in different ways with other types of
10+
observers. It is possible to explore the pool isolation feature by setting the pool size and if it
11+
is static or dynamic by setting the proper :kconfig:option:`CONFIG_ZBUS_MSG_SUBSCRIBER_BUF_ALLOC`.
1112

1213
Building and Running
1314
********************

samples/subsys/zbus/msg_subscriber/prj.conf

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@ CONFIG_LOG=y
22
CONFIG_LOG_MODE_MINIMAL=y
33
CONFIG_ASSERT=y
44
CONFIG_BOOT_BANNER=n
5-
CONFIG_MAIN_THREAD_PRIORITY=5
5+
CONFIG_MAIN_THREAD_PRIORITY=3
66
CONFIG_ZBUS=y
77
CONFIG_ZBUS_LOG_LEVEL_INF=y
88
CONFIG_ZBUS_CHANNEL_NAME=y

samples/subsys/zbus/msg_subscriber/sample.yaml

Lines changed: 222 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -181,3 +181,225 @@ tests:
181181
tags: zbus
182182
integration_platforms:
183183
- qemu_x86
184+
185+
sample.zbus.msg_subscriber_dynamic_isolated:
186+
harness: console
187+
extra_configs:
188+
- CONFIG_ZBUS_LOG_LEVEL_DBG=y
189+
- CONFIG_ZBUS_MSG_SUBSCRIBER_NET_BUF_POOL_ISOLATION=y
190+
harness_config:
191+
type: multi_line
192+
ordered: false
193+
regex:
194+
- "^.*?I: ----> Publishing to acc_data_chan channel"
195+
- "^.*?I: AL Memory allocated \\d{1,3} bytes. Total allocated \\d{1,3} bytes$"
196+
- "^.*?I: FR Memory freed \\d{1,3} bytes. Total allocated 0 bytes$"
197+
- "^.*?D: 0 -> bar_sub1"
198+
- "^.*?D: 1 -> bar_msg_sub1"
199+
- "^.*?D: 2 -> bar_msg_sub2"
200+
- "^.*?D: 3 -> bar_msg_sub3"
201+
- "^.*?D: 4 -> bar_msg_sub4"
202+
- "^.*?D: 5 -> bar_msg_sub5"
203+
- "^.*?D: 6 -> bar_msg_sub6"
204+
- "^.*?D: 7 -> bar_msg_sub7"
205+
- "^.*?D: 8 -> bar_msg_sub8"
206+
- "^.*?D: 9 -> bar_msg_sub9"
207+
- "^.*?D: 10 -> foo_lis"
208+
- "^.*?D: 11 -> bar_msg_sub10"
209+
- "^.*?D: 12 -> bar_msg_sub11"
210+
- "^.*?D: 13 -> bar_msg_sub12"
211+
- "^.*?D: 14 -> bar_msg_sub13"
212+
- "^.*?D: 15 -> bar_msg_sub14"
213+
- "^.*?D: 16 -> bar_msg_sub15"
214+
- "^.*?D: 17 -> bar_msg_sub16"
215+
- "^.*?D: 18 -> bar_sub2"
216+
- "^.*?I: From listener foo_lis -> Acc x=1, y=10, z=100"
217+
- "^.*?I: From msg subscriber bar_msg_sub1 -> Acc x=1, y=10, z=100"
218+
- "^.*?I: From msg subscriber bar_msg_sub2 -> Acc x=1, y=10, z=100"
219+
- "^.*?I: From msg subscriber bar_msg_sub3 -> Acc x=1, y=10, z=100"
220+
- "^.*?I: From msg subscriber bar_msg_sub4 -> Acc x=1, y=10, z=100"
221+
- "^.*?I: From msg subscriber bar_msg_sub5 -> Acc x=1, y=10, z=100"
222+
- "^.*?I: From msg subscriber bar_msg_sub6 -> Acc x=1, y=10, z=100"
223+
- "^.*?I: From msg subscriber bar_msg_sub7 -> Acc x=1, y=10, z=100"
224+
- "^.*?I: From msg subscriber bar_msg_sub8 -> Acc x=1, y=10, z=100"
225+
- "^.*?I: From msg subscriber bar_msg_sub9 -> Acc x=1, y=10, z=100"
226+
- "^.*?I: From msg subscriber bar_msg_sub10 -> Acc x=1, y=10, z=100"
227+
- "^.*?I: From msg subscriber bar_msg_sub11 -> Acc x=1, y=10, z=100"
228+
- "^.*?I: From msg subscriber bar_msg_sub12 -> Acc x=1, y=10, z=100"
229+
- "^.*?I: From msg subscriber bar_msg_sub13 -> Acc x=1, y=10, z=100"
230+
- "^.*?I: From msg subscriber bar_msg_sub14 -> Acc x=1, y=10, z=100"
231+
- "^.*?I: From msg subscriber bar_msg_sub15 -> Acc x=1, y=10, z=100"
232+
- "^.*?I: From msg subscriber bar_msg_sub16 -> Acc x=1, y=10, z=100"
233+
- "^.*?I: From subscriber bar_sub1 -> Acc x=1, y=10, z=100"
234+
- "^.*?I: From subscriber bar_sub2 -> Acc x=1, y=10, z=100"
235+
- "^.*?I: From listener foo_lis -> Acc x=2, y=20, z=200"
236+
- "^.*?I: From msg subscriber bar_msg_sub1 -> Acc x=2, y=20, z=200"
237+
- "^.*?I: From msg subscriber bar_msg_sub2 -> Acc x=2, y=20, z=200"
238+
- "^.*?I: From msg subscriber bar_msg_sub3 -> Acc x=2, y=20, z=200"
239+
- "^.*?I: From msg subscriber bar_msg_sub4 -> Acc x=2, y=20, z=200"
240+
- "^.*?I: From msg subscriber bar_msg_sub5 -> Acc x=2, y=20, z=200"
241+
- "^.*?I: From msg subscriber bar_msg_sub6 -> Acc x=2, y=20, z=200"
242+
- "^.*?I: From msg subscriber bar_msg_sub7 -> Acc x=2, y=20, z=200"
243+
- "^.*?I: From msg subscriber bar_msg_sub8 -> Acc x=2, y=20, z=200"
244+
- "^.*?I: From msg subscriber bar_msg_sub9 -> Acc x=2, y=20, z=200"
245+
- "^.*?I: From msg subscriber bar_msg_sub10 -> Acc x=2, y=20, z=200"
246+
- "^.*?I: From msg subscriber bar_msg_sub11 -> Acc x=2, y=20, z=200"
247+
- "^.*?I: From msg subscriber bar_msg_sub12 -> Acc x=2, y=20, z=200"
248+
- "^.*?I: From msg subscriber bar_msg_sub13 -> Acc x=2, y=20, z=200"
249+
- "^.*?I: From msg subscriber bar_msg_sub14 -> Acc x=2, y=20, z=200"
250+
- "^.*?I: From msg subscriber bar_msg_sub15 -> Acc x=2, y=20, z=200"
251+
- "^.*?I: From msg subscriber bar_msg_sub16 -> Acc x=2, y=20, z=200"
252+
- "^.*?I: From subscriber bar_sub1 -> Acc x=2, y=20, z=200"
253+
- "^.*?I: From subscriber bar_sub2 -> Acc x=2, y=20, z=200"
254+
- "^.*?I: From listener foo_lis -> Acc x=3, y=30, z=300"
255+
- "^.*?I: From msg subscriber bar_msg_sub1 -> Acc x=3, y=30, z=300"
256+
- "^.*?I: From msg subscriber bar_msg_sub2 -> Acc x=3, y=30, z=300"
257+
- "^.*?I: From msg subscriber bar_msg_sub3 -> Acc x=3, y=30, z=300"
258+
- "^.*?I: From msg subscriber bar_msg_sub4 -> Acc x=3, y=30, z=300"
259+
- "^.*?I: From msg subscriber bar_msg_sub5 -> Acc x=3, y=30, z=300"
260+
- "^.*?I: From msg subscriber bar_msg_sub6 -> Acc x=3, y=30, z=300"
261+
- "^.*?I: From msg subscriber bar_msg_sub7 -> Acc x=3, y=30, z=300"
262+
- "^.*?I: From msg subscriber bar_msg_sub8 -> Acc x=3, y=30, z=300"
263+
- "^.*?I: From msg subscriber bar_msg_sub9 -> Acc x=3, y=30, z=300"
264+
- "^.*?I: From msg subscriber bar_msg_sub10 -> Acc x=3, y=30, z=300"
265+
- "^.*?I: From msg subscriber bar_msg_sub11 -> Acc x=3, y=30, z=300"
266+
- "^.*?I: From msg subscriber bar_msg_sub12 -> Acc x=3, y=30, z=300"
267+
- "^.*?I: From msg subscriber bar_msg_sub13 -> Acc x=3, y=30, z=300"
268+
- "^.*?I: From msg subscriber bar_msg_sub14 -> Acc x=3, y=30, z=300"
269+
- "^.*?I: From msg subscriber bar_msg_sub15 -> Acc x=3, y=30, z=300"
270+
- "^.*?I: From msg subscriber bar_msg_sub16 -> Acc x=3, y=30, z=300"
271+
- "^.*?I: From subscriber bar_sub1 -> Acc x=3, y=30, z=300"
272+
- "^.*?I: From subscriber bar_sub2 -> Acc x=3, y=30, z=300"
273+
tags: zbus
274+
integration_platforms:
275+
- qemu_x86
276+
sample.zbus.msg_subscriber_dynamic_isolated_too_small:
277+
harness: console
278+
extra_configs:
279+
- CONFIG_ZBUS_LOG_LEVEL_DBG=y
280+
- CONFIG_ZBUS_MSG_SUBSCRIBER_NET_BUF_POOL_ISOLATION=y
281+
- CONFIG_ZBUS_MSG_SUBSCRIBER_SAMPLE_ISOLATED_BUF_POOL_SIZE=2
282+
harness_config:
283+
type: multi_line
284+
ordered: false
285+
regex:
286+
- "^.*?I: ----> Publishing to acc_data_chan channel"
287+
- "^.*?I: AL Memory allocated \\d{1,3} bytes. Total allocated \\d{1,3} bytes$"
288+
- "^.*?I: FR Memory freed \\d{1,3} bytes. Total allocated 0 bytes$"
289+
- "^.*?D: 0 -> bar_sub1"
290+
- "^.*?D: 1 -> bar_msg_sub1"
291+
- "^.*?E: could not deliver notification to observer bar_msg_sub2. Error code -12"
292+
tags: zbus
293+
integration_platforms:
294+
- qemu_x86
295+
sample.zbus.msg_subscriber_static_isolated:
296+
harness: console
297+
extra_configs:
298+
- CONFIG_ZBUS_LOG_LEVEL_DBG=y
299+
- CONFIG_ZBUS_MSG_SUBSCRIBER_BUF_ALLOC_STATIC=y
300+
- CONFIG_ZBUS_MSG_SUBSCRIBER_NET_BUF_STATIC_DATA_SIZE=16
301+
- CONFIG_ZBUS_MSG_SUBSCRIBER_NET_BUF_POOL_ISOLATION=y
302+
- CONFIG_ZBUS_MSG_SUBSCRIBER_SAMPLE_ISOLATED_BUF_POOL_SIZE=32
303+
harness_config:
304+
type: multi_line
305+
ordered: false
306+
regex:
307+
- "^.*?I: ----> Publishing to acc_data_chan channel"
308+
- "^.*?D: 0 -> bar_sub1"
309+
- "^.*?D: 1 -> bar_msg_sub1"
310+
- "^.*?D: 2 -> bar_msg_sub2"
311+
- "^.*?D: 3 -> bar_msg_sub3"
312+
- "^.*?D: 4 -> bar_msg_sub4"
313+
- "^.*?D: 5 -> bar_msg_sub5"
314+
- "^.*?D: 6 -> bar_msg_sub6"
315+
- "^.*?D: 7 -> bar_msg_sub7"
316+
- "^.*?D: 8 -> bar_msg_sub8"
317+
- "^.*?D: 9 -> bar_msg_sub9"
318+
- "^.*?D: 10 -> foo_lis"
319+
- "^.*?D: 11 -> bar_msg_sub10"
320+
- "^.*?D: 12 -> bar_msg_sub11"
321+
- "^.*?D: 13 -> bar_msg_sub12"
322+
- "^.*?D: 14 -> bar_msg_sub13"
323+
- "^.*?D: 15 -> bar_msg_sub14"
324+
- "^.*?D: 16 -> bar_msg_sub15"
325+
- "^.*?D: 17 -> bar_msg_sub16"
326+
- "^.*?D: 18 -> bar_sub2"
327+
- "^.*?I: From listener foo_lis -> Acc x=1, y=10, z=100"
328+
- "^.*?I: From msg subscriber bar_msg_sub1 -> Acc x=1, y=10, z=100"
329+
- "^.*?I: From msg subscriber bar_msg_sub2 -> Acc x=1, y=10, z=100"
330+
- "^.*?I: From msg subscriber bar_msg_sub3 -> Acc x=1, y=10, z=100"
331+
- "^.*?I: From msg subscriber bar_msg_sub4 -> Acc x=1, y=10, z=100"
332+
- "^.*?I: From msg subscriber bar_msg_sub5 -> Acc x=1, y=10, z=100"
333+
- "^.*?I: From msg subscriber bar_msg_sub6 -> Acc x=1, y=10, z=100"
334+
- "^.*?I: From msg subscriber bar_msg_sub7 -> Acc x=1, y=10, z=100"
335+
- "^.*?I: From msg subscriber bar_msg_sub8 -> Acc x=1, y=10, z=100"
336+
- "^.*?I: From msg subscriber bar_msg_sub9 -> Acc x=1, y=10, z=100"
337+
- "^.*?I: From msg subscriber bar_msg_sub10 -> Acc x=1, y=10, z=100"
338+
- "^.*?I: From msg subscriber bar_msg_sub11 -> Acc x=1, y=10, z=100"
339+
- "^.*?I: From msg subscriber bar_msg_sub12 -> Acc x=1, y=10, z=100"
340+
- "^.*?I: From msg subscriber bar_msg_sub13 -> Acc x=1, y=10, z=100"
341+
- "^.*?I: From msg subscriber bar_msg_sub14 -> Acc x=1, y=10, z=100"
342+
- "^.*?I: From msg subscriber bar_msg_sub15 -> Acc x=1, y=10, z=100"
343+
- "^.*?I: From msg subscriber bar_msg_sub16 -> Acc x=1, y=10, z=100"
344+
- "^.*?I: From subscriber bar_sub1 -> Acc x=1, y=10, z=100"
345+
- "^.*?I: From subscriber bar_sub2 -> Acc x=1, y=10, z=100"
346+
- "^.*?I: From listener foo_lis -> Acc x=2, y=20, z=200"
347+
- "^.*?I: From msg subscriber bar_msg_sub1 -> Acc x=2, y=20, z=200"
348+
- "^.*?I: From msg subscriber bar_msg_sub2 -> Acc x=2, y=20, z=200"
349+
- "^.*?I: From msg subscriber bar_msg_sub3 -> Acc x=2, y=20, z=200"
350+
- "^.*?I: From msg subscriber bar_msg_sub4 -> Acc x=2, y=20, z=200"
351+
- "^.*?I: From msg subscriber bar_msg_sub5 -> Acc x=2, y=20, z=200"
352+
- "^.*?I: From msg subscriber bar_msg_sub6 -> Acc x=2, y=20, z=200"
353+
- "^.*?I: From msg subscriber bar_msg_sub7 -> Acc x=2, y=20, z=200"
354+
- "^.*?I: From msg subscriber bar_msg_sub8 -> Acc x=2, y=20, z=200"
355+
- "^.*?I: From msg subscriber bar_msg_sub9 -> Acc x=2, y=20, z=200"
356+
- "^.*?I: From msg subscriber bar_msg_sub10 -> Acc x=2, y=20, z=200"
357+
- "^.*?I: From msg subscriber bar_msg_sub11 -> Acc x=2, y=20, z=200"
358+
- "^.*?I: From msg subscriber bar_msg_sub12 -> Acc x=2, y=20, z=200"
359+
- "^.*?I: From msg subscriber bar_msg_sub13 -> Acc x=2, y=20, z=200"
360+
- "^.*?I: From msg subscriber bar_msg_sub14 -> Acc x=2, y=20, z=200"
361+
- "^.*?I: From msg subscriber bar_msg_sub15 -> Acc x=2, y=20, z=200"
362+
- "^.*?I: From msg subscriber bar_msg_sub16 -> Acc x=2, y=20, z=200"
363+
- "^.*?I: From subscriber bar_sub1 -> Acc x=2, y=20, z=200"
364+
- "^.*?I: From subscriber bar_sub2 -> Acc x=2, y=20, z=200"
365+
- "^.*?I: From listener foo_lis -> Acc x=3, y=30, z=300"
366+
- "^.*?I: From msg subscriber bar_msg_sub1 -> Acc x=3, y=30, z=300"
367+
- "^.*?I: From msg subscriber bar_msg_sub2 -> Acc x=3, y=30, z=300"
368+
- "^.*?I: From msg subscriber bar_msg_sub3 -> Acc x=3, y=30, z=300"
369+
- "^.*?I: From msg subscriber bar_msg_sub4 -> Acc x=3, y=30, z=300"
370+
- "^.*?I: From msg subscriber bar_msg_sub5 -> Acc x=3, y=30, z=300"
371+
- "^.*?I: From msg subscriber bar_msg_sub6 -> Acc x=3, y=30, z=300"
372+
- "^.*?I: From msg subscriber bar_msg_sub7 -> Acc x=3, y=30, z=300"
373+
- "^.*?I: From msg subscriber bar_msg_sub8 -> Acc x=3, y=30, z=300"
374+
- "^.*?I: From msg subscriber bar_msg_sub9 -> Acc x=3, y=30, z=300"
375+
- "^.*?I: From msg subscriber bar_msg_sub10 -> Acc x=3, y=30, z=300"
376+
- "^.*?I: From msg subscriber bar_msg_sub11 -> Acc x=3, y=30, z=300"
377+
- "^.*?I: From msg subscriber bar_msg_sub12 -> Acc x=3, y=30, z=300"
378+
- "^.*?I: From msg subscriber bar_msg_sub13 -> Acc x=3, y=30, z=300"
379+
- "^.*?I: From msg subscriber bar_msg_sub14 -> Acc x=3, y=30, z=300"
380+
- "^.*?I: From msg subscriber bar_msg_sub15 -> Acc x=3, y=30, z=300"
381+
- "^.*?I: From msg subscriber bar_msg_sub16 -> Acc x=3, y=30, z=300"
382+
- "^.*?I: From subscriber bar_sub1 -> Acc x=3, y=30, z=300"
383+
- "^.*?I: From subscriber bar_sub2 -> Acc x=3, y=30, z=300"
384+
tags: zbus
385+
integration_platforms:
386+
- qemu_x86
387+
sample.zbus.msg_subscriber_static_isolated_too_small:
388+
harness: console
389+
extra_configs:
390+
- CONFIG_ZBUS_LOG_LEVEL_DBG=y
391+
- CONFIG_ZBUS_MSG_SUBSCRIBER_BUF_ALLOC_STATIC=y
392+
- CONFIG_ZBUS_MSG_SUBSCRIBER_NET_BUF_STATIC_DATA_SIZE=16
393+
- CONFIG_ZBUS_MSG_SUBSCRIBER_NET_BUF_POOL_ISOLATION=y
394+
- CONFIG_ZBUS_MSG_SUBSCRIBER_SAMPLE_ISOLATED_BUF_POOL_SIZE=2
395+
harness_config:
396+
type: multi_line
397+
ordered: false
398+
regex:
399+
- "^.*?I: ----> Publishing to acc_data_chan channel"
400+
- "^.*?D: 0 -> bar_sub1"
401+
- "^.*?D: 1 -> bar_msg_sub1"
402+
- "^.*?E: could not deliver notification to observer bar_msg_sub2. Error code -12"
403+
tags: zbus
404+
integration_platforms:
405+
- qemu_x86

samples/subsys/zbus/msg_subscriber/src/main.c

Lines changed: 17 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -169,10 +169,26 @@ ZBUS_CHAN_ADD_OBS(acc_data_chan, bar_msg_sub16, 3);
169169

170170
static struct acc_msg acc = {.x = 1, .y = 10, .z = 100};
171171

172+
#if defined(CONFIG_ZBUS_MSG_SUBSCRIBER_NET_BUF_POOL_ISOLATION)
173+
#include <zephyr/net/buf.h>
174+
175+
#if defined(CONFIG_ZBUS_MSG_SUBSCRIBER_BUF_ALLOC_DYNAMIC)
176+
NET_BUF_POOL_HEAP_DEFINE(isolated_pool, (CONFIG_ZBUS_MSG_SUBSCRIBER_SAMPLE_ISOLATED_BUF_POOL_SIZE),
177+
(sizeof(struct zbus_channel *)), NULL);
178+
#else
179+
NET_BUF_POOL_FIXED_DEFINE(isolated_pool, (CONFIG_ZBUS_MSG_SUBSCRIBER_SAMPLE_ISOLATED_BUF_POOL_SIZE),
180+
(CONFIG_ZBUS_MSG_SUBSCRIBER_NET_BUF_STATIC_DATA_SIZE),
181+
sizeof(struct zbus_channel *), NULL);
182+
#endif
183+
#endif
184+
172185
int main(void)
173186
{
174187

175188
total_allocated = 0;
189+
#if defined(CONFIG_ZBUS_MSG_SUBSCRIBER_NET_BUF_POOL_ISOLATION)
190+
zbus_chan_set_msg_sub_pool(&acc_data_chan, &isolated_pool);
191+
#endif
176192

177193
#if defined(CONFIG_ZBUS_MSG_SUBSCRIBER_BUF_ALLOC_DYNAMIC)
178194

@@ -183,7 +199,7 @@ int main(void)
183199

184200
while (1) {
185201
LOG_INF("----> Publishing to %s channel", zbus_chan_name(&acc_data_chan));
186-
zbus_chan_pub(&acc_data_chan, &acc, K_SECONDS(1));
202+
zbus_chan_pub(&acc_data_chan, &acc, K_NO_WAIT);
187203
acc.x += 1;
188204
acc.y += 10;
189205
acc.z += 100;

0 commit comments

Comments
 (0)