-
Notifications
You must be signed in to change notification settings - Fork 1
/
embedded_client_api.html
1488 lines (1426 loc) · 475 KB
/
embedded_client_api.html
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
950
951
952
953
954
955
956
957
958
959
960
961
962
963
964
965
966
967
968
969
970
971
972
973
974
975
976
977
978
979
980
981
982
983
984
985
986
987
988
989
990
991
992
993
994
995
996
997
998
999
1000
<!DOCTYPE html>
<!--
Modified template for STM32CubeMX.AI purpose
d0.1: [email protected]
add ST logo and ST footer
d2.0: [email protected]
add sidenav support
d2.1: [email protected]
clean-up + optional ai_logo/ai meta data
==============================================================================
"GitHub HTML5 Pandoc Template" v2.1 — by Tristano Ajmone
==============================================================================
Copyright © Tristano Ajmone, 2017, MIT License (MIT). Project's home:
- https://github.com/tajmone/pandoc-goodies
The CSS in this template reuses source code taken from the following projects:
- GitHub Markdown CSS: Copyright © Sindre Sorhus, MIT License (MIT):
https://github.com/sindresorhus/github-markdown-css
- Primer CSS: Copyright © 2016-2017 GitHub Inc., MIT License (MIT):
http://primercss.io/
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
The MIT License
Copyright (c) Tristano Ajmone, 2017 (github.com/tajmone/pandoc-goodies)
Copyright (c) Sindre Sorhus <[email protected]> (sindresorhus.com)
Copyright (c) 2017 GitHub Inc.
"GitHub Pandoc HTML5 Template" is Copyright (c) Tristano Ajmone, 2017, released
under the MIT License (MIT); it contains readaptations of substantial portions
of the following third party softwares:
(1) "GitHub Markdown CSS", Copyright (c) Sindre Sorhus, MIT License (MIT).
(2) "Primer CSS", Copyright (c) 2016 GitHub Inc., MIT License (MIT).
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.
==============================================================================-->
<html>
<head>
<meta charset="utf-8" />
<meta name="generator" content="pandoc" />
<meta name="viewport" content="width=device-width, initial-scale=1.0, user-scalable=yes" />
<meta name="keywords" content="STM32CubeMX, X-CUBE-AI, Neural Network, Quantization support, CLI, Code Generator, Automatic NN mapping tools" />
<title>Embedded Inference Client API</title>
<style type="text/css">
.markdown-body{
-ms-text-size-adjust:100%;
-webkit-text-size-adjust:100%;
color:#24292e;
font-family:-apple-system,system-ui,BlinkMacSystemFont,"Segoe UI",Helvetica,Arial,sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol";
font-size:16px;
line-height:1.5;
word-wrap:break-word;
box-sizing:border-box;
min-width:200px;
max-width:980px;
margin:0 auto;
padding:45px;
}
.markdown-body a{
color:#0366d6;
background-color:transparent;
text-decoration:none;
-webkit-text-decoration-skip:objects}
.markdown-body a:active,.markdown-body a:hover{
outline-width:0}
.markdown-body a:hover{
text-decoration:underline}
.markdown-body a:not([href]){
color:inherit;text-decoration:none}
.markdown-body strong{font-weight:600}
.markdown-body h1,.markdown-body h2,.markdown-body h3,.markdown-body h4,.markdown-body h5,.markdown-body h6{
margin-top:24px;
margin-bottom:16px;
font-weight:600;
line-height:1.25}
.markdown-body h1{
font-size:2em;
margin:.67em 0;
padding-bottom:.3em;
border-bottom:1px solid #eaecef}
.markdown-body h2{
padding-bottom:.3em;
font-size:1.5em;
border-bottom:1px solid #eaecef}
.markdown-body h3{font-size:1.25em}
.markdown-body h4{font-size:1em}
.markdown-body h5{font-size:.875em}
.markdown-body h6{font-size:.85em;color:#6a737d}
.markdown-body img{border-style:none}
.markdown-body svg:not(:root){
overflow:hidden}
.markdown-body hr{
box-sizing:content-box;
height:.25em;
margin:24px 0;
padding:0;
overflow:hidden;
background-color:#e1e4e8;
border:0}
.markdown-body hr::before{display:table;content:""}
.markdown-body hr::after{display:table;clear:both;content:""}
.markdown-body input{margin:0;overflow:visible;font:inherit;font-family:inherit;font-size:inherit;line-height:inherit}
.markdown-body [type=checkbox]{box-sizing:border-box;padding:0}
.markdown-body *{box-sizing:border-box}.markdown-body blockquote{margin:0}
.markdown-body ol,.markdown-body ul{padding-left:2em}
.markdown-body ol ol,.markdown-body ul ol{list-style-type:lower-roman}
.markdown-body ol ol,.markdown-body ol ul,.markdown-body ul ol,.markdown-body ul ul{margin-top:0;margin-bottom:0}
.markdown-body ol ol ol,.markdown-body ol ul ol,.markdown-body ul ol ol,.markdown-body ul ul ol{list-style-type:lower-alpha}
.markdown-body li>p{margin-top:16px}
.markdown-body li+li{margin-top:.25em}
.markdown-body dd{margin-left:0}
.markdown-body dl{padding:0}
.markdown-body dl dt{padding:0;margin-top:16px;font-size:1em;font-style:italic;font-weight:600}
.markdown-body dl dd{padding:0 16px;margin-bottom:16px}
.markdown-body code{font-family:SFMono-Regular,Consolas,"Liberation Mono",Menlo,Courier,monospace}
.markdown-body pre{font:12px SFMono-Regular,Consolas,"Liberation Mono",Menlo,Courier,monospace;word-wrap:normal}
.markdown-body blockquote,.markdown-body dl,.markdown-body ol,.markdown-body p,.markdown-body pre,.markdown-body table,.markdown-body ul{margin-top:0;margin-bottom:16px}
.markdown-body blockquote{padding:0 1em;color:#6a737d;border-left:.25em solid #dfe2e5}
.markdown-body blockquote>:first-child{margin-top:0}
.markdown-body blockquote>:last-child{margin-bottom:0}
.markdown-body table{display:block;width:100%;overflow:auto;border-spacing:0;border-collapse:collapse}
.markdown-body table th{font-weight:600}
.markdown-body table td,.markdown-body table th{padding:6px 13px;border:1px solid #dfe2e5}
.markdown-body table tr{background-color:#fff;border-top:1px solid #c6cbd1}
.markdown-body table tr:nth-child(2n){background-color:#f6f8fa}
.markdown-body img{max-width:100%;box-sizing:content-box;background-color:#fff}
.markdown-body code{padding:.2em 0;margin:0;font-size:85%;background-color:rgba(27,31,35,.05);border-radius:3px}
.markdown-body code::after,.markdown-body code::before{letter-spacing:-.2em;content:"\00a0"}
.markdown-body pre>code{padding:0;margin:0;font-size:100%;word-break:normal;white-space:pre;background:0 0;border:0}
.markdown-body .highlight{margin-bottom:16px}
.markdown-body .highlight pre{margin-bottom:0;word-break:normal}
.markdown-body .highlight pre,.markdown-body pre{padding:16px;overflow:auto;font-size:85%;line-height:1.45;background-color:#f6f8fa;border-radius:3px}
.markdown-body pre code{display:inline;max-width:auto;padding:0;margin:0;overflow:visible;line-height:inherit;word-wrap:normal;background-color:transparent;border:0}
.markdown-body pre code::after,.markdown-body pre code::before{content:normal}
.markdown-body .full-commit .btn-outline:not(:disabled):hover{color:#005cc5;border-color:#005cc5}
.markdown-body kbd{box-shadow:inset 0 -1px 0 #959da5;display:inline-block;padding:3px 5px;font:11px/10px SFMono-Regular,Consolas,"Liberation Mono",Menlo,Courier,monospace;color:#444d56;vertical-align:middle;background-color:#fcfcfc;border:1px solid #c6cbd1;border-bottom-color:#959da5;border-radius:3px;box-shadow:inset 0 -1px 0 #959da5}
.markdown-body :checked+.radio-label{position:relative;z-index:1;border-color:#0366d6}
.markdown-body .task-list-item{list-style-type:none}
.markdown-body .task-list-item+.task-list-item{margin-top:3px}
.markdown-body .task-list-item input{margin:0 .2em .25em -1.6em;vertical-align:middle}
.markdown-body::before{display:table;content:""}
.markdown-body::after{display:table;clear:both;content:""}
.markdown-body>:first-child{margin-top:0!important}
.markdown-body>:last-child{margin-bottom:0!important}
.Alert,.Error,.Note,.Success,.Warning,.Tips,.HTips{padding:11px;margin-bottom:24px;border-style:solid;border-width:1px;border-radius:4px}
.Alert p,.Error p,.Note p,.Success p,.Warning p,.Tips p,.HTips p{margin-top:0}
.Alert p:last-child,.Error p:last-child,.Note p:last-child,.Success p:last-child,.Warning p:last-child,.Tips p:last-child,.HTips p:last-child{margin-bottom:0}
.Alert{color:#246;background-color:#e2eef9;border-color:#bac6d3}
.Warning{color:#4c4a42;background-color:#fff9ea;border-color:#dfd8c2}
.Error{color:#911;background-color:#fcdede;border-color:#d2b2b2}
.Success{color:#22662c;background-color:#e2f9e5;border-color:#bad3be}
.Note{color:#2f363d;background-color:#f6f8fa;border-color:#d5d8da}
.Alert h1,.Alert h2,.Alert h3,.Alert h4,.Alert h5,.Alert h6{color:#246;margin-bottom:0}
.Warning h1,.Warning h2,.Warning h3,.Warning h4,.Warning h5,.Warning h6{color:#4c4a42;margin-bottom:0}
.Error h1,.Error h2,.Error h3,.Error h4,.Error h5,.Error h6{color:#911;margin-bottom:0}
.Success h1,.Success h2,.Success h3,.Success h4,.Success h5,.Success h6{color:#22662c;margin-bottom:0}
.Note h1,.Note h2,.Note h3,.Note h4,.Note h5,.Note h6{color:#2f363d;margin-bottom:0}
.Tips h1,.Tips h2,.Tips h3,.Tips h4,.Tips h5,.Tips h6{color:#2f363d;margin-bottom:0}
.HTips h1,.HTips h2,.HTips h3,.HTips h4,.HTips h5,.HTips h6{color:#2f363d;margin-bottom:0}
.Tips h1:first-child,.Tips h2:first-child,.Tips h3:first-child,.Tips h4:first-child,.Tips h5:first-child,.Tips h6:first-child,.Alert h1:first-child,.Alert h2:first-child,.Alert h3:first-child,.Alert h4:first-child,.Alert h5:first-child,.Alert h6:first-child,.Error h1:first-child,.Error h2:first-child,.Error h3:first-child,.Error h4:first-child,.Error h5:first-child,.Error h6:first-child,.Note h1:first-child,.Note h2:first-child,.Note h3:first-child,.Note h4:first-child,.Note h5:first-child,.Note h6:first-child,.Success h1:first-child,.Success h2:first-child,.Success h3:first-child,.Success h4:first-child,.Success h5:first-child,.Success h6:first-child,.Warning h1:first-child,.Warning h2:first-child,.Warning h3:first-child,.Warning h4:first-child,.Warning h5:first-child,.Warning h6:first-child{margin-top:0}
h1.title,p.subtitle{text-align:center}
h1.title.followed-by-subtitle{margin-bottom:0}
p.subtitle{font-size:1.5em;font-weight:600;line-height:1.25;margin-top:0;margin-bottom:16px;padding-bottom:.3em}
div.line-block{white-space:pre-line}
</style>
<style type="text/css">code{white-space: pre;}</style>
<style type="text/css">
pre > code.sourceCode { white-space: pre; position: relative; }
pre > code.sourceCode > span { display: inline-block; line-height: 1.25; }
pre > code.sourceCode > span:empty { height: 1.2em; }
.sourceCode { overflow: visible; }
code.sourceCode > span { color: inherit; text-decoration: inherit; }
div.sourceCode { margin: 1em 0; }
pre.sourceCode { margin: 0; }
@media screen {
div.sourceCode { overflow: auto; }
}
@media print {
pre > code.sourceCode { white-space: pre-wrap; }
pre > code.sourceCode > span { text-indent: -5em; padding-left: 5em; }
}
pre.numberSource code
{ counter-reset: source-line 0; }
pre.numberSource code > span
{ position: relative; left: -4em; counter-increment: source-line; }
pre.numberSource code > span > a:first-child::before
{ content: counter(source-line);
position: relative; left: -1em; text-align: right; vertical-align: baseline;
border: none; display: inline-block;
-webkit-touch-callout: none; -webkit-user-select: none;
-khtml-user-select: none; -moz-user-select: none;
-ms-user-select: none; user-select: none;
padding: 0 4px; width: 4em;
background-color: #ffffff;
color: #a0a0a0;
}
pre.numberSource { margin-left: 3em; border-left: 1px solid #a0a0a0; padding-left: 4px; }
div.sourceCode
{ color: #1f1c1b; background-color: #ffffff; }
@media screen {
pre > code.sourceCode > span > a:first-child::before { text-decoration: underline; }
}
code span { color: #1f1c1b; } /* Normal */
code span.al { color: #bf0303; background-color: #f7e6e6; font-weight: bold; } /* Alert */
code span.an { color: #ca60ca; } /* Annotation */
code span.at { color: #0057ae; } /* Attribute */
code span.bn { color: #b08000; } /* BaseN */
code span.bu { color: #644a9b; font-weight: bold; } /* BuiltIn */
code span.cf { color: #1f1c1b; font-weight: bold; } /* ControlFlow */
code span.ch { color: #924c9d; } /* Char */
code span.cn { color: #aa5500; } /* Constant */
code span.co { color: #898887; } /* Comment */
code span.cv { color: #0095ff; } /* CommentVar */
code span.do { color: #607880; } /* Documentation */
code span.dt { color: #0057ae; } /* DataType */
code span.dv { color: #b08000; } /* DecVal */
code span.er { color: #bf0303; text-decoration: underline; } /* Error */
code span.ex { color: #0095ff; font-weight: bold; } /* Extension */
code span.fl { color: #b08000; } /* Float */
code span.fu { color: #644a9b; } /* Function */
code span.im { color: #ff5500; } /* Import */
code span.in { color: #b08000; } /* Information */
code span.kw { color: #1f1c1b; font-weight: bold; } /* Keyword */
code span.op { color: #1f1c1b; } /* Operator */
code span.ot { color: #006e28; } /* Other */
code span.pp { color: #006e28; } /* Preprocessor */
code span.re { color: #0057ae; background-color: #e0e9f8; } /* RegionMarker */
code span.sc { color: #3daee9; } /* SpecialChar */
code span.ss { color: #ff5500; } /* SpecialString */
code span.st { color: #bf0303; } /* String */
code span.va { color: #0057ae; } /* Variable */
code span.vs { color: #bf0303; } /* VerbatimString */
code span.wa { color: #bf0303; } /* Warning */
</style>
<link rel="stylesheet" href="data:text/css,%3Aroot%20%7B%2D%2Dmain%2Ddarkblue%2Dcolor%3A%20rgb%283%2C35%2C75%29%3B%20%2D%2Dmain%2Dlightblue%2Dcolor%3A%20rgb%2860%2C180%2C230%29%3B%20%2D%2Dmain%2Dpink%2Dcolor%3A%20rgb%28230%2C0%2C126%29%3B%20%2D%2Dmain%2Dyellow%2Dcolor%3A%20rgb%28255%2C210%2C0%29%3B%20%2D%2Dsecondary%2Ddarkblue%2D50%2Dcolor%3A%20rgb%28128%2C144%2C169%29%3B%20%2D%2Dsecondary%2Ddarkblue%2D25%2Dcolor%3A%20rgb%28191%2C199%2C212%29%3B%20%2D%2Dsecondary%2Ddarkblue%2D15%2Dcolor%3A%20rgb%28217%2C222%2C229%29%3B%20%2D%2Dsecondary%2Dgrey%2Dcolor%3A%20rgb%2870%2C70%2C80%29%3B%20%2D%2Dsecondary%2Dgrey%2Dcolor%2D25%3A%20rgb%28209%2C209%2C211%29%3B%20%2D%2Dsecondary%2Dgrey%2Dcolor%2D12%3A%20rgb%28233%2C233%2C234%29%3B%20%2D%2Dsecondary%2Dlightgreen%2Dcolor%3A%20rgb%2873%2C177%2C112%29%3B%20%2D%2Dsecondary%2Dpurple%2Dcolor%3A%20rgb%28140%2C0%2C120%29%3B%20%2D%2Dsecondary%2Ddarkgreen%2Dcolor%3A%20rgb%284%2C87%2C47%29%3B%20%2D%2Dsecondary%2Dyellow%2D50%2Dcolor%3A%20rgb%28255%2C233%2C128%29%3B%20%2D%2Dsecondary%2Dyellow%2D25%2Dcolor%3A%20rgb%28255%2C244%2C191%29%3B%20%2D%2Dsecondary%2Dpurple%2D50%2Dcolor%3A%20rgb%28172%2C134%2C172%29%3B%20%2D%2Dsecondary%2Dpurple%2D25%2Dcolor%3A%20rgb%28213%2C194%2C213%29%3B%20%2D%2Dsecondary%2Dbrown%2D50%2Dcolor%3A%20rgb%28174%2C132%2C138%29%3B%20%2D%2Dsecondary%2Dbrown%2D25%2Dcolor%3A%20rgb%28214%2C193%2C196%29%3B%20%2D%2Dsidenav%2Dfont%2Dsize%3A%2090%25%3B%7Dhtml%20%7Bfont%2Dfamily%3A%20%22Arial%22%2C%20sans%2Dserif%3B%7D%2A%20%7Bxbox%2Dsizing%3A%20border%2Dbox%3B%7D%2Est%5Fheader%20h1%2Etitle%2C%2Est%5Fheader%20p%2Esubtitle%20%7Btext%2Dalign%3A%20left%3B%7D%2Est%5Fheader%20h1%2Etitle%20%7Bborder%2Dcolor%3A%20var%28%2D%2Dmain%2Ddarkblue%2Dcolor%29%3Bmargin%2Dbottom%3A5px%3B%7D%2Est%5Fheader%20p%2Esubtitle%20%7Bcolor%3A%20var%28%2D%2Dmain%2Ddarkblue%2Dcolor%29%3Bfont%2Dsize%3A90%25%3B%7D%2Est%5Fheader%20h1%2Etitle%2Efollowed%2Dby%2Dsubtitle%20%7Bborder%2Dbottom%3A2px%20solid%3Bborder%2Dcolor%3A%20var%28%2D%2Dmain%2Ddarkblue%2Dcolor%29%3Bmargin%2Dbottom%3A5px%3B%7D%2Est%5Fheader%20p%2Erevision%20%7Bdisplay%3A%20inline%2Dblock%3Bwidth%3A70%25%3B%7D%2Est%5Fheader%20div%2Eauthor%20%7Bfont%2Dstyle%3A%20italic%3B%7D%2Est%5Fheader%20div%2Esummary%20%7Bborder%2Dtop%3A%20solid%201px%20%23C0C0C0%3Bbackground%3A%20%23ECECEC%3Bpadding%3A%205px%3B%7D%2Est%5Ffooter%20%7Bfont%2Dsize%3A80%25%3B%7D%2Est%5Ffooter%20img%20%7Bfloat%3A%20right%3B%7D%2Est%5Ffooter%20%2Est%5Fnotice%20%7Bwidth%3A80%25%3B%7D%2Emarkdown%2Dbody%20%23header%2Dsection%2Dnumber%20%7Bfont%2Dsize%3A120%25%3B%7D%2Emarkdown%2Dbody%20h1%20%7Bborder%2Dbottom%3A1px%20solid%3Bborder%2Dcolor%3A%20var%28%2D%2Dmain%2Ddarkblue%2Dcolor%29%3Bpadding%2Dbottom%3A%202px%3Bpadding%2Dtop%3A%2010px%3B%7D%2Emarkdown%2Dbody%20h2%20%7Bpadding%2Dbottom%3A%205px%3Bpadding%2Dtop%3A%2010px%3B%7D%2Emarkdown%2Dbody%20h2%20code%20%7Bbackground%2Dcolor%3A%20rgb%28255%2C%20255%2C%20255%29%3B%7D%23func%2EsourceCode%20%7Bborder%2Dleft%2Dstyle%3A%20solid%3Bborder%2Dcolor%3A%20var%28%2D%2Dsecondary%2Dlightgreen%2Dcolor%29%3B%20border%2Dwidth%3A%204px%3Bpadding%3A0px%3Bmargin%2Dtop%3A%2D10px%3B%7D%23deprecated%2EsourceCode%20%7Bborder%2Dleft%2Dstyle%3A%20ridge%3Bborder%2Dcolor%3A%20var%28%2D%2Dsecondary%2Dpurple%2Dcolor%29%3Bborder%2Dwidth%3A%202px%3Bpadding%2Dtop%3A%2D10px%3Bmargin%2Dtop%3A%2D10px%3B%7D%23code%2EsourceCode%20%7Bborder%2Dleft%2Dstyle%3A%20groove%3Bborder%2Dcolor%3A%20var%28%2D%2Dmain%2Dlightblue%2Dcolor%29%3Bpadding%2Dtop%3A%2D10px%3Bmargin%2Dtop%3A%2D10px%3B%7Dpre%20%3E%20code%20%7Bborder%3A%20solid%201px%20blue%3Bfont%2Dsize%3A60%25%3B%7DcodeXX%20%7Bborder%3A%20solid%201px%20blue%3Bfont%2Dsize%3A60%25%3B%7D%23func%2EsourceXXCode%3A%3Abefore%20%7Bcontent%3A%20%22Synopsis%22%3Bpadding%2Dleft%3A10px%3Bfont%2Dweight%3A%20bold%3B%7Dfigure%20%7Bpadding%3A0px%3Bmargin%2Dleft%3A5px%3Bmargin%2Dright%3A5px%3Bmargin%2Dleft%3A%20auto%3Bmargin%2Dright%3A%20auto%3B%7Dimg%5Bdata%2Dproperty%3D%22center%22%5D%20%7Bdisplay%3A%20block%3Bmargin%2Dtop%3A%2010px%3Bmargin%2Dleft%3A%20auto%3Bmargin%2Dright%3A%20auto%3Bpadding%3A%2010px%3B%7Dfigcaption%20%7Btext%2Dalign%3Aleft%3B%20%20border%2Dtop%3A%201px%20dotted%20%23888%3Bpadding%2Dbottom%3A%2020px%3Bmargin%2Dtop%3A%2010px%3B%7Dh1%20code%2C%20h2%20code%20%7Bfont%2Dsize%3A120%25%3B%7D%09%2Emarkdown%2Dbody%20table%20%7Bwidth%3A%20100%25%3Bmargin%2Dleft%3Aauto%3Bmargin%2Dright%3Aauto%3Bpadding%2Dtop%3A%204px%3B%7D%2Emarkdown%2Dbody%20img%20%7Bborder%2Dradius%3A%204px%3Bpadding%3A%205px%3Bdisplay%3A%20block%3Bmargin%2Dleft%3A%20auto%3Bmargin%2Dright%3A%20auto%3Bwidth%3A%20auto%3B%7D%2Emarkdown%2Dbody%20%2Est%5Fheader%20img%2C%20%2Emarkdown%2Dbody%20%7Bborder%3A%20none%3Bborder%2Dradius%3A%20none%3Bpadding%3A%205px%3Bdisplay%3A%20block%3Bmargin%2Dleft%3A%20auto%3Bmargin%2Dright%3A%20auto%3Bwidth%3A%20auto%3Bbox%2Dshadow%3A%20none%3B%7D%2Emarkdown%2Dbody%20%7Bmargin%3A%2010px%3Bpadding%3A%2010px%3Bwidth%3A%20auto%3Bfont%2Dfamily%3A%20%22Arial%22%2C%20sans%2Dserif%3Bcolor%3A%20%2303234B%3Bcolor%3A%20var%28%2D%2Dmain%2Ddarkblue%2Dcolor%29%7D%2Emarkdown%2Dbody%20h1%2C%20%2Emarkdown%2Dbody%20h2%2C%20%2Emarkdown%2Dbody%20h3%20%7B%20%20%20color%3A%20var%28%2D%2Dmain%2Ddarkblue%2Dcolor%29%7D%2Emarkdown%2Dbody%3Ahover%20%7B%7D%2Emarkdown%2Dbody%20%2Econtents%20%7B%7D%2Emarkdown%2Dbody%20%2Etoc%2Dtitle%20%7B%7D%2Emarkdown%2Dbody%20%2Econtents%20li%20%7Blist%2Dstyle%2Dtype%3A%20none%3B%7D%2Emarkdown%2Dbody%20%2Econtents%20ul%20%7Bpadding%2Dleft%3A%2010px%3B%7D%2Emarkdown%2Dbody%20%2Econtents%20a%20%7Bcolor%3A%20%233CB4E6%3B%20%7D%2Emarkdown%2Dbody%20table%20%2Eheader%20%7Bbackground%2Dcolor%3A%20var%28%2D%2Dsecondary%2Dgrey%2Dcolor%2D12%29%3Bborder%2Dbottom%3A1px%20solid%3Bborder%2Dtop%3A1px%20solid%3Bfont%2Dsize%3A%2090%25%3B%7D%2Emarkdown%2Dbody%20table%20th%20%7Bfont%2Dweight%3A%20bolder%3B%20%7D%2Emarkdown%2Dbody%20table%20td%20%7Bfont%2Dsize%3A%2090%25%3B%7D%2Emarkdown%2Dbody%20code%20%7Bpadding%3A%200%3Bmargin%3A0%3Bfont%2Dsize%3A95%25%3Bbackground%2Dcolor%3Argba%2827%2C31%2C35%2C%2E05%29%3Bborder%2Dradius%3A1px%3B%7D%2Emarkdown%2Dbody%20%23table%5Findex%20%7Bwidth%3A%20100%25%3Bborder%3A%20None%3Btext%2Dalign%3A%20left%3B%7D%2Emarkdown%2Dbody%20%23table%5Findex%20tbody%20tr%20%7Bborder%3A%20None%3B%7D%2Emarkdown%2Dbody%20%23table%5Findex%20tbody%20tr%20th%2C%20%2Emarkdown%2Dbody%20%23table%5Findex%20tbody%20tr%20td%20%7Bborder%3A%20None%3B%7D%2ETips%2C%20%2EAlert%2C%20%2EHTips%20%7Bborder%2Dstyle%3Asolid%3Bborder%2Dwidth%3A2px%3Bborder%2Dradius%3A4px%3Bpadding%3A11px%3Bmargin%2Dbottom%3A24px%3B%7D%2ETips%20%7B%20background%2Dcolor%3A%20var%28%2D%2Dsecondary%2Dyellow%2D25%2Dcolor%29%3Bborder%2Dcolor%3A%20var%28%2D%2Dsecondary%2Dyellow%2D50%2Dcolor%29%3B%7D%2EAlert%20%7B%20background%2Dcolor%3A%20var%28%2D%2Dsecondary%2Dpurple%2D25%2Dcolor%29%3Bborder%2Dcolor%3A%20var%28%2D%2Dsecondary%2Dpurple%2D50%2Dcolor%29%3B%09%7D%2EHTips%20%7B%20background%2Dcolor%3A%20var%28%2D%2Dsecondary%2Ddarkblue%2D15%2Dcolor%29%3Bborder%2Dcolor%3Avar%28%2D%2Dsecondary%2Ddarkblue%2D25%2Dcolor%29%3B%7D%2EHTips%20h1%2C%2EHTips%20h2%2C%2EHTips%20h3%2C%2EHTips%20h4%2C%2EHTips%20h5%2C%2EHTips%20h6%20%7Bcolor%3A%232f363d%3Bmargin%2Dbottom%3A0%7D%2Esidenav%20%7Bfont%2Dfamily%3A%20%22Arial%22%2C%20sans%2Dserif%3B%20%20color%3A%20var%28%2D%2Dmain%2Ddarkblue%2Dcolor%29%3Bheight%3A%20100%25%3Bposition%3A%20fixed%3Bz%2Dindex%3A%201%3Btop%3A%200%3Bleft%3A%200%3Bmargin%2Dright%3A%2010px%3Bmargin%2Dleft%3A%2010px%3B%20overflow%2Dx%3A%20hidden%3B%7D%2Esidenav%20hr%2Enew1%20%7Bborder%2Dwidth%3A%20thin%3Bborder%2Dcolor%3A%20var%28%2D%2Dmain%2Dlightblue%2Dcolor%29%3Bmargin%2Dright%3A%2010px%3Bmargin%2Dtop%3A%20%2D10px%3B%7D%2Esidenav%20%23sidenav%5Fheader%20%7Bmargin%2Dtop%3A%2010px%3Bborder%3A%201px%3Bcolor%3A%20var%28%2D%2Dmain%2Ddarkblue%2Dcolor%29%3Bborder%2Dcolor%3A%20var%28%2D%2Dmain%2Dlightblue%2Dcolor%29%3B%7D%2Esidenav%20%23sidenav%5Fheader%20img%20%7Bfloat%3A%20left%3B%7D%2Esidenav%20%23sidenav%5Fheader%20a%20%7Bmargin%2Dleft%3A%200px%3Bmargin%2Dright%3A%200px%3Bpadding%2Dleft%3A%200px%3B%7D%2Esidenav%20%23sidenav%5Fheader%20a%3Ahover%20%7Bbackground%2Dsize%3A%20auto%3Bcolor%3A%20%23FFD200%3B%20%7D%2Esidenav%20%23sidenav%5Fheader%20a%3Aactive%20%7B%20%20%7D%2Esidenav%20%3E%20ul%20%7Bbackground%2Dcolor%3A%20rgba%2857%2C%20169%2C%20220%2C%200%2E05%29%3B%20color%3A%20var%28%2D%2Dmain%2Ddarkblue%2Dcolor%29%3Bborder%2Dradius%3A%2010px%3Bpadding%2Dbottom%3A%2010px%3Bpadding%2Dtop%3A%2010px%3Bpadding%2Dright%3A%2010px%3Bmargin%2Dright%3A%2010px%3B%7D%2Esidenav%20a%20%7Bpadding%3A%202px%202px%3Btext%2Ddecoration%3A%20none%3Bfont%2Dsize%3A%20var%28%2D%2Dsidenav%2Dfont%2Dsize%29%3Bdisplay%3Atable%3B%7D%2Esidenav%20%3E%20ul%20%3E%20li%2C%2Esidenav%20%3E%20ul%20%3E%20li%20%3E%20ul%20%3E%20li%20%7B%20padding%2Dright%3A%205px%3Bpadding%2Dleft%3A%205px%3B%7D%2Esidenav%20%3E%20ul%20%3E%20li%20%3E%20a%20%7B%20color%3A%20var%28%2D%2Dmain%2Ddarkblue%2Dcolor%29%3Bfont%2Dweight%3A%20lighter%3B%7D%2Esidenav%20%3E%20ul%20%3E%20li%20%3E%20ul%20%3E%20li%20%3E%20a%20%7B%20color%3A%20var%28%2D%2Dmain%2Ddarkblue%2Dcolor%29%3Bfont%2Dsize%3A%2080%25%3Bpadding%2Dleft%3A%2010px%3Btext%2Dalign%2Dlast%3A%20left%3B%7D%2Esidenav%20%3E%20ul%20%3E%20li%20%3E%20ul%20%3E%20li%20%3E%20ul%20%3E%20li%20%3E%20a%20%7B%20display%3A%20None%3B%7D%2Esidenav%20li%20%7Blist%2Dstyle%2Dtype%3A%20none%3B%7D%2Esidenav%20ul%20%7Bpadding%2Dleft%3A%200px%3B%7D%2Esidenav%20%3E%20ul%20%3E%20li%20%3E%20a%3Ahover%2C%2Esidenav%20%3E%20ul%20%3E%20li%20%3E%20ul%20%3E%20li%20%3E%20a%3Ahover%20%7Bbackground%2Dcolor%3A%20var%28%2D%2Dsecondary%2Dgrey%2Dcolor%2D12%29%3Bbackground%2Dclip%3A%20border%2Dbox%3Bmargin%2Dleft%3A%20%2D10px%3Bpadding%2Dleft%3A%2010px%3B%7D%2Esidenav%20%3E%20ul%20%3E%20li%20%3E%20a%3Ahover%20%7Bpadding%2Dright%3A%2015px%3Bwidth%3A%20230px%3B%09%7D%2Esidenav%20%3E%20ul%20%3E%20li%20%3E%20ul%20%3E%20li%20%3E%20a%3Ahover%20%7Bpadding%2Dright%3A%2010px%3Bwidth%3A%20230px%3B%09%7D%2Esidenav%20%3E%20ul%20%3E%20li%20%3E%20a%3Aactive%20%7B%20color%3A%20%23FFD200%3B%20%7D%2Esidenav%20%3E%20ul%20%3E%20li%20%3E%20ul%20%3E%20li%20%3E%20a%3Aactive%20%7B%20color%3A%20%23FFD200%3B%20%7D%2Esidenav%20code%20%7B%7D%2Esidenav%20%7Bwidth%3A%20280px%3B%7D%23sidenav%20%7Bmargin%2Dleft%3A%20300px%3Bdisplay%3Ablock%3B%7D%2Emarkdown%2Dbody%20%2Eprint%2Dcontents%20%7Bvisibility%3Ahidden%3B%7D%2Emarkdown%2Dbody%20%2Eprint%2Dtoc%2Dtitle%20%7Bvisibility%3Ahidden%3B%7D%2Emarkdown%2Dbody%20%7Bmax%2Dwidth%3A%20980px%3Bmin%2Dwidth%3A%20200px%3Bpadding%3A%2040px%3Bborder%2Dstyle%3A%20solid%3Bborder%2Dstyle%3A%20outset%3Bborder%2Dcolor%3A%20rgba%28104%2C%20167%2C%20238%2C%200%2E089%29%3Bborder%2Dradius%3A%205px%3B%7D%40media%20screen%20and%20%28max%2Dheight%3A%20450px%29%20%7B%2Esidenav%20%7Bpadding%2Dtop%3A%2015px%3B%7D%2Esidenav%20a%20%7Bfont%2Dsize%3A%2018px%3B%7D%23sidenav%20%7Bmargin%2Dleft%3A%2010px%3B%20%7D%2Esidenav%20%7Bvisibility%3Ahidden%3B%7D%2Emarkdown%2Dbody%20%7Bmargin%3A%2010px%3Bpadding%3A%2040px%3Bwidth%3A%20auto%3Bborder%3A%200px%3B%7D%7D%40media%20screen%20and%20%28max%2Dwidth%3A%201024px%29%20%7B%2Esidenav%20%7Bvisibility%3Ahidden%3B%7D%2Emarkdown%2Dbody%20%7Bmargin%3A%2010px%3Bpadding%3A%2040px%3Bwidth%3A%20auto%3Bborder%3A%200px%3B%7D%23sidenav%20%7Bmargin%2Dleft%3A%2010px%3B%7D%7D%40media%20print%20%7B%2Esidenav%20%7Bvisibility%3Ahidden%3B%7D%23sidenav%20%7Bmargin%2Dleft%3A%2010px%3B%7D%2Emarkdown%2Dbody%20%7Bmargin%3A%2010px%3Bpadding%3A%2010px%3Bwidth%3Aauto%3Bborder%3A%200px%3B%7D%40page%20%7Bsize%3A%20A4%3B%20%20margin%3A2cm%3Bpadding%3A2cm%3Bmargin%2Dtop%3A%201cm%3Bpadding%2Dbottom%3A%201cm%3B%7D%2A%20%7Bxbox%2Dsizing%3A%20border%2Dbox%3Bfont%2Dsize%3A90%25%3B%7Da%20%7Bfont%2Dsize%3A%20100%25%3Bcolor%3A%20yellow%3B%7D%2Emarkdown%2Dbody%20article%20%7Bxbox%2Dsizing%3A%20border%2Dbox%3Bfont%2Dsize%3A100%25%3B%7D%2Emarkdown%2Dbody%20p%20%7Bwindows%3A%202%3Borphans%3A%202%3B%7D%2Epagebreakerafter%20%7Bpage%2Dbreak%2Dafter%3A%20always%3Bpadding%2Dtop%3A10mm%3B%7D%2Epagebreakbefore%20%7Bpage%2Dbreak%2Dbefore%3A%20always%3B%7Dh1%2C%20h2%2C%20h3%2C%20h4%20%7Bpage%2Dbreak%2Dafter%3A%20avoid%3B%7Ddiv%2C%20code%2C%20blockquote%2C%20li%2C%20span%2C%20table%2C%20figure%20%7Bpage%2Dbreak%2Dinside%3A%20avoid%3B%7D%7D">
<!--[if lt IE 9]>
<script src="//cdnjs.cloudflare.com/ajax/libs/html5shiv/3.7.3/html5shiv-printshiv.min.js"></script>
<![endif]-->
<link rel="shortcut icon" href="data:image/png;base64,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">
</head>
<body>
<div class="sidenav">
<div id="sidenav_header">
<img src="data:image/png;base64,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" title="STM32CubeMX.AI logo" align="left" height="70" />
<br />7.1.0<br />
<a href="#doc_title"> Embedded Inference Client API </a>
</div>
<div id="sidenav_header_button">
<ul>
<li><p><a id="index" href="index.html">[ Index ]</a></p></li>
</ul>
<hr class="new1">
</div>
<ul>
<li><a href="#introduction">Introduction</a>
<ul>
<li><a href="#ref_quick_usage_code">Getting started - Minimal application</a></li>
<li><a href="#ref_crc_usage">CRC IP usage</a></li>
<li><a href="#sec_data_placement">AI buffers and privileged placement</a></li>
<li><a href="#ref_alloc_inputs">I/O buffers inside the “activations” buffer</a></li>
<li><a href="#ref_multiple_heap">Multiple heap support</a></li>
<li><a href="#ref_split_weights">Split weights buffer</a></li>
<li><a href="#thread_safety">Re-entrance and thread safety considerations</a></li>
<li><a href="#debug-support">Debug support</a></li>
<li><a href="#ref_versioning">Versioning</a></li>
</ul></li>
<li><a href="#ref_embedded_client_api">Embedded inference client API</a>
<ul>
<li><a href="#ref_network_defines">AI_<NAME>_XXX C-defines</a></li>
<li><a href="#ref_api_create">ai_<name>_create()</a></li>
<li><a href="#ref_api_init">ai_<name>_init()</a></li>
<li><a href="#ref_api_create_init">ai_<name>_create_and_init()</a></li>
<li><a href="#ref_api_info">ai_<name>_get_report()</a></li>
<li><a href="#ref_api_params">ai_<name>_data_params_get()</a></li>
<li><a href="#ref_api_inputs_get">ai_<name>_[in|out]puts_get()</a></li>
<li><a href="#ref_api_run">ai_<name>_run()</a></li>
<li><a href="#ref_api_get_error">ai_<name>_get_error()</a></li>
</ul></li>
<li><a href="#ref_tensor_def">IO tensor description</a>
<ul>
<li><a href="#ai_buffer-c-structure">ai_buffer C-structure</a></li>
<li><a href="#ref_data_type">Tensor format</a></li>
<li><a href="#sec_life_cycle">Life-cycle of the IO tensors</a></li>
<li><a href="#sec_base_in_address">Base address of the IO buffers</a></li>
<li><a href="#float32-to-8b-data-type-conversion">float32 to 8b data type conversion</a></li>
<li><a href="#b-to-float32-data-type-conversion">8b to float32 data type conversion</a></li>
<li><a href="#c-memory-layouts">C-memory layouts</a></li>
</ul></li>
<li><a href="#references">References</a></li>
</ul>
</div>
<article id="sidenav" class="markdown-body">
<header>
<section class="st_header" id="doc_title">
<div class="himage">
<img src="data:image/png;base64,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" title="STM32CubeMX.AI" align="right" height="70" />
<img src="data:image/png;base64,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" title="STM32" align="right" height="90" />
</div>
<h1 class="title followed-by-subtitle">Embedded Inference Client API</h1>
<p class="subtitle">X-CUBE-AI Expansion Package</p>
<div class="revision">r4.1</div>
<div class="ai_platform">
AI PLATFORM r7.1.0
(Embedded Inference Client API 1.2.0)
</div>
Command Line Interface r1.6.0
</section>
</header>
<section id="introduction" class="level1">
<h1>Introduction</h1>
<p>This article describes the embedded inference client API which must be used by a C-application layer (AI client) to use a deployed C-model. All model-specific definitions and implementations can be found in the generated C-files: <code><name>.c</code>, <code><name>.h</code> and <code><name>_data.h</code> files (refer to <a href="https://www.st.com/resource/en/user_manual/dm00570145.pdf">[UM], <em>“Generated STM32 NN library”</em></a> section). For debug, advanced use-cases and profiling purposes, <a href="api_platform_observer.html">Platform observer API</a> is available (refer to <a href="api_platform_observer.html">[OBS]</a>).</p>
<hr />
<div id="fig:id_nn_lib_integration" class="fignos">
<figure>
<img src="data:image/png;base64,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" property="center" style="width:95.0%" alt="Figure 1: MCU integration model/view and dependencies" /><figcaption aria-hidden="true"><span>Figure 1:</span> MCU integration model/view and dependencies</figcaption>
</figure>
</div>
<p>Above figure shows that the integration of the AI stack in an application is simple and straightforward. There is few or standard SW/HW dependencies with the run-time. Only <a href="#ref_crc_usage">STM32 CRC IP</a> should be clocked to be able to use the inference runtime library. AI client uses the generated model through a set of well-defined <a href="#ref_embedded_client_api"><code>ai_<name>_XXX()</code></a> functions (also called <em>“Embedded inference client API”</em>). The X-CUBE-AI pack provides a compiled library (i.e. network runtime library) by STM32 series and by supported tool-chains.</p>
<section id="ref_quick_usage_code" class="level2">
<h2>Getting started - Minimal application</h2>
<p>The following code snippet provides a typical and minimal example using the API for a 32b floating-point model. The pre-trained model is generated with the default options (i.e. input buffer is not allocated in the “activations” buffer and default <code>network</code> c-name is used). Note that all AI requested client resources (activations buffer and data buffers for the IO) are allocated at compile time thanks the generated macros: <a href="#ref_network_defines"><code>AI_NETWORK_XXX_SIZE</code></a> allowing a minimalist, easier and quick integration.</p>
<div class="sourceCode" id="code"><pre class="sourceCode cpp"><code class="sourceCode cpp"><span id="code-1"><a href="#code-1" aria-hidden="true" tabindex="-1"></a><span class="pp">#include </span><span class="im"><stdio.h></span></span>
<span id="code-2"><a href="#code-2" aria-hidden="true" tabindex="-1"></a></span>
<span id="code-3"><a href="#code-3" aria-hidden="true" tabindex="-1"></a><span class="pp">#include </span><span class="im">"network.h"</span></span>
<span id="code-4"><a href="#code-4" aria-hidden="true" tabindex="-1"></a><span class="pp">#include </span><span class="im">"network_data.h"</span></span>
<span id="code-5"><a href="#code-5" aria-hidden="true" tabindex="-1"></a></span>
<span id="code-6"><a href="#code-6" aria-hidden="true" tabindex="-1"></a><span class="co">/* Global handle to reference the instantiated C-model */</span></span>
<span id="code-7"><a href="#code-7" aria-hidden="true" tabindex="-1"></a><span class="at">static</span> ai_handle network <span class="op">=</span> AI_HANDLE_NULL<span class="op">;</span></span>
<span id="code-8"><a href="#code-8" aria-hidden="true" tabindex="-1"></a></span>
<span id="code-9"><a href="#code-9" aria-hidden="true" tabindex="-1"></a><span class="co">/* Global c-array to handle the activations buffer */</span></span>
<span id="code-10"><a href="#code-10" aria-hidden="true" tabindex="-1"></a>AI_ALIGNED<span class="op">(</span><span class="dv">32</span><span class="op">)</span></span>
<span id="code-11"><a href="#code-11" aria-hidden="true" tabindex="-1"></a><span class="at">static</span> ai_u8 activations<span class="op">[</span>AI_NETWORK_DATA_ACTIVATIONS_SIZE<span class="op">];</span></span>
<span id="code-12"><a href="#code-12" aria-hidden="true" tabindex="-1"></a></span>
<span id="code-13"><a href="#code-13" aria-hidden="true" tabindex="-1"></a><span class="co">/* Array to store the data of the input tensor */</span></span>
<span id="code-14"><a href="#code-14" aria-hidden="true" tabindex="-1"></a>AI_ALIGNED<span class="op">(</span><span class="dv">32</span><span class="op">)</span></span>
<span id="code-15"><a href="#code-15" aria-hidden="true" tabindex="-1"></a><span class="at">static</span> ai_float in_data<span class="op">[</span>AI_NETWORK_IN_1_SIZE<span class="op">];</span></span>
<span id="code-16"><a href="#code-16" aria-hidden="true" tabindex="-1"></a><span class="co">/* or static ai_u8 in_data[AI_NETWORK_IN_1_SIZE_BYTES]; */</span></span>
<span id="code-17"><a href="#code-17" aria-hidden="true" tabindex="-1"></a></span>
<span id="code-18"><a href="#code-18" aria-hidden="true" tabindex="-1"></a><span class="co">/* c-array to store the data of the output tensor */</span></span>
<span id="code-19"><a href="#code-19" aria-hidden="true" tabindex="-1"></a>AI_ALIGNED<span class="op">(</span><span class="dv">32</span><span class="op">)</span></span>
<span id="code-20"><a href="#code-20" aria-hidden="true" tabindex="-1"></a><span class="at">static</span> ai_float out_data<span class="op">[</span>AI_NETWORK_OUT_1_SIZE<span class="op">];</span></span>
<span id="code-21"><a href="#code-21" aria-hidden="true" tabindex="-1"></a><span class="co">/* static ai_u8 out_data[AI_NETWORK_OUT_1_SIZE_BYTES]; */</span></span>
<span id="code-22"><a href="#code-22" aria-hidden="true" tabindex="-1"></a></span>
<span id="code-23"><a href="#code-23" aria-hidden="true" tabindex="-1"></a><span class="co">/* Array of pointer to manage the model's input/output tensors */</span></span>
<span id="code-24"><a href="#code-24" aria-hidden="true" tabindex="-1"></a><span class="at">static</span> ai_buffer <span class="op">*</span>ai_input<span class="op">;</span></span>
<span id="code-25"><a href="#code-25" aria-hidden="true" tabindex="-1"></a><span class="at">static</span> ai_buffer <span class="op">*</span>ai_output<span class="op">;</span></span>
<span id="code-26"><a href="#code-26" aria-hidden="true" tabindex="-1"></a></span>
<span id="code-27"><a href="#code-27" aria-hidden="true" tabindex="-1"></a><span class="co">/* </span></span>
<span id="code-28"><a href="#code-28" aria-hidden="true" tabindex="-1"></a><span class="co"> * Bootstrap</span></span>
<span id="code-29"><a href="#code-29" aria-hidden="true" tabindex="-1"></a><span class="co"> */</span></span>
<span id="code-30"><a href="#code-30" aria-hidden="true" tabindex="-1"></a><span class="dt">int</span> aiInit<span class="op">(</span><span class="dt">void</span><span class="op">)</span> <span class="op">{</span></span>
<span id="code-31"><a href="#code-31" aria-hidden="true" tabindex="-1"></a> ai_error err<span class="op">;</span></span>
<span id="code-32"><a href="#code-32" aria-hidden="true" tabindex="-1"></a> </span>
<span id="code-33"><a href="#code-33" aria-hidden="true" tabindex="-1"></a> <span class="co">/* Create and initialize the c-model */</span></span>
<span id="code-34"><a href="#code-34" aria-hidden="true" tabindex="-1"></a> <span class="at">const</span> ai_handle acts<span class="op">[]</span> <span class="op">=</span> <span class="op">{</span> activations <span class="op">};</span></span>
<span id="code-35"><a href="#code-35" aria-hidden="true" tabindex="-1"></a> err <span class="op">=</span> ai_network_create_and_init<span class="op">(&</span>network<span class="op">,</span> acts<span class="op">,</span> NULL<span class="op">);</span></span>
<span id="code-36"><a href="#code-36" aria-hidden="true" tabindex="-1"></a> <span class="cf">if</span> <span class="op">(</span>err<span class="op">.</span>type <span class="op">!=</span> AI_ERROR_NONE<span class="op">)</span> <span class="op">{</span> <span class="op">...</span> <span class="op">};</span></span>
<span id="code-37"><a href="#code-37" aria-hidden="true" tabindex="-1"></a></span>
<span id="code-38"><a href="#code-38" aria-hidden="true" tabindex="-1"></a> <span class="co">/* Reteive pointers to the model's input/output tensors */</span></span>
<span id="code-39"><a href="#code-39" aria-hidden="true" tabindex="-1"></a> ai_input <span class="op">=</span> ai_network_inputs_get<span class="op">(</span>network<span class="op">);</span></span>
<span id="code-40"><a href="#code-40" aria-hidden="true" tabindex="-1"></a> ai_ouput <span class="op">=</span> ai_network_outputs_get<span class="op">(</span>network<span class="op">);</span></span>
<span id="code-41"><a href="#code-41" aria-hidden="true" tabindex="-1"></a></span>
<span id="code-42"><a href="#code-42" aria-hidden="true" tabindex="-1"></a> <span class="cf">return</span> <span class="dv">0</span><span class="op">;</span></span>
<span id="code-43"><a href="#code-43" aria-hidden="true" tabindex="-1"></a><span class="op">}</span></span>
<span id="code-44"><a href="#code-44" aria-hidden="true" tabindex="-1"></a></span>
<span id="code-45"><a href="#code-45" aria-hidden="true" tabindex="-1"></a><span class="co">/* </span></span>
<span id="code-46"><a href="#code-46" aria-hidden="true" tabindex="-1"></a><span class="co"> * Run inference</span></span>
<span id="code-47"><a href="#code-47" aria-hidden="true" tabindex="-1"></a><span class="co"> */</span></span>
<span id="code-48"><a href="#code-48" aria-hidden="true" tabindex="-1"></a><span class="dt">int</span> aiRun<span class="op">(</span><span class="at">const</span> <span class="dt">void</span> <span class="op">*</span>in_data<span class="op">,</span> <span class="dt">void</span> <span class="op">*</span>out_data<span class="op">)</span> <span class="op">{</span></span>
<span id="code-49"><a href="#code-49" aria-hidden="true" tabindex="-1"></a> ai_i32 n_batch<span class="op">;</span></span>
<span id="code-50"><a href="#code-50" aria-hidden="true" tabindex="-1"></a> ai_error err<span class="op">;</span></span>
<span id="code-51"><a href="#code-51" aria-hidden="true" tabindex="-1"></a> </span>
<span id="code-52"><a href="#code-52" aria-hidden="true" tabindex="-1"></a> <span class="co">/* 1 - Update IO handlers with the data payload */</span></span>
<span id="code-53"><a href="#code-53" aria-hidden="true" tabindex="-1"></a> ai_input<span class="op">[</span><span class="dv">0</span><span class="op">].</span>data <span class="op">=</span> AI_HANDLE_PTR<span class="op">(</span>in_data<span class="op">);</span></span>
<span id="code-54"><a href="#code-54" aria-hidden="true" tabindex="-1"></a> ai_output<span class="op">[</span><span class="dv">0</span><span class="op">].</span>data <span class="op">=</span> AI_HANDLE_PTR<span class="op">(</span>out_data<span class="op">);</span></span>
<span id="code-55"><a href="#code-55" aria-hidden="true" tabindex="-1"></a></span>
<span id="code-56"><a href="#code-56" aria-hidden="true" tabindex="-1"></a> <span class="co">/* 2 - Perform the inference */</span></span>
<span id="code-57"><a href="#code-57" aria-hidden="true" tabindex="-1"></a> n_batch <span class="op">=</span> ai_network_run<span class="op">(</span>network<span class="op">,</span> <span class="op">&</span>ai_input<span class="op">[</span><span class="dv">0</span><span class="op">],</span> <span class="op">&</span>ai_output<span class="op">[</span><span class="dv">0</span><span class="op">]);</span></span>
<span id="code-58"><a href="#code-58" aria-hidden="true" tabindex="-1"></a> <span class="cf">if</span> <span class="op">(</span>n_batch <span class="op">!=</span> <span class="dv">1</span><span class="op">)</span> <span class="op">{</span></span>
<span id="code-59"><a href="#code-59" aria-hidden="true" tabindex="-1"></a> err <span class="op">=</span> ai_network_get_error<span class="op">(</span>network<span class="op">);</span></span>
<span id="code-60"><a href="#code-60" aria-hidden="true" tabindex="-1"></a> <span class="op">...</span></span>
<span id="code-61"><a href="#code-61" aria-hidden="true" tabindex="-1"></a> <span class="op">};</span></span>
<span id="code-62"><a href="#code-62" aria-hidden="true" tabindex="-1"></a> </span>
<span id="code-63"><a href="#code-63" aria-hidden="true" tabindex="-1"></a> <span class="cf">return</span> <span class="dv">0</span><span class="op">;</span></span>
<span id="code-64"><a href="#code-64" aria-hidden="true" tabindex="-1"></a><span class="op">}</span></span>
<span id="code-65"><a href="#code-65" aria-hidden="true" tabindex="-1"></a></span>
<span id="code-66"><a href="#code-66" aria-hidden="true" tabindex="-1"></a><span class="co">/* </span></span>
<span id="code-67"><a href="#code-67" aria-hidden="true" tabindex="-1"></a><span class="co"> * Example of main loop function</span></span>
<span id="code-68"><a href="#code-68" aria-hidden="true" tabindex="-1"></a><span class="co"> */</span></span>
<span id="code-69"><a href="#code-69" aria-hidden="true" tabindex="-1"></a><span class="dt">void</span> main_loop<span class="op">()</span> <span class="op">{</span></span>
<span id="code-70"><a href="#code-70" aria-hidden="true" tabindex="-1"></a> <span class="co">/* The STM32 CRC IP clock should be enabled to use the network runtime library */</span></span>
<span id="code-71"><a href="#code-71" aria-hidden="true" tabindex="-1"></a> __HAL_RCC_CRC_CLK_ENABLE<span class="op">();</span></span>
<span id="code-72"><a href="#code-72" aria-hidden="true" tabindex="-1"></a></span>
<span id="code-73"><a href="#code-73" aria-hidden="true" tabindex="-1"></a> aiInit<span class="op">();</span></span>
<span id="code-74"><a href="#code-74" aria-hidden="true" tabindex="-1"></a></span>
<span id="code-75"><a href="#code-75" aria-hidden="true" tabindex="-1"></a> <span class="cf">while</span> <span class="op">(</span><span class="dv">1</span><span class="op">)</span> <span class="op">{</span></span>
<span id="code-76"><a href="#code-76" aria-hidden="true" tabindex="-1"></a> <span class="co">/* 1 - Acquire, pre-process and fill the input buffers */</span></span>
<span id="code-77"><a href="#code-77" aria-hidden="true" tabindex="-1"></a> acquire_and_process_data<span class="op">(</span>in_data<span class="op">);</span></span>
<span id="code-78"><a href="#code-78" aria-hidden="true" tabindex="-1"></a></span>
<span id="code-79"><a href="#code-79" aria-hidden="true" tabindex="-1"></a> <span class="co">/* 2 - Call inference engine */</span></span>
<span id="code-80"><a href="#code-80" aria-hidden="true" tabindex="-1"></a> aiRun<span class="op">(</span>in_data<span class="op">,</span> out_data<span class="op">);</span></span>
<span id="code-81"><a href="#code-81" aria-hidden="true" tabindex="-1"></a></span>
<span id="code-82"><a href="#code-82" aria-hidden="true" tabindex="-1"></a> <span class="co">/* 3 - Post-process the predictions */</span></span>
<span id="code-83"><a href="#code-83" aria-hidden="true" tabindex="-1"></a> post_process<span class="op">(</span>out_data<span class="op">);</span></span>
<span id="code-84"><a href="#code-84" aria-hidden="true" tabindex="-1"></a> <span class="op">}</span></span>
<span id="code-85"><a href="#code-85" aria-hidden="true" tabindex="-1"></a><span class="op">}</span></span></code></pre></div>
<p>Only the following <code>CFLAGS/LDFLAGS</code> extensions (Embedded GCC-based for ARM tool-chain) are requested to compile the specialized c-files and to add the inference runtime library in a STM32 Cortex-m4 based project.</p>
<div class="sourceCode" id="cb1"><pre class="sourceCode makefile"><code class="sourceCode makefile"><span id="cb1-1"><a href="#cb1-1" aria-hidden="true" tabindex="-1"></a><span class="dt">CFLAGS </span><span class="ch">+=</span><span class="st"> -mcpu=cortex-m4 -mthumb -mfpu=fpv4-sp-d16 -mfloat-abi=hard</span></span>
<span id="cb1-2"><a href="#cb1-2" aria-hidden="true" tabindex="-1"></a></span>
<span id="cb1-3"><a href="#cb1-3" aria-hidden="true" tabindex="-1"></a><span class="dt">CFLAGS </span><span class="ch">+=</span><span class="st"> -IMiddlewares/ST/AI/Lib/Inc</span></span>
<span id="cb1-4"><a href="#cb1-4" aria-hidden="true" tabindex="-1"></a><span class="dt">LDFLAGS </span><span class="ch">+=</span><span class="st"> -LMiddlewares/ST/AI/Lib/Lib -l:NetworkRuntime510_CM4_GCC.a</span></span></code></pre></div>
<div class="Alert">
<p><strong>Warning</strong> — Be aware that all provided inference runtime libraries for the different STM32 series (excluding STM32WL series) are compiled with the FPU enabled and the <code>hard</code> float EABI option for performance reasons.</p>
</div>
</section>
<section id="ref_crc_usage" class="level2">
<h2>CRC IP usage</h2>
<p>To use the network-runtime library, the STM32 CRC IP should be enabled (or clocked) else the application can hang. The STM32 CRC IP is used to check that the library is effectively used on a STM32 device at each call of an <code>ai_<name>_xx()'</code> function. If this IP is used in parallel, the application code must make sure to save/restore its on-going context. Similarly, if the power consumption is privileged, it can be also interesting to enable and to disable the CRC IP between two calls thanks to support of an advanced feature, refer to <a href="crc_ip_support.html">“STM32 CRC IP as shared resource”</a> article to have more fine control granularity.</p>
<p>Note that only the <a href="#ref_api_create"><code>ai_<network>_create()</code></a> function returns a specific <code>ai_error</code> (<code>.type=AI_ERROR_CREATE_FAILED</code>, <code>.code=AI_ERROR_CODE_LOCK</code>) if the CRC IP is not enabled else the other <code>ai_<name>_XX()</code> functions hang.</p>
</section>
<section id="sec_data_placement" class="level2">
<h2>AI buffers and privileged placement</h2>
<p>Application/integration point of view, only three memory-related objects are considered as dimensioning for the system. They are a fixed-size, there is no support for the dynamic tensors meaning that all the sizes and shapes of the tensors are defined/fixed at generation time. Generated c-model can be considered as a static inference model. The system heap is not requested to use the inference C run-time engine.</p>
<ul>
<li>“activations” buffer is a simple contiguous memory-mapped buffer, placed into a read-write memory segment. It is owned and allocated by the AI client. It is passed to the network instance (see <a href="#ref_api_init"><code>ai_<name>_init()</code></a> function) and used as <strong>private heap</strong> (or working buffer) during the execution of the inference to store the intermediate results. Between two <em>runs</em>, the associated memory segment can be used by the application. Its size, <code>AI_<NAME>_DATA_ACTIVATIONS_SIZE</code> is defined during the code generation and corresponds to the reported <a href="evaluation_metrics.html#ref_memory_occupancy"><code>RAM</code></a> metric.</li>
<li>“weights” buffer is a simple contiguous memory-mapped buffer (or multiple memory-mapped buffers with the <a href="#ref_split_weights"><code>--split-weights</code></a> option). It is generally placed into a non-volatile and read-only memory device. The total size, <code>AI_<NAME>_DATA_WEIGHTS_SIZE</code> is defined during the code generation and corresponds to the reported <a href="evaluation_metrics.html#ref_memory_occupancy"><code>ROM</code></a> metric.<br />
</li>
<li>“output” and “input” buffers must be also placed in the read-write memory-mapped buffers. By default, they are owned and provided by the AI client. Their sizes are model dependent and known as generation time (<code>AI_<NAME>_IN/OUT_SIZE_BYTES</code>). They can be also located in the <a href="#sec_alloc_inputs">“activations” buffer</a>.</li>
</ul>
<div id="fig:id_mem_layout_default" class="fignos">
<figure>
<img src="data:image/png;base64,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" property="center" style="width:90.0%" alt="Figure 2: Default data memory layout" /><figcaption aria-hidden="true"><span>Figure 2:</span> Default data memory layout</figcaption>
</figure>
</div>
<p>The kernels (inference runtime library) is executed in the context of the caller, the minimal requested <strong>stack</strong> size can be evaluated at run-time by the <em>aiSystemPerformance</em> application (refer to <a href="https://www.st.com/resource/en/user_manual/dm00570145.pdf">[UM], “AI system performance application”</a> section)</p>
<div class="HTips">
<p><strong>Note</strong> — Placement of these objects are application linker or/and runtime dependent. Additional ROM and RAM for the network runtime library itself and network c-files (txt/rodata/bss and data sections) can be also considered but they are generally not significant to dimension the system in comparison of the requested size the “weighs” and “activations” buffers. However, for the small models, as detailed in [<a href="evaluation_metrics.html#ref_memory_occupancy">]</a>, the <code>--relocatable</code> option allows to refine and to know the requested memory including the kernels w/o parsing and analyzing of the generated firmware map.</p>
</div>
<p>Following table indicates the privileged placement choices to minimize the inference time. According the model, the most constrained memory object is the “activations” buffer.</p>
<table>
<colgroup>
<col style="width: 38%" />
<col style="width: 61%" />
</colgroup>
<thead>
<tr class="header">
<th style="text-align: left;">memory object type</th>
<th style="text-align: left;">preferably placed in</th>
</tr>
</thead>
<tbody>
<tr class="odd">
<td style="text-align: left;">client stack</td>
<td style="text-align: left;">a low latency & high bandwidth device. STM32 embedded SRAM or data-TCM when available (zero wait-state memory).</td>
</tr>
<tr class="even">
<td style="text-align: left;">activations, inputs/outputs</td>
<td style="text-align: left;">a low/medium latency & high bandwidth device. STM32 embedded SRAM first or external RAM. Trade-off is mainly driven by the size and if the STM32 MCU has a data cache (Cortex-M7 family). If <a href="#sec_alloc_inputs">input buffers</a> are not allocated in the “activations” buffer, the “activations” buffer should be privileged.</td>
</tr>
<tr class="odd">
<td style="text-align: left;">weights</td>
<td style="text-align: left;">a medium latency & medium bandwidth device. STM32 embedded FLASH memory or external FLASH. Trade-off is driven by the STM32 MCU data cache availability (Cortex-M7 family), the <a href="#ref_split_weights">weights can be split</a> between different memory devices.</td>
</tr>
</tbody>
</table>
</section>
<section id="ref_alloc_inputs" class="level2">
<h2>I/O buffers inside the “activations” buffer</h2>
<p>The <code>--allocate-inputs</code> (respectively <code>--allocate-outputs</code>) option permits to use the “activations” buffer to allocate the data of the input tensors (respectively the output tensors). At generation time, the minimal size of the “activations” buffer is adapted accordingly. Be aware that the base addresses of the respective memory sub-regions are dependent of the model, they are not necessarily aligned with the base address of the “activations” buffer and are pre-defined/pre-calculated at generation time (see the <a href="#sec_base_in_address">snippet code</a> to find them).</p>
<div id="fig:id_mem_layout_w_inputs" class="fignos">
<figure>
<img src="data:image/png;base64,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" property="center" style="width:90.0%" alt="Figure 3: Data memory layout with --allocate-inputs option" /><figcaption aria-hidden="true"><span>Figure 3:</span> Data memory layout with <code>--allocate-inputs</code> option</figcaption>
</figure>
</div>
<ul>
<li>“external” input buffers (i.e. allocated outside the “activations” buffer) can be always used even if <code>--allocate-inputs</code> option is used.<br />
</li>
<li><code>--allocate-inputs</code> option reserves only the place for <em>one</em> buffer by input tensor. if a double buffer scheme should be implemented, <code>--allocate-inputs</code> flag should be not used.</li>
</ul>
</section>
<section id="ref_multiple_heap" class="level2">
<h2>Multiple heap support</h2>
<p>To optimize usage of the RAM for performance reasons or because the available memory is fragmented between different memory devices (embedded in the device or externally), the activations buffer can be dispatched in different memory segments.</p>
<p>Thanks to the <a href="command_line_interface.html#ref_target_option"><code>--target</code></a> option, the user has the possibility to indicate the available memories (i.e. memory pools) which can be used to place the activation tensors (and/or scratch buffers). During the code generation, the allocator will privilege first the memory pool according to the description order in the JSON file. If a memory pool can be not used (insufficient size), the next will be used if available else an error is generated. The main assumption of the allocator is to consider the first memory pool as the privileged location to place the <em>critical</em> buffers to optimize the inference time. First memory pool should be placed in high throughput, low latency memory device.</p>
<p>Following figure illustrates the case, where the activations buffer is split in 3. The first is placed in the low latency/high throughput memory (like DTCM for STM32H7/F7 series), second is placed in a “normal” internal memory and the last in an external memory. The JSON file is requested to indicate the maximum size of memory segment (<code>"usable_size"</code> key) which could be used by the AI stack allowing to reserve a part of the critical memory resources for other SW objects.</p>
<div id="fig:id_mem_layout_multi_heap" class="fignos">
<figure>
<img src="data:image/png;base64,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" property="center" style="width:90.0%" alt="Figure 4: Data memory layout with multiple heaps" /><figcaption aria-hidden="true"><span>Figure 4:</span> Data memory layout with multiple heaps</figcaption>
</figure>
</div>
<p>Following snippet code illustrates the initialization sequence. The <code>'activationsX'</code> objects will be placed in different memory devices thanks to specific linker directives by the end-user.</p>
<div class="sourceCode" id="code"><pre class="sourceCode cpp"><code class="sourceCode cpp"><span id="code-1"><a href="#code-1" aria-hidden="true" tabindex="-1"></a><span class="op">...</span></span>
<span id="code-2"><a href="#code-2" aria-hidden="true" tabindex="-1"></a>AI_ALIGNED<span class="op">(</span><span class="dv">32</span><span class="op">)</span></span>
<span id="code-3"><a href="#code-3" aria-hidden="true" tabindex="-1"></a><span class="at">static</span> ai_u8 activations1<span class="op">[</span>AI_NETWORK_DATA_ACTIVATIONS_1_SIZE<span class="op">];</span></span>
<span id="code-4"><a href="#code-4" aria-hidden="true" tabindex="-1"></a></span>
<span id="code-5"><a href="#code-5" aria-hidden="true" tabindex="-1"></a>AI_ALIGNED<span class="op">(</span><span class="dv">32</span><span class="op">)</span></span>
<span id="code-6"><a href="#code-6" aria-hidden="true" tabindex="-1"></a><span class="at">static</span> ai_u8 activations2<span class="op">[</span>AI_NETWORK_DATA_ACTIVATIONS_2_SIZE<span class="op">];</span></span>
<span id="code-7"><a href="#code-7" aria-hidden="true" tabindex="-1"></a></span>
<span id="code-8"><a href="#code-8" aria-hidden="true" tabindex="-1"></a>AI_ALIGNED<span class="op">(</span><span class="dv">32</span><span class="op">)</span></span>
<span id="code-9"><a href="#code-9" aria-hidden="true" tabindex="-1"></a><span class="at">static</span> ai_u8 activations3<span class="op">[</span>AI_NETWORK_DATA_ACTIVATIONS_3_SIZE<span class="op">];</span></span>
<span id="code-10"><a href="#code-10" aria-hidden="true" tabindex="-1"></a><span class="op">...</span></span>
<span id="code-11"><a href="#code-11" aria-hidden="true" tabindex="-1"></a><span class="dt">int</span> aiInit<span class="op">(</span><span class="dt">void</span><span class="op">)</span> <span class="op">{</span></span>
<span id="code-12"><a href="#code-12" aria-hidden="true" tabindex="-1"></a> ai_error err<span class="op">;</span></span>
<span id="code-13"><a href="#code-13" aria-hidden="true" tabindex="-1"></a> </span>
<span id="code-14"><a href="#code-14" aria-hidden="true" tabindex="-1"></a> <span class="co">/* Create and initialize the c-model */</span></span>
<span id="code-15"><a href="#code-15" aria-hidden="true" tabindex="-1"></a> <span class="at">const</span> ai_handle acts<span class="op">[]</span> <span class="op">=</span> <span class="op">{</span> activations1<span class="op">,</span> activations2<span class="op">,</span> activations3 <span class="op">};</span></span>
<span id="code-16"><a href="#code-16" aria-hidden="true" tabindex="-1"></a> err <span class="op">=</span> ai_network_create_and_init<span class="op">(&</span>network<span class="op">,</span> acts<span class="op">,</span> NULL<span class="op">);</span></span>
<span id="code-17"><a href="#code-17" aria-hidden="true" tabindex="-1"></a> <span class="cf">if</span> <span class="op">(</span>err<span class="op">.</span>type <span class="op">!=</span> AI_ERROR_NONE<span class="op">)</span> <span class="op">{</span> <span class="op">...</span> <span class="op">};</span></span>
<span id="code-18"><a href="#code-18" aria-hidden="true" tabindex="-1"></a> <span class="op">...</span></span>
<span id="code-19"><a href="#code-19" aria-hidden="true" tabindex="-1"></a><span class="op">}</span></span></code></pre></div>
<p>or without the helper function</p>
<div class="sourceCode" id="code"><pre class="sourceCode cpp"><code class="sourceCode cpp"><span id="code-1"><a href="#code-1" aria-hidden="true" tabindex="-1"></a><span class="op">...</span></span>
<span id="code-2"><a href="#code-2" aria-hidden="true" tabindex="-1"></a><span class="dt">int</span> aiInit<span class="op">(</span><span class="dt">void</span><span class="op">)</span> <span class="op">{</span></span>
<span id="code-3"><a href="#code-3" aria-hidden="true" tabindex="-1"></a> ai_network_params params<span class="op">;</span></span>
<span id="code-4"><a href="#code-4" aria-hidden="true" tabindex="-1"></a></span>
<span id="code-5"><a href="#code-5" aria-hidden="true" tabindex="-1"></a> ai_network_create<span class="op">(&</span>network<span class="op">,</span> NULL<span class="op">);</span></span>
<span id="code-6"><a href="#code-6" aria-hidden="true" tabindex="-1"></a> ai_network_data_params_get<span class="op">(&</span>params<span class="op">);</span></span>
<span id="code-7"><a href="#code-7" aria-hidden="true" tabindex="-1"></a> AI_BUFFER_ARRAY_ITEM_SET_ADDRESS<span class="op">(&</span>params<span class="op">.</span>map_activations<span class="op">,</span> <span class="dv">0</span><span class="op">,</span> activations1<span class="op">);</span></span>
<span id="code-8"><a href="#code-8" aria-hidden="true" tabindex="-1"></a> AI_BUFFER_ARRAY_ITEM_SET_ADDRESS<span class="op">(&</span>params<span class="op">.</span>map_activations<span class="op">,</span> <span class="dv">1</span><span class="op">,</span> activations2<span class="op">);</span></span>
<span id="code-9"><a href="#code-9" aria-hidden="true" tabindex="-1"></a> AI_BUFFER_ARRAY_ITEM_SET_ADDRESS<span class="op">(&</span>params<span class="op">.</span>map_activations<span class="op">,</span> <span class="dv">2</span><span class="op">,</span> activations3<span class="op">);</span></span>
<span id="code-10"><a href="#code-10" aria-hidden="true" tabindex="-1"></a> ai_network_init<span class="op">(</span>network<span class="op">,</span> <span class="op">&</span>params<span class="op">);</span></span>
<span id="code-11"><a href="#code-11" aria-hidden="true" tabindex="-1"></a><span class="op">}</span></span></code></pre></div>
</section>
<section id="ref_split_weights" class="level2">
<h2>Split weights buffer</h2>
<p>The <code>--split-weights</code> option is a convenience to be able to place statically tensor-by-tensor the weights in different STM32 memory segments (on or off-chip) thanks to specific linker directives for the end-user application.</p>
<ul>
<li>it relaxes the placing constraint of a large buffer into a constrained and non-homogenous memory sub-system.<br />
</li>
<li>after profiling, it allows to improve the global inference time, by placing the critical weights into a low latency memory. Or in contrary can free the critical resource (i.e. internal flash) which can be used by the application.</li>
</ul>
<div id="fig:id_mem_split_weights" class="fignos">
<figure>
<img src="data:image/png;base64,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" property="center" style="width:65.0%" alt="Figure 5: Split weights buffer (static placement)" /><figcaption aria-hidden="true"><span>Figure 5:</span> Split weights buffer (static placement)</figcaption>
</figure>
</div>
<p>The <code>--split-weights</code> option prevents the generation of a unique c-array for the whole data of the weights/bias tensors (<code><name>_data.c</code> file) as following:</p>
<div class="sourceCode" id="cb2"><pre class="sourceCode c"><code class="sourceCode c"><span id="cb2-1"><a href="#cb2-1" aria-hidden="true" tabindex="-1"></a>ai_handle ai_network_data_weights_get<span class="op">(</span><span class="dt">void</span><span class="op">)</span></span>
<span id="cb2-2"><a href="#cb2-2" aria-hidden="true" tabindex="-1"></a><span class="op">{</span></span>
<span id="cb2-3"><a href="#cb2-3" aria-hidden="true" tabindex="-1"></a> AI_ALIGNED<span class="op">(</span><span class="dv">4</span><span class="op">)</span></span>
<span id="cb2-4"><a href="#cb2-4" aria-hidden="true" tabindex="-1"></a> <span class="dt">static</span> <span class="dt">const</span> ai_u8 s_network_weights<span class="op">[</span> <span class="dv">794136</span> <span class="op">]</span> <span class="op">=</span> <span class="op">{</span></span>
<span id="cb2-5"><a href="#cb2-5" aria-hidden="true" tabindex="-1"></a> <span class="bn">0xcf</span><span class="op">,</span> <span class="bn">0xae</span><span class="op">,</span> <span class="bn">0x9d</span><span class="op">,</span> <span class="bn">0x3d</span><span class="op">,</span> <span class="bn">0x1b</span><span class="op">,</span> <span class="bn">0x0c</span><span class="op">,</span> <span class="bn">0xd1</span><span class="op">,</span> <span class="bn">0xbd</span><span class="op">,</span> <span class="bn">0x63</span><span class="op">,</span> <span class="bn">0x99</span><span class="op">,</span></span>
<span id="cb2-6"><a href="#cb2-6" aria-hidden="true" tabindex="-1"></a> <span class="bn">0x36</span><span class="op">,</span> <span class="bn">0xbd</span><span class="op">,</span> <span class="bn">0xdb</span><span class="op">,</span> <span class="bn">0x67</span><span class="op">,</span> <span class="bn">0x46</span><span class="op">,</span> <span class="bn">0xbe</span><span class="op">,</span> <span class="bn">0x3b</span><span class="op">,</span> <span class="bn">0xe7</span><span class="op">,</span> <span class="bn">0x0d</span><span class="op">,</span> <span class="bn">0x3e</span><span class="op">,</span></span>
<span id="cb2-7"><a href="#cb2-7" aria-hidden="true" tabindex="-1"></a> <span class="op">...</span></span>
<span id="cb2-8"><a href="#cb2-8" aria-hidden="true" tabindex="-1"></a> <span class="bn">0x41</span><span class="op">,</span> <span class="bn">0xbf</span><span class="op">,</span> <span class="bn">0xc6</span><span class="op">,</span> <span class="bn">0x7d</span><span class="op">,</span> <span class="bn">0x69</span><span class="op">,</span> <span class="bn">0x3e</span><span class="op">,</span> <span class="bn">0x18</span><span class="op">,</span> <span class="bn">0x87</span><span class="op">,</span> <span class="bn">0x37</span><span class="op">,</span></span>
<span id="cb2-9"><a href="#cb2-9" aria-hidden="true" tabindex="-1"></a> <span class="bn">0xbe</span><span class="op">,</span> <span class="bn">0x83</span><span class="op">,</span> <span class="bn">0x63</span><span class="op">,</span> <span class="bn">0x0f</span><span class="op">,</span> <span class="bn">0x3f</span><span class="op">,</span> <span class="bn">0x51</span><span class="op">,</span> <span class="bn">0xa1</span><span class="op">,</span> <span class="bn">0xdd</span><span class="op">,</span> <span class="bn">0xbe</span></span>
<span id="cb2-10"><a href="#cb2-10" aria-hidden="true" tabindex="-1"></a> <span class="op">};</span></span>
<span id="cb2-11"><a href="#cb2-11" aria-hidden="true" tabindex="-1"></a> <span class="cf">return</span> AI_HANDLE_PTR<span class="op">(</span>s_network_weights<span class="op">);</span></span>
<span id="cb2-12"><a href="#cb2-12" aria-hidden="true" tabindex="-1"></a><span class="op">}</span></span></code></pre></div>
<p>A <code>s_<network>_<layer_name>_[bias|weights|*]_array_weights[]</code>) c-array is created to store the data of each weight/bias tensors. A global map table is also built. It is used by the run-time to retrieve the addresses of the different c-arrays.</p>
<div class="sourceCode" id="cb3"><pre class="sourceCode c"><code class="sourceCode c"><span id="cb3-1"><a href="#cb3-1" aria-hidden="true" tabindex="-1"></a><span class="op">...</span></span>
<span id="cb3-2"><a href="#cb3-2" aria-hidden="true" tabindex="-1"></a><span class="co">/* conv2d_1_weights_array - FLOAT|CONST */</span></span>
<span id="cb3-3"><a href="#cb3-3" aria-hidden="true" tabindex="-1"></a>AI_ALIGNED<span class="op">(</span><span class="dv">4</span><span class="op">)</span></span>
<span id="cb3-4"><a href="#cb3-4" aria-hidden="true" tabindex="-1"></a><span class="dt">const</span> ai_u8 s_network_conv2d_1_weights_array_weights<span class="op">[</span> <span class="dv">2048</span> <span class="op">]</span> <span class="op">=</span> <span class="op">{</span></span>
<span id="cb3-5"><a href="#cb3-5" aria-hidden="true" tabindex="-1"></a> <span class="bn">0xcf</span><span class="op">,</span> <span class="bn">0xae</span><span class="op">,</span> <span class="bn">0x9d</span><span class="op">,</span> <span class="bn">0x3d</span><span class="op">,</span> <span class="bn">0x1b</span><span class="op">,</span> <span class="bn">0x0c</span><span class="op">,</span> <span class="bn">0xd1</span><span class="op">,</span> <span class="bn">0xbd</span><span class="op">,</span> <span class="bn">0x63</span><span class="op">,</span> <span class="bn">0x99</span><span class="op">,</span></span>
<span id="cb3-6"><a href="#cb3-6" aria-hidden="true" tabindex="-1"></a><span class="op">...</span></span>
<span id="cb3-7"><a href="#cb3-7" aria-hidden="true" tabindex="-1"></a><span class="op">}</span></span>
<span id="cb3-8"><a href="#cb3-8" aria-hidden="true" tabindex="-1"></a><span class="op">...</span></span>
<span id="cb3-9"><a href="#cb3-9" aria-hidden="true" tabindex="-1"></a><span class="co">/* dense_3_bias_array - FLOAT|CONST */</span></span>
<span id="cb3-10"><a href="#cb3-10" aria-hidden="true" tabindex="-1"></a>AI_ALIGNED<span class="op">(</span><span class="dv">4</span><span class="op">)</span></span>
<span id="cb3-11"><a href="#cb3-11" aria-hidden="true" tabindex="-1"></a><span class="dt">const</span> ai_u8 s_network_dense_3_bias_array_weights<span class="op">[</span> <span class="dv">24</span> <span class="op">]</span> <span class="op">=</span> <span class="op">{</span></span>
<span id="cb3-12"><a href="#cb3-12" aria-hidden="true" tabindex="-1"></a> <span class="bn">0xa2</span><span class="op">,</span> <span class="bn">0x72</span><span class="op">,</span> <span class="bn">0x82</span><span class="op">,</span> <span class="bn">0x3e</span><span class="op">,</span> <span class="bn">0x5a</span><span class="op">,</span> <span class="bn">0x88</span><span class="op">,</span> <span class="bn">0x41</span><span class="op">,</span> <span class="bn">0xbf</span><span class="op">,</span> <span class="bn">0xc6</span><span class="op">,</span> <span class="bn">0x7d</span><span class="op">,</span></span>
<span id="cb3-13"><a href="#cb3-13" aria-hidden="true" tabindex="-1"></a> <span class="bn">0x69</span><span class="op">,</span> <span class="bn">0x3e</span><span class="op">,</span> <span class="bn">0x18</span><span class="op">,</span> <span class="bn">0x87</span><span class="op">,</span> <span class="bn">0x37</span><span class="op">,</span> <span class="bn">0xbe</span><span class="op">,</span> <span class="bn">0x83</span><span class="op">,</span> <span class="bn">0x63</span><span class="op">,</span> <span class="bn">0x0f</span><span class="op">,</span> <span class="bn">0x3f</span><span class="op">,</span></span>
<span id="cb3-14"><a href="#cb3-14" aria-hidden="true" tabindex="-1"></a> <span class="bn">0x51</span><span class="op">,</span> <span class="bn">0xa1</span><span class="op">,</span> <span class="bn">0xdd</span><span class="op">,</span> <span class="bn">0xbe</span></span>
<span id="cb3-15"><a href="#cb3-15" aria-hidden="true" tabindex="-1"></a><span class="op">};</span></span>
<span id="cb3-16"><a href="#cb3-16" aria-hidden="true" tabindex="-1"></a></span>
<span id="cb3-17"><a href="#cb3-17" aria-hidden="true" tabindex="-1"></a><span class="co">/* Entry point to retrieve the address of the c-arrays */</span></span>
<span id="cb3-18"><a href="#cb3-18" aria-hidden="true" tabindex="-1"></a>ai_handle ai_network_data_weights_get<span class="op">(</span><span class="dt">void</span><span class="op">)</span> <span class="op">{</span></span>
<span id="cb3-19"><a href="#cb3-19" aria-hidden="true" tabindex="-1"></a> <span class="dt">static</span> <span class="dt">const</span> ai_u8<span class="op">*</span> <span class="dt">const</span> s_network_params_map_table<span class="op">[]</span> <span class="op">=</span> <span class="op">{</span></span>
<span id="cb3-20"><a href="#cb3-20" aria-hidden="true" tabindex="-1"></a> <span class="op">&</span>s_conv2d_1_weights_array_weights<span class="op">[</span><span class="dv">0</span><span class="op">],</span></span>
<span id="cb3-21"><a href="#cb3-21" aria-hidden="true" tabindex="-1"></a><span class="op">...</span></span>
<span id="cb3-22"><a href="#cb3-22" aria-hidden="true" tabindex="-1"></a> <span class="op">&</span>s_dense_3_bias_array_weights<span class="op">[</span><span class="dv">0</span><span class="op">],</span></span>
<span id="cb3-23"><a href="#cb3-23" aria-hidden="true" tabindex="-1"></a> <span class="op">};</span></span>
<span id="cb3-24"><a href="#cb3-24" aria-hidden="true" tabindex="-1"></a> <span class="cf">return</span> AI_HANDLE_PTR<span class="op">(</span>s_network_params_map_table<span class="op">);</span></span>
<span id="cb3-25"><a href="#cb3-25" aria-hidden="true" tabindex="-1"></a><span class="op">};</span></span></code></pre></div>
<ul>
<li>without particular linker directives, the placement of these multiple c-arrays are always placed in a <code>.rodata</code> section as for the unique c-array.<br />
</li>
<li>client API is not changed. the <code>ai_network_data_weights_get()</code> function is used to pass the entry point of the weights buffer to the <a href="#ref_api_init"><code>ai_<name>_init()</code></a> function.<br />
</li>
<li>as illustrated in the previous figure, <code>const</code> C-attribute can be manually commented to use the default C-startup behavior to copy the data in an initialized RAM data section.</li>
</ul>
</section>
<section id="thread_safety" class="level2">
<h2>Re-entrance and thread safety considerations</h2>
<p>No internal synchronization mechanism is implemented to protect the entry points against concurrent accesses. If the API is used in a multi-threaded context, the protection of the instantiated NN(s) must be guaranteed by the application layer itself. To minimize the usage of the RAM, a same activation memory chunk (<code>SizeSHARED</code>) can be used to support multiple networks. In this case, the user must guarantee that an on-going inference execution cannot be preempted by the execution of another network.</p>
<div class="sourceCode" id="cb4"><pre class="sourceCode c"><code class="sourceCode c"><span id="cb4-1"><a href="#cb4-1" aria-hidden="true" tabindex="-1"></a>SizeSHARED <span class="op">=</span> MAX<span class="op">(</span>AI_<span class="op"><</span>name<span class="op">></span>_DATA_ACTIVATIONS_SIZE<span class="op">)</span> <span class="cf">for</span> name <span class="op">=</span> “net1” … “net2”</span></code></pre></div>
<div class="Tips">
<p><strong>Tip</strong> — If the preemption is expected for real-time constraint or latency reasons, each network instance must have its own and private activations buffer.</p>
</div>
</section>
<section id="debug-support" class="level2">
<h2>Debug support</h2>
<p>The network runtime library must be considered as an optimized black box object in binary format (sources files are not delivered). There is no run-time services allowing to dump internal states. Mapping and port of the model is guaranteed by the X-CUBE-AI generator. Some integration issues can be highlighted by the <code>ai_<name>_get_error()</code> function or by the usage of the <a href="api_platform_observer.html">Platform observer API</a> to inspect the intermediate results.</p>
</section>
<section id="ref_versioning" class="level2">
<h2>Versioning</h2>
<p>A dedicated <code><network>_config.h</code> is generated with the C-defines which allows to know the version of the tool used to generated the specialized NN C-files and the versions of the associated run-time API.</p>
<div class="Alert">
<p><strong>Warning</strong> — Backward or/and forward compatibility is never considered, if a new version of the tool is used to generate the new specialized NN c-files, it is <strong>highly recommended</strong> to update also the associated header files and network run-time library.</p>
</div>
<div class="sourceCode" id="cb5"><pre class="sourceCode c"><code class="sourceCode c"><span id="cb5-1"><a href="#cb5-1" aria-hidden="true" tabindex="-1"></a><span class="co">/* <network>_config.h file */</span></span>
<span id="cb5-2"><a href="#cb5-2" aria-hidden="true" tabindex="-1"></a><span class="pp">#define AI_TOOLS_VERSION_MAJOR 7</span></span>
<span id="cb5-3"><a href="#cb5-3" aria-hidden="true" tabindex="-1"></a><span class="pp">#define AI_TOOLS_VERSION_MINOR 1</span></span>
<span id="cb5-4"><a href="#cb5-4" aria-hidden="true" tabindex="-1"></a><span class="pp">#define AI_TOOLS_VERSION_MICRO 0</span></span>
<span id="cb5-5"><a href="#cb5-5" aria-hidden="true" tabindex="-1"></a></span>
<span id="cb5-6"><a href="#cb5-6" aria-hidden="true" tabindex="-1"></a><span class="pp">#define AI_PLATFORM_API_MAJOR 1</span></span>
<span id="cb5-7"><a href="#cb5-7" aria-hidden="true" tabindex="-1"></a><span class="pp">#define AI_PLATFORM_API_MINOR 2</span></span>
<span id="cb5-8"><a href="#cb5-8" aria-hidden="true" tabindex="-1"></a><span class="pp">#define AI_PLATFORM_API_MICRO 0</span></span>
<span id="cb5-9"><a href="#cb5-9" aria-hidden="true" tabindex="-1"></a></span>
<span id="cb5-10"><a href="#cb5-10" aria-hidden="true" tabindex="-1"></a><span class="pp">#define AI_TOOLS_API_VERSION_MAJOR 1</span></span>
<span id="cb5-11"><a href="#cb5-11" aria-hidden="true" tabindex="-1"></a><span class="pp">#define AI_TOOLS_API_VERSION_MINOR 5</span></span>
<span id="cb5-12"><a href="#cb5-12" aria-hidden="true" tabindex="-1"></a><span class="pp">#define AI_TOOLS_API_VERSION_MICRO 0</span></span></code></pre></div>
<table>
<colgroup>
<col style="width: 34%" />
<col style="width: 65%" />
</colgroup>
<thead>
<tr class="header">
<th style="text-align: left;">type</th>
<th style="text-align: left;">description</th>
</tr>
</thead>
<tbody>
<tr class="odd">
<td style="text-align: left;">AI_TOOLS_VERSION_XX</td>
<td style="text-align: left;">global version to indicate the version of the tool package</td>
</tr>
<tr class="even">
<td style="text-align: left;">AI_PLATFORM_API_XX</td>
<td style="text-align: left;">indicates the version of the generated API or embedded inference client API. Can be used by the application code to check if there is a API break (source level).</td>
</tr>
<tr class="odd">
<td style="text-align: left;">AI_TOOLS_API_VERSION_XX</td>
<td style="text-align: left;">indicates the version of the API which is used by the generated NN c-files to call the network runtime library.</td>
</tr>
</tbody>
</table>
<p>These C-defines can be used by the application code to check at compile time that the version of the used network run-time library is aligned with the generated NN c-files. At run-time, the network runtime library checks strictly only the <code>AI_TOOLS_API</code> versions. The following <code>ai_error</code> will be returned by the <a href="#ref_api_create"><code>ai_<network>_create()</code></a> function is the version is not respected.</p>
<div class="sourceCode" id="cb6"><pre class="sourceCode c"><code class="sourceCode c"><span id="cb6-1"><a href="#cb6-1" aria-hidden="true" tabindex="-1"></a> <span class="op">.</span>code <span class="op">=</span> AI_ERROR_CODE_NETWORK</span>
<span id="cb6-2"><a href="#cb6-2" aria-hidden="true" tabindex="-1"></a> <span class="op">.</span>type <span class="op">=</span> AI_ERROR_TOOL_PLATFORM_API_MISMATCH</span></code></pre></div>
<p>At run-time, <a href="#ref_api_info"><code>ai_<network>_get_report()</code></a> function allows to retrieve the different versions through the <code>ai_network_report</code> C-structure (see <code>ai_platform.h</code> file).</p>
<div class="sourceCode" id="cb7"><pre class="sourceCode c"><code class="sourceCode c"><span id="cb7-1"><a href="#cb7-1" aria-hidden="true" tabindex="-1"></a> <span class="op">.</span>tool_version <span class="co">/* return compiled version of the tool - AI_TOOLS_VERSION_XX */</span></span>
<span id="cb7-2"><a href="#cb7-2" aria-hidden="true" tabindex="-1"></a> <span class="op">.</span>tool_api_version <span class="co">/* return compiled version of the tool API - AI_TOOLS_API_VERSION_XX */</span></span>
<span id="cb7-3"><a href="#cb7-3" aria-hidden="true" tabindex="-1"></a> <span class="op">.</span>api_version <span class="co">/* return compiled version of the embedded client API - AI_PLATFORM_API_XX */</span></span></code></pre></div>
</section>
</section>
<section id="ref_embedded_client_api" class="level1">
<h1>Embedded inference client API</h1>
<section id="ref_network_defines" class="level2">
<h2>AI_<NAME>_XXX C-defines</h2>
<p>Different C-defines are generated in the <code><name>.h</code> and <code><name>_data.h</code> files. They can be used by the application code to allocate at compile time or dynamically the requested buffers, or for debug purpose. At run-time, <a href="#ref_api_info"><code>ai_<network>_get_report()</code></a> can be used to retrieve the requested sizes.</p>
<table>
<colgroup>
<col style="width: 44%" />
<col style="width: 55%" />
</colgroup>
<thead>
<tr class="header">
<th style="text-align: left;">C-defines</th>
<th style="text-align: left;">description</th>
</tr>
</thead>
<tbody>
<tr class="odd">
<td style="text-align: left;"><code>AI_<NAME>_MODEL_NAME</code></td>
<td style="text-align: left;">C-string with the C-name of the model</td>
</tr>
<tr class="even">
<td style="text-align: left;"><code>AI_<NAME>_ORIGIN_MODEL_NAME</code></td>
<td style="text-align: left;">C-string with the original name of the model</td>
</tr>
<tr class="odd">
<td style="text-align: left;"><code>AI_<NAME>_IN/OUT_NUM</code></td>
<td style="text-align: left;">indicates the total number of input/output tensors</td>
</tr>
<tr class="even">
<td style="text-align: left;"><code>AI_<NAME>_IN/OUT_SIZE</code></td>
<td style="text-align: left;">C-table (integer type) to indicate the number of item by input/output tensors (= H x W x C) (see <a href="#ref_tensor_def">“IO tensor description”</a> section)</td>
</tr>
<tr class="odd">
<td style="text-align: left;"><code>AI_<NAME>_IN/OUT_SIZE_BYTES</code></td>
<td style="text-align: left;">C-table (integer type) to indicate the size in bytes by input/output tensors</td>
</tr>
<tr class="even">
<td style="text-align: left;"><code>AI_<NAME>_IN/OUT_x_SIZE</code></td>
<td style="text-align: left;">indicates the total number of item for the x-th input/output tensor</td>
</tr>
<tr class="odd">
<td style="text-align: left;"><code>AI_<NAME>_IN/OUT_x_SIZE_BYTES</code></td>
<td style="text-align: left;">indicates the size in bytes for the x-th input/output tensor (see <a href="#ref_api_run"><code>ai_<name>_run()</code></a> function)</td>
</tr>
<tr class="even">
<td style="text-align: left;"><code>AI_<NAME>_IN/OUT_x_HEIGHT</code></td>
<td style="text-align: left;">indicates the expected “height” dimension value for the x-th input/output tensor</td>
</tr>
<tr class="odd">
<td style="text-align: left;"><code>AI_<NAME>_IN/OUT_x_WIDTH</code></td>
<td style="text-align: left;">indicates the expected “width” dimension value for the x-th input/output tensor</td>
</tr>
<tr class="even">
<td style="text-align: left;"><code>AI_<NAME>_IN/OUT_x_CHANNEL</code></td>
<td style="text-align: left;">indicates the expected “channel” dimension value for the x-th input/output tensor</td>
</tr>
<tr class="odd">
<td style="text-align: left;"><code>AI_<NAME>_DATA_ACTIVATIONS_SIZE</code></td>
<td style="text-align: left;">indicates the minimal size in bytes which must provided by a client application layer as activations buffer (see <a href="#ref_api_init"><code>ai_<name>_init()</code></a> function)</td>
</tr>
<tr class="even">
<td style="text-align: left;"><code>AI_<NAME>_DATA_ACTIVATIONS_COUNT</code></td>
<td style="text-align: left;">indicates the number of activations buffers</td>
</tr>
<tr class="odd">
<td style="text-align: left;"><code>AI_<NAME>_DATA_ACTIVATIONS_x_SIZE</code></td>
<td style="text-align: left;">indicates the size in bytes of the x-th activations buffer</td>
</tr>
<tr class="even">
<td style="text-align: left;"><code>AI_<NAME>_DATA_WEIGHTS_SIZE</code></td>
<td style="text-align: left;">indicates the size in bytes of the generated weights/bias buffer</td>
</tr>
<tr class="odd">
<td style="text-align: left;"><code>AI_<NAME>_INPUTS_IN_ACTIVATIONS</code></td>
<td style="text-align: left;">indicates that the input buffers can be used from the activations buffer. It is <em>only</em> defined if the <code>--allocate-inputs</code> option is used.</td>
</tr>
<tr class="even">
<td style="text-align: left;"><code>AI_<NAME>_OUTPUTS_IN_ACTIVATIONS</code></td>
<td style="text-align: left;">indicates that the outputs buffers can be used from the activations buffer. It is <em>only</em> defined if the <code>--allocate-outputs</code> option is used.</td>
</tr>
</tbody>
</table>
</section>
<section id="ref_api_create" class="level2">
<h2>ai_<name>_create()</h2>
<div class="sourceCode" id="func"><pre class="sourceCode cpp"><code class="sourceCode cpp"><span id="func-1"><a href="#func-1" aria-hidden="true" tabindex="-1"></a>ai_error <span class="va">ai_</span><span class="op"><</span>name<span class="op">></span>_create<span class="op">(</span>ai_handle<span class="op">*</span> network<span class="op">,</span> <span class="at">const</span> ai_buffer<span class="op">*</span> network_config<span class="op">);</span></span>
<span id="func-2"><a href="#func-2" aria-hidden="true" tabindex="-1"></a>ai_handle <span class="va">ai_</span><span class="op"><</span>name<span class="op">></span>_destroy<span class="op">(</span>ai_handle network<span class="op">);</span></span></code></pre></div>
<p>This <strong>mandatory</strong> function is the <em>early</em> function which must be called by the application to create an instance of the c-model. Provided <code>ai_handle</code> object is updated and it references a context (opaque object) which should be passed to the other functions.</p>
<ul>
<li><code>network_config</code> parameter is a specific network configuration buffer (opaque structure) coded as a <code>ai_buffer</code>. It is generated by the code generator and should be <em>not modified</em> by the application. Currently, this object is always empty and <code>NULL</code> can be passed but it is preferable to pass <code>AI_NETWORK_DATA_CONFIG</code> (see <code><name>_data.h</code> file).</li>
</ul>
<p>When the instance is no more used by the application, <code>ai_<name>_destroy()</code> function should be called to release the possible allocated resources.</p>
<div class="HTips">
<p><strong>Note</strong> — The <a href="#ref_crc_usage">STM32 CRC IP</a> should be enabled before to call the <code>ai_<network>_create()</code> function else the following <code>ai_error</code> is returned: <code>(.type =AI_ERROR_CREATE_FAILED, .code=AI_ERROR_CODE_LOCK)</code>.</p>
</div>
<div class="Alert">
<p><strong>Warning</strong> — Only one instance by a c-model is supported. Returned <code>ai_handle</code> references always the same object. Consequently a same C-model can be not used in a pre-emptive runtime environment w/o additional <a href="#thread_safety">user synchronization mechanism</a>.</p>
</div>
</section>
<section id="ref_api_init" class="level2">
<h2>ai_<name>_init()</h2>
<div class="sourceCode" id="func"><pre class="sourceCode cpp"><code class="sourceCode cpp"><span id="func-1"><a href="#func-1" aria-hidden="true" tabindex="-1"></a>ai_bool <span class="va">ai_</span><span class="op"><</span>name<span class="op">></span>_init<span class="op">(</span>ai_handle network<span class="op">,</span> <span class="at">const</span> ai_network_params<span class="op">*</span> params<span class="op">);</span></span></code></pre></div>
<p>This <strong>mandatory</strong> function is used by the application to initialize the internal run-time data structures and to set the activations buffer and weights buffer.</p>
<ul>
<li><code>params</code> parameter is a structure (<code>ai_network_params</code> type) which allows to pass the references of the weights and the activations buffers (array format)</li>
<li><code>network</code> handle should be a valid handle, see <a href="#ref_api_create"><code>ai_<name>_create()</code></a> function</li>
</ul>
<p>The <a href="#ref_api_params"><code>ai_network_data_params_get()</code></a> function must be used to retreive an initialized object (see <code>network_data.c</code> file). <code>'AI_BUFFER_ARRAY_ITEM_SET_ADDRESS()'</code> C-macro can be used to set the address of the underlying memory segment. Usage of the <a href="#ref_api_create_init"><code>ai_network_create_and_init()</code></a> helper function is privileged for the default UCs.</p>
<div class="sourceCode" id="code"><pre class="sourceCode cpp"><code class="sourceCode cpp"><span id="code-1"><a href="#code-1" aria-hidden="true" tabindex="-1"></a><span class="pp">#include </span><span class="im">"network.h"</span></span>
<span id="code-2"><a href="#code-2" aria-hidden="true" tabindex="-1"></a><span class="pp">#include </span><span class="im">"network_data.h"</span></span>
<span id="code-3"><a href="#code-3" aria-hidden="true" tabindex="-1"></a></span>
<span id="code-4"><a href="#code-4" aria-hidden="true" tabindex="-1"></a>AI_ALIGNED<span class="op">(</span><span class="dv">32</span><span class="op">)</span></span>
<span id="code-5"><a href="#code-5" aria-hidden="true" tabindex="-1"></a><span class="at">static</span> ai_u8 activations<span class="op">[</span>AI_NETWORK_DATA_ACTIVATIONS_SIZE<span class="op">];</span></span>
<span id="code-6"><a href="#code-6" aria-hidden="true" tabindex="-1"></a><span class="op">...</span></span>
<span id="code-7"><a href="#code-7" aria-hidden="true" tabindex="-1"></a>ai_network_params params<span class="op">;</span></span>
<span id="code-8"><a href="#code-8" aria-hidden="true" tabindex="-1"></a></span>
<span id="code-9"><a href="#code-9" aria-hidden="true" tabindex="-1"></a>ai_network_data_params_get<span class="op">(&</span>params<span class="op">);</span></span>
<span id="code-10"><a href="#code-10" aria-hidden="true" tabindex="-1"></a>AI_BUFFER_ARRAY_ITEM_SET_ADDRESS<span class="op">(&</span>params<span class="op">.</span>map_activations<span class="op">,</span> <span class="dv">0</span><span class="op">,</span> activations<span class="op">);</span></span>
<span id="code-11"><a href="#code-11" aria-hidden="true" tabindex="-1"></a></span>
<span id="code-12"><a href="#code-12" aria-hidden="true" tabindex="-1"></a>ai_network_init<span class="op">(</span>network<span class="op">,</span> <span class="op">&</span>params<span class="op">);</span></span></code></pre></div>
</section>
<section id="ref_api_create_init" class="level2">
<h2>ai_<name>_create_and_init()</h2>
<div class="sourceCode" id="func"><pre class="sourceCode cpp"><code class="sourceCode cpp"><span id="func-1"><a href="#func-1" aria-hidden="true" tabindex="-1"></a>ai_error <span class="va">ai_</span><span class="op"><</span>name<span class="op">></span>_create_and_init<span class="op">(</span>ai_handle<span class="op">*</span> network<span class="op">,</span></span>
<span id="func-2"><a href="#func-2" aria-hidden="true" tabindex="-1"></a> <span class="at">const</span> ai_handle activations<span class="op">[],</span> <span class="at">const</span> ai_handle weights<span class="op">[]);</span></span></code></pre></div>
<p>This helper function aggregates the call of the <a href="#ref_api_create">create</a> and <a href="#ref_api_init">init</a> functions (see code in the generated <code>'network.c'</code> file). It allows to pass a simple array of pointers (<code>'ai_handle'</code>) to pass the addreses of the activations buffers and optionally the addresses of the weights buffers.</p>
<div class="sourceCode" id="code"><pre class="sourceCode cpp"><code class="sourceCode cpp"><span id="code-1"><a href="#code-1" aria-hidden="true" tabindex="-1"></a><span class="pp">#include </span><span class="im">"network.h"</span></span>
<span id="code-2"><a href="#code-2" aria-hidden="true" tabindex="-1"></a><span class="pp">#include </span><span class="im">"network_data.h"</span></span>
<span id="code-3"><a href="#code-3" aria-hidden="true" tabindex="-1"></a></span>
<span id="code-4"><a href="#code-4" aria-hidden="true" tabindex="-1"></a>AI_ALIGNED<span class="op">(</span><span class="dv">32</span><span class="op">)</span></span>
<span id="code-5"><a href="#code-5" aria-hidden="true" tabindex="-1"></a><span class="at">static</span> ai_u8 activations<span class="op">[</span>AI_NETWORK_DATA_ACTIVATIONS_SIZE<span class="op">];</span></span>
<span id="code-6"><a href="#code-6" aria-hidden="true" tabindex="-1"></a><span class="op">...</span></span>
<span id="code-7"><a href="#code-7" aria-hidden="true" tabindex="-1"></a><span class="at">const</span> ai_handle acts<span class="op">[]</span> <span class="op">=</span> <span class="op">{</span> activations <span class="op">};</span></span>
<span id="code-8"><a href="#code-8" aria-hidden="true" tabindex="-1"></a></span>
<span id="code-9"><a href="#code-9" aria-hidden="true" tabindex="-1"></a>ai_network_create_and_init<span class="op">(&</span>network<span class="op">,</span> acts<span class="op">,</span> NULL<span class="op">);</span></span></code></pre></div>
</section>
<section id="ref_api_info" class="level2">
<h2>ai_<name>_get_report()</h2>
<div class="sourceCode" id="func"><pre class="sourceCode cpp"><code class="sourceCode cpp"><span id="func-1"><a href="#func-1" aria-hidden="true" tabindex="-1"></a>ai_bool <span class="va">ai_</span><span class="op"><</span>name<span class="op">></span>_get_info<span class="op">(</span>ai_handle network<span class="op">,</span> ai_network_report<span class="op">*</span> report<span class="op">);</span></span></code></pre></div>
<p>This function allows to retrieve the run-time data attributes of an instantiated model. Refer to <code>ai_platform.h</code> file to show the details of the returned <code>ai_network_report</code> C-structure.</p>
<div class="Alert">
<p><strong>Warning</strong> — If it is called before the <a href="#ref_api_init"><code>ai_<name>_init()</code></a> (or <a href="#ref_api_create_init"><code>ai_<name>_create_and_init()</code></a>), the reported information for the <code>activations</code>, <code>params</code>, <code>* inputs</code> and <code>* outputs</code> fields will be uncompleted. In particular the effective addresses of the buffers (the instance is not yet fully initialized), but all static information are available.</p>
</div>
<p><strong>Typical usage</strong></p>
<div class="sourceCode" id="code"><pre class="sourceCode cpp"><code class="sourceCode cpp"><span id="code-1"><a href="#code-1" aria-hidden="true" tabindex="-1"></a><span class="pp">#include </span><span class="im">"network.h"</span></span>
<span id="code-2"><a href="#code-2" aria-hidden="true" tabindex="-1"></a><span class="op">...</span></span>
<span id="code-3"><a href="#code-3" aria-hidden="true" tabindex="-1"></a>ai_network_report report<span class="op">;</span></span>
<span id="code-4"><a href="#code-4" aria-hidden="true" tabindex="-1"></a>ai_bool res<span class="op">;</span></span>
<span id="code-5"><a href="#code-5" aria-hidden="true" tabindex="-1"></a><span class="op">...</span></span>
<span id="code-6"><a href="#code-6" aria-hidden="true" tabindex="-1"></a> res <span class="op">=</span> ai_network_get_report<span class="op">(</span>network<span class="op">,</span> <span class="op">&</span>report<span class="op">)</span></span>
<span id="code-7"><a href="#code-7" aria-hidden="true" tabindex="-1"></a> <span class="cf">if</span> <span class="op">(</span>res<span class="op">)</span> <span class="op">{</span> <span class="co">/* display the report */</span> <span class="op">}</span></span></code></pre></div>
<p>Example of possible reported informations</p>
<div class="sourceCode" id="cb8"><pre class="sourceCode powershell"><code class="sourceCode powershell"><span id="cb8-1"><a href="#cb8-1" aria-hidden="true" tabindex="-1"></a>Network information</span>
<span id="cb8-2"><a href="#cb8-2" aria-hidden="true" tabindex="-1"></a><span class="op">---------------------------------------------------</span></span>
<span id="cb8-3"><a href="#cb8-3" aria-hidden="true" tabindex="-1"></a> model_name <span class="op">:</span> network</span>
<span id="cb8-4"><a href="#cb8-4" aria-hidden="true" tabindex="-1"></a> model_signature <span class="op">:</span> e38d1b6095099638ae20a42e53398dd7</span>
<span id="cb8-5"><a href="#cb8-5" aria-hidden="true" tabindex="-1"></a> model_datetime <span class="op">:</span> Mon Nov 29 19<span class="op">:</span>40<span class="op">:</span>02 2021</span>
<span id="cb8-6"><a href="#cb8-6" aria-hidden="true" tabindex="-1"></a> compile_datetime <span class="op">:</span> Nov 30 2021 06<span class="op">:</span>52<span class="op">:</span>31</span>
<span id="cb8-7"><a href="#cb8-7" aria-hidden="true" tabindex="-1"></a> tool_version <span class="op">:</span> 7<span class="op">.</span><span class="fu">1</span><span class="op">.</span><span class="fu">0</span></span>
<span id="cb8-8"><a href="#cb8-8" aria-hidden="true" tabindex="-1"></a> tool_api_version <span class="op">:</span> 1<span class="op">.</span><span class="fu">5</span><span class="op">.</span><span class="fu">0</span></span>
<span id="cb8-9"><a href="#cb8-9" aria-hidden="true" tabindex="-1"></a> api_version <span class="op">:</span> 1<span class="op">.</span><span class="fu">2</span><span class="op">.</span><span class="fu">0</span></span>
<span id="cb8-10"><a href="#cb8-10" aria-hidden="true" tabindex="-1"></a> n_macc <span class="op">:</span> 336088</span>
<span id="cb8-11"><a href="#cb8-11" aria-hidden="true" tabindex="-1"></a> map_activations <span class="op">:</span> 1</span>
<span id="cb8-12"><a href="#cb8-12" aria-hidden="true" tabindex="-1"></a> shape<span class="op">=(</span>1<span class="op">,</span> 1<span class="op">,</span> 1<span class="op">,</span> 5712<span class="op">)</span> size<span class="op">=</span>5712 <span class="fu">type</span><span class="op">=</span>2 <span class="op">(</span>bits<span class="op">=</span>8 fbits<span class="op">=</span>0 sign<span class="op">=+)</span></span>
<span id="cb8-13"><a href="#cb8-13" aria-hidden="true" tabindex="-1"></a> map_weights <span class="op">:</span> 1</span>
<span id="cb8-14"><a href="#cb8-14" aria-hidden="true" tabindex="-1"></a> shape<span class="op">=(</span>1<span class="op">,</span> 1<span class="op">,</span> 1<span class="op">,</span> 16688<span class="op">)</span> size<span class="op">=</span>16688 <span class="fu">type</span><span class="op">=</span>2 <span class="op">(</span>bits<span class="op">=</span>8 fbits<span class="op">=</span>0 sign<span class="op">=+)</span></span>
<span id="cb8-15"><a href="#cb8-15" aria-hidden="true" tabindex="-1"></a> n_inputs <span class="op">:</span> 1</span>
<span id="cb8-16"><a href="#cb8-16" aria-hidden="true" tabindex="-1"></a> shape<span class="op">=(</span>1<span class="op">,</span> 1<span class="op">,</span> 1<span class="op">,</span> 1960<span class="op">)</span> size<span class="op">=</span>1960 <span class="fu">type</span><span class="op">=</span>2 <span class="op">(</span>bits<span class="op">=</span>8 fbits<span class="op">=</span>0 sign<span class="op">=-)</span></span>
<span id="cb8-17"><a href="#cb8-17" aria-hidden="true" tabindex="-1"></a> quantized scale<span class="op">=</span>0<span class="op">.</span><span class="fu">101716</span> zp<span class="op">=-</span>128</span>
<span id="cb8-18"><a href="#cb8-18" aria-hidden="true" tabindex="-1"></a> n_outputs <span class="op">:</span> 1</span>
<span id="cb8-19"><a href="#cb8-19" aria-hidden="true" tabindex="-1"></a> shape<span class="op">=(</span>1<span class="op">,</span> 1<span class="op">,</span> 1<span class="op">,</span> 4<span class="op">)</span> size<span class="op">=</span>4 <span class="fu">type</span><span class="op">=</span>2 <span class="op">(</span>bits<span class="op">=</span>8 fbits<span class="op">=</span>0 sign<span class="op">=-)</span></span>
<span id="cb8-20"><a href="#cb8-20" aria-hidden="true" tabindex="-1"></a> quantized scale<span class="op">=</span>0<span class="op">.</span><span class="fu">003906</span> zp<span class="op">=-</span>128</span></code></pre></div>
</section>
<section id="ref_api_params" class="level2">
<h2>ai_<name>_data_params_get()</h2>
<div class="sourceCode" id="func"><pre class="sourceCode cpp"><code class="sourceCode cpp"><span id="func-1"><a href="#func-1" aria-hidden="true" tabindex="-1"></a>ai_bool <span class="va">ai_</span><span class="op"><</span>name<span class="op">></span>_data_params_get<span class="op">(</span>ai_network_params<span class="op">*</span> params<span class="op">);</span></span></code></pre></div>
<p>This function allows to retreive the network param configuration data structure. It should be used to update it and to pass it to the <a href="#ref_api_init">init</a> function.</p>
</section>
<section id="ref_api_inputs_get" class="level2">
<h2>ai_<name>_[in|out]puts_get()</h2>
<div class="sourceCode" id="func"><pre class="sourceCode cpp"><code class="sourceCode cpp"><span id="func-1"><a href="#func-1" aria-hidden="true" tabindex="-1"></a>ai_buffer<span class="op">*</span> <span class="va">ai_</span><span class="op"><</span>name<span class="op">></span>_inputs_get<span class="op">(</span>ai_handle<span class="op">*</span> network<span class="op">,</span> ai_u16 <span class="op">*</span>n_buffer<span class="op">);</span></span>
<span id="func-2"><a href="#func-2" aria-hidden="true" tabindex="-1"></a>ai_buffer<span class="op">*</span> <span class="va">ai_</span><span class="op"><</span>name<span class="op">></span>_outputs_get<span class="op">(</span>ai_handle<span class="op">*</span> network<span class="op">,</span> ai_u16 <span class="op">*</span>n_buffer<span class="op">);</span></span></code></pre></div>
<p>These functions return inputs/outputs array pointer as a ai_buffer array pointer. If provided <code>n_buffer</code> allows to store the number of model inputs/outputs.</p>
</section>
<section id="ref_api_run" class="level2">
<h2>ai_<name>_run()</h2>
<div class="sourceCode" id="func"><pre class="sourceCode cpp"><code class="sourceCode cpp"><span id="func-1"><a href="#func-1" aria-hidden="true" tabindex="-1"></a>ai_i32 <span class="va">ai_</span><span class="op"><</span>name<span class="op">></span>_run<span class="op">(</span>ai_handle network<span class="op">,</span> <span class="at">const</span> ai_buffer<span class="op">*</span> input<span class="op">,</span> ai_buffer<span class="op">*</span> output<span class="op">);</span></span></code></pre></div>
<p>This function is called to feed the neural network. The input and output buffer parameters (<code>ai_buffer</code> type) allow to provide the input tensors and to store the predicted output tensors respectively (see “<a href="#ref_tensor_def">IO tensor description</a>” section).</p>
<ul>
<li>Returned value is the number of the input tensors processed when n_batches >= 1. If <=0 ,<a href="#ref_api_get_error"><code>ai_network_get_error()</code></a> function should be used to know the error</li>
</ul>
<div class="Tips">
<p><strong>Tip</strong> — Two separate array of inputs and outputs <code>ai_buffer</code> should be passed. This permits to support a neural network model with multiple inputs or/and outputs. <code>AI_NETWORK_IN_NUM</code> and respectively <code>AI_NETWORK_OUT_NUM</code> helper macro can be used to know at compile-time the number of inputs and outputs. These values are also returned by the <code>struct ai_network_report</code> (see <a href="#ref_api_info"><code>ai_<name>_get_report()</code></a> function).</p>
</div>
<p><strong>Typical usages</strong></p>
<p>Default UC is illustrated by the <a href="#ref_quick_usage_code">“Getting starting”</a> code snippet. Following code is an example with a C-model which has one input and two output tensors. Note that the data payload of the <a href="#ref_alloc_inputs">input buffers</a> are also used in the “activations” buffer.</p>
<div class="sourceCode" id="code"><pre class="sourceCode cpp"><code class="sourceCode cpp"><span id="code-1"><a href="#code-1" aria-hidden="true" tabindex="-1"></a><span class="pp">#include </span><span class="im"><stdio.h></span></span>
<span id="code-2"><a href="#code-2" aria-hidden="true" tabindex="-1"></a><span class="pp">#include </span><span class="im">"network.h"</span></span>
<span id="code-3"><a href="#code-3" aria-hidden="true" tabindex="-1"></a><span class="op">...</span></span>
<span id="code-4"><a href="#code-4" aria-hidden="true" tabindex="-1"></a><span class="co">/* C-table to store the @ of the input buffer */</span></span>
<span id="code-5"><a href="#code-5" aria-hidden="true" tabindex="-1"></a><span class="at">static</span> ai_float <span class="op">*</span>in_data<span class="op">[</span>AI_NETWORK_IN_NUM<span class="op">];</span></span>
<span id="code-6"><a href="#code-6" aria-hidden="true" tabindex="-1"></a></span>
<span id="code-7"><a href="#code-7" aria-hidden="true" tabindex="-1"></a><span class="co">/* AI input/output handlers */</span></span>
<span id="code-8"><a href="#code-8" aria-hidden="true" tabindex="-1"></a><span class="at">static</span> ai_buffer <span class="op">*</span>ai_inputs<span class="op">;</span></span>
<span id="code-9"><a href="#code-9" aria-hidden="true" tabindex="-1"></a><span class="at">static</span> ai_buffer <span class="op">*</span>ai_outputs<span class="op">;</span></span>
<span id="code-10"><a href="#code-10" aria-hidden="true" tabindex="-1"></a></span>
<span id="code-11"><a href="#code-11" aria-hidden="true" tabindex="-1"></a><span class="co">/* data buffer for the output buffers */</span></span>
<span id="code-12"><a href="#code-12" aria-hidden="true" tabindex="-1"></a><span class="at">static</span> ai_float out_1_data<span class="op">[</span>AI_NETWORK_OUT_1_SIZE<span class="op">];</span></span>
<span id="code-13"><a href="#code-13" aria-hidden="true" tabindex="-1"></a><span class="at">static</span> ai_float out_2_data<span class="op">[</span>AI_NETWORK_OUT_2_SIZE<span class="op">];</span></span>
<span id="code-14"><a href="#code-14" aria-hidden="true" tabindex="-1"></a></span>
<span id="code-15"><a href="#code-15" aria-hidden="true" tabindex="-1"></a><span class="co">/* C-table to store the @ of the output buffers */</span></span>
<span id="code-16"><a href="#code-16" aria-hidden="true" tabindex="-1"></a><span class="at">static</span> ai_float<span class="op">*</span> out_data<span class="op">[</span>AI_NETWORK_OUT_NUM<span class="op">]</span> <span class="op">=</span> <span class="op">{</span></span>
<span id="code-17"><a href="#code-17" aria-hidden="true" tabindex="-1"></a> <span class="op">&</span>out_1_data<span class="op">[</span><span class="dv">0</span><span class="op">],</span></span>
<span id="code-18"><a href="#code-18" aria-hidden="true" tabindex="-1"></a> <span class="op">&</span>out_2_data<span class="op">[</span><span class="dv">0</span><span class="op">]</span></span>
<span id="code-19"><a href="#code-19" aria-hidden="true" tabindex="-1"></a> <span class="op">}</span></span>
<span id="code-20"><a href="#code-20" aria-hidden="true" tabindex="-1"></a></span>
<span id="code-21"><a href="#code-21" aria-hidden="true" tabindex="-1"></a><span class="op">...</span></span>
<span id="code-22"><a href="#code-22" aria-hidden="true" tabindex="-1"></a><span class="dt">int</span> aiInit<span class="op">(</span><span class="dt">void</span><span class="op">)</span> <span class="op">{</span></span>
<span id="code-23"><a href="#code-23" aria-hidden="true" tabindex="-1"></a> <span class="op">...</span></span>
<span id="code-24"><a href="#code-24" aria-hidden="true" tabindex="-1"></a> <span class="co">/* 1 - Create and initialize network */</span></span>
<span id="code-25"><a href="#code-25" aria-hidden="true" tabindex="-1"></a> <span class="op">...</span></span>
<span id="code-26"><a href="#code-26" aria-hidden="true" tabindex="-1"></a></span>
<span id="code-27"><a href="#code-27" aria-hidden="true" tabindex="-1"></a> <span class="co">/* 2 - Retrieve IO network infos */</span></span>
<span id="code-28"><a href="#code-28" aria-hidden="true" tabindex="-1"></a> ai_input <span class="op">=</span> ai_network_inputs_get<span class="op">(</span>network<span class="op">);</span></span>
<span id="code-29"><a href="#code-29" aria-hidden="true" tabindex="-1"></a> ai_ouput <span class="op">=</span> ai_network_outputs_get<span class="op">(</span>network<span class="op">);</span></span>
<span id="code-30"><a href="#code-30" aria-hidden="true" tabindex="-1"></a></span>
<span id="code-31"><a href="#code-31" aria-hidden="true" tabindex="-1"></a> <span class="co">/* 3 - Retreive the effective @ of the input buffers */</span></span>
<span id="code-32"><a href="#code-32" aria-hidden="true" tabindex="-1"></a> <span class="cf">for</span> <span class="op">(</span><span class="dt">int</span> i<span class="op">=</span><span class="dv">0</span><span class="op">;</span> i <span class="op"><</span> AI_NETWORK_IN_NUM<span class="op">;</span> i<span class="op">++)</span> <span class="op">{</span></span>
<span id="code-33"><a href="#code-33" aria-hidden="true" tabindex="-1"></a> in_data<span class="op">[</span>i<span class="op">]</span> <span class="op">=</span> <span class="op">(</span>ai_u8 <span class="op">*)(</span>ai_inputs<span class="op">[</span>i<span class="op">].</span>data<span class="op">);</span></span>
<span id="code-34"><a href="#code-34" aria-hidden="true" tabindex="-1"></a> <span class="op">}</span></span>
<span id="code-35"><a href="#code-35" aria-hidden="true" tabindex="-1"></a></span>
<span id="code-36"><a href="#code-36" aria-hidden="true" tabindex="-1"></a> <span class="co">/* 4- Update the AI output handlers */</span></span>
<span id="code-37"><a href="#code-37" aria-hidden="true" tabindex="-1"></a> <span class="cf">for</span> <span class="op">(</span><span class="dt">int</span> i<span class="op">=</span><span class="dv">0</span><span class="op">;</span> i <span class="op"><</span> AI_NETWORK_OUT_NUM<span class="op">;</span> i<span class="op">++)</span> <span class="op">{</span></span>
<span id="code-38"><a href="#code-38" aria-hidden="true" tabindex="-1"></a> ai_outputs<span class="op">[</span>i<span class="op">].</span>data <span class="op">=</span> AI_HANDLE_PTR<span class="op">(&</span>out_data<span class="op">[</span>i<span class="op">]);</span></span>
<span id="code-39"><a href="#code-39" aria-hidden="true" tabindex="-1"></a> <span class="op">}</span></span>
<span id="code-40"><a href="#code-40" aria-hidden="true" tabindex="-1"></a> <span class="op">...</span></span>
<span id="code-41"><a href="#code-41" aria-hidden="true" tabindex="-1"></a><span class="op">}</span></span>
<span id="code-42"><a href="#code-42" aria-hidden="true" tabindex="-1"></a></span>
<span id="code-43"><a href="#code-43" aria-hidden="true" tabindex="-1"></a><span class="dt">void</span> main_loop<span class="op">()</span></span>
<span id="code-44"><a href="#code-44" aria-hidden="true" tabindex="-1"></a><span class="op">{</span></span>
<span id="code-45"><a href="#code-45" aria-hidden="true" tabindex="-1"></a> <span class="cf">while</span> <span class="op">(</span><span class="dv">1</span><span class="op">)</span> <span class="op">{</span></span>
<span id="code-46"><a href="#code-46" aria-hidden="true" tabindex="-1"></a> <span class="co">/* 1 - Acquire, pre-process and fill the input buffers */</span></span>
<span id="code-47"><a href="#code-47" aria-hidden="true" tabindex="-1"></a> acquire_and_process_data<span class="op">(</span>in_data<span class="op">);</span></span>
<span id="code-48"><a href="#code-48" aria-hidden="true" tabindex="-1"></a></span>
<span id="code-49"><a href="#code-49" aria-hidden="true" tabindex="-1"></a> <span class="co">/* 2 - Call inference engine */</span></span>
<span id="code-50"><a href="#code-50" aria-hidden="true" tabindex="-1"></a> ai_network_run<span class="op">(</span>network<span class="op">,</span> <span class="op">&</span>ai_inputs<span class="op">[</span><span class="dv">0</span><span class="op">],</span> <span class="op">&</span>ai_outputs<span class="op">[</span><span class="dv">0</span><span class="op">]);</span></span>
<span id="code-51"><a href="#code-51" aria-hidden="true" tabindex="-1"></a></span>
<span id="code-52"><a href="#code-52" aria-hidden="true" tabindex="-1"></a> <span class="co">/* 3 - Post-process the predictions */</span></span>
<span id="code-53"><a href="#code-53" aria-hidden="true" tabindex="-1"></a> post_process<span class="op">(</span>out_data<span class="op">);</span></span>
<span id="code-54"><a href="#code-54" aria-hidden="true" tabindex="-1"></a> <span class="op">}</span></span>
<span id="code-55"><a href="#code-55" aria-hidden="true" tabindex="-1"></a><span class="op">}</span></span></code></pre></div>
</section>
<section id="ref_api_get_error" class="level2">
<h2>ai_<name>_get_error()</h2>
<div class="sourceCode" id="func"><pre class="sourceCode cpp"><code class="sourceCode cpp"><span id="func-1"><a href="#func-1" aria-hidden="true" tabindex="-1"></a>ai_error <span class="va">ai_</span><span class="op"><</span>name<span class="op">></span>_get_error<span class="op">(</span>ai_handle network<span class="op">);</span></span></code></pre></div>
<p>This function can be used by the client application to retrieve the 1st error reported during the execution of a <code>ai_<name>_xxx()</code> function.</p>
<ul>
<li>See <code>ai_platform.h</code> file to have the list of the returned error type (<code>ai_error_type</code>) and associated code (<code>ai_error_code</code>).</li>
</ul>
<p><strong>Typical AI error function handler (debug/log purpose)</strong></p>
<div class="sourceCode" id="code"><pre class="sourceCode cpp"><code class="sourceCode cpp"><span id="code-1"><a href="#code-1" aria-hidden="true" tabindex="-1"></a><span class="pp">#include </span><span class="im">"network.h"</span></span>
<span id="code-2"><a href="#code-2" aria-hidden="true" tabindex="-1"></a><span class="op">...</span></span>
<span id="code-3"><a href="#code-3" aria-hidden="true" tabindex="-1"></a><span class="dt">void</span> aiLogErr<span class="op">(</span><span class="at">const</span> ai_error err<span class="op">)</span></span>
<span id="code-4"><a href="#code-4" aria-hidden="true" tabindex="-1"></a><span class="op">{</span></span>
<span id="code-5"><a href="#code-5" aria-hidden="true" tabindex="-1"></a> printf<span class="op">(</span><span class="st">"E: AI error - type=</span><span class="sc">%d</span><span class="st"> code=</span><span class="sc">%d\r\n</span><span class="st">"</span><span class="op">,</span> err<span class="op">.</span>type<span class="op">,</span> err<span class="op">.</span>code<span class="op">);</span></span>
<span id="code-6"><a href="#code-6" aria-hidden="true" tabindex="-1"></a><span class="op">}</span></span></code></pre></div>
</section>
</section>
<section id="ref_tensor_def" class="level1">
<h1>IO tensor description</h1>
<p>N-dimensional tensors are supported with a fixed format: <em>BHWC</em> format or <em>channel last</em> format representation. They are defined by a <code>'struct ai_buffer'</code> C-structure object. The referenced memory buffer (<code>'data'</code> field) is physically stored and referenced in memory as a standard C-array type. Scattered memory buffers are not supported.</p>
<ul>
<li><code>ai_buffer_shape</code> - indicates the dimension of the tensor<br />
</li>
<li><a href="#ref_data_type"><code>format</code></a> - indicates the format of the data<br />
</li>
<li><a href="#ref_data_type"><code>meta_info</code></a> - extra field to reference the additional data-dependent parameters which can be requested to handle a buffer</li>
</ul>
<div class="HTips">
<p><strong>Note</strong> — If the dimension order in the original toolbox is different that HWC (e.g. ONNX: CHW) it’s up to the application to properly re-arrange the element order.</p>
</div>
<section id="ai_buffer-c-structure" class="level2">
<h2>ai_buffer C-structure</h2>
<div class="sourceCode" id="code"><pre class="sourceCode cpp"><code class="sourceCode cpp"><span id="code-1"><a href="#code-1" aria-hidden="true" tabindex="-1"></a><span class="co">/* @file: ai_platform.h */</span></span>
<span id="code-2"><a href="#code-2" aria-hidden="true" tabindex="-1"></a></span>
<span id="code-3"><a href="#code-3" aria-hidden="true" tabindex="-1"></a><span class="kw">typedef</span> <span class="kw">struct</span> <span class="va">ai_buffer_</span> <span class="op">{</span></span>
<span id="code-4"><a href="#code-4" aria-hidden="true" tabindex="-1"></a> ai_buffer_format format<span class="op">;</span> <span class="co">/*!< buffer format */</span></span>
<span id="code-5"><a href="#code-5" aria-hidden="true" tabindex="-1"></a> ai_handle data<span class="op">;</span> <span class="co">/*!< pointer to buffer data */</span></span>
<span id="code-6"><a href="#code-6" aria-hidden="true" tabindex="-1"></a> ai_buffer_meta_info<span class="op">*</span> meta_info<span class="op">;</span> <span class="co">/*!< pointer to buffer metadata info */</span></span>
<span id="code-7"><a href="#code-7" aria-hidden="true" tabindex="-1"></a> ai_flags flags<span class="op">;</span> <span class="co">/*!< shape optional flags */</span></span>
<span id="code-8"><a href="#code-8" aria-hidden="true" tabindex="-1"></a> ai_size size<span class="op">;</span> <span class="co">/*!< number of elements of the buffer</span></span>
<span id="code-9"><a href="#code-9" aria-hidden="true" tabindex="-1"></a><span class="co"> (including optional padding) */</span></span>
<span id="code-10"><a href="#code-10" aria-hidden="true" tabindex="-1"></a> ai_buffer_shape shape<span class="op">;</span> <span class="co">/*!< n-dimensional shape info */</span></span>
<span id="code-11"><a href="#code-11" aria-hidden="true" tabindex="-1"></a><span class="op">}</span> ai_buffer<span class="op">;</span></span></code></pre></div>
<p>Following table shows the generated mapping of the 1d, 2d and 3d-array tensor:</p>