@@ -28,7 +28,10 @@ macro_rules! build {
28
28
// r3_kernel::System<$Traits>>) -> $IdMap`
29
29
( $Traits: ty, $configure: expr => $IdMap: ty) => { {
30
30
use $crate:: {
31
- r3_core,
31
+ r3_core:: {
32
+ self ,
33
+ utils:: ConstAllocator ,
34
+ } ,
32
35
cfg:: { self , CfgBuilder , CfgBuilderInner } ,
33
36
EventGroupCb , InterruptAttr , InterruptLineInit , KernelCfg1 ,
34
37
KernelCfg2 , Port , State , TaskAttr , TaskCb , TimeoutRef , TimerAttr ,
@@ -44,11 +47,13 @@ macro_rules! build {
44
47
// Kernel-independent configuration process
45
48
// ---------------------------------------------------------------------
46
49
47
- const fn build_cfg_phase1( ) -> r3_core:: kernel:: cfg:: CfgPhase1Data <System > {
50
+ const fn build_cfg_phase1(
51
+ allocator: & ConstAllocator ,
52
+ ) -> r3_core:: kernel:: cfg:: CfgPhase1Data <System > {
48
53
// Safety: We are `build!`, so it's okay to use `CfgBuilder::new`
49
54
let mut my_cfg = unsafe { CfgBuilder :: new( ) } ;
50
55
r3_core:: kernel:: cfg:: cfg_phase1!(
51
- let mut cfg = Cfg :: <CfgBuilder <$Traits>>:: new( & mut my_cfg) ) ;
56
+ let mut cfg = Cfg :: <CfgBuilder <$Traits>>:: new( & mut my_cfg, allocator ) ) ;
52
57
$configure( & mut cfg) ;
53
58
CfgBuilder :: finalize_in_cfg( & mut cfg) ;
54
59
@@ -60,15 +65,17 @@ macro_rules! build {
60
65
// Implement `CfgPhase1` on `$Traits` using the information
61
66
// collected in phase 1
62
67
r3_core:: kernel:: cfg:: attach_phase1!(
63
- build_cfg_phase1 ( ) ,
68
+ ConstAllocator :: with ( build_cfg_phase1 ) ,
64
69
impl CfgPhase1 <System > for $Traits,
65
70
) ;
66
71
67
- const fn build_cfg_phase2( ) -> r3_core:: kernel:: cfg:: CfgPhase2Data <System > {
72
+ const fn build_cfg_phase2(
73
+ allocator: & ConstAllocator ,
74
+ ) -> r3_core:: kernel:: cfg:: CfgPhase2Data <System > {
68
75
// Safety: We are `build!`, so it's okay to use `CfgBuilder::new`
69
76
let mut my_cfg = unsafe { CfgBuilder :: new( ) } ;
70
77
r3_core:: kernel:: cfg:: cfg_phase2!(
71
- let mut cfg = Cfg :: <CfgBuilder <$Traits>>:: new( & mut my_cfg) ) ;
78
+ let mut cfg = Cfg :: <CfgBuilder <$Traits>>:: new( & mut my_cfg, allocator ) ) ;
72
79
$configure( & mut cfg) ;
73
80
CfgBuilder :: finalize_in_cfg( & mut cfg) ;
74
81
@@ -80,19 +87,21 @@ macro_rules! build {
80
87
// Implement `CfgPhase2` on `$Traits` using the information
81
88
// collected in phase 2
82
89
r3_core:: kernel:: cfg:: attach_phase2!(
83
- build_cfg_phase2 ( ) ,
90
+ ConstAllocator :: with ( build_cfg_phase2 ) ,
84
91
impl CfgPhase2 <System > for $Traits,
85
92
) ;
86
93
87
- const fn build_cfg_phase3( ) -> (
94
+ const fn build_cfg_phase3(
95
+ allocator: & ConstAllocator ,
96
+ ) -> (
88
97
CfgBuilderInner <$Traits>,
89
98
$IdMap,
90
99
r3_core:: kernel:: cfg:: CfgPhase3Data <System >,
91
100
) {
92
101
// Safety: We are `build!`, so it's okay to use `CfgBuilder::new`
93
102
let mut my_cfg = unsafe { CfgBuilder :: new( ) } ;
94
103
r3_core:: kernel:: cfg:: cfg_phase3!(
95
- let mut cfg = Cfg :: <CfgBuilder <$Traits>>:: new( & mut my_cfg) ) ;
104
+ let mut cfg = Cfg :: <CfgBuilder <$Traits>>:: new( & mut my_cfg, allocator ) ) ;
96
105
let id_map = $configure( & mut cfg) ;
97
106
CfgBuilder :: finalize_in_cfg( & mut cfg) ;
98
107
@@ -108,7 +117,7 @@ macro_rules! build {
108
117
CfgBuilderInner <$Traits>,
109
118
$IdMap,
110
119
r3_core:: kernel:: cfg:: CfgPhase3Data <System >,
111
- ) = build_cfg_phase3 ( ) ;
120
+ ) = ConstAllocator :: with ( build_cfg_phase3 ) ;
112
121
const CFG : CfgBuilderInner <$Traits> = CFG_OUTPUT . 0 ;
113
122
114
123
// Implement `KernelStatic` on `$Traits` using the information
0 commit comments