diff --git a/examples/late-resources.rs b/examples/late-resources.rs
index b5dba1467e29003afdadfd2c898915bd3ba306a9..b60c7740f628962e7f0472ffc4422ddb070e9308 100644
--- a/examples/late-resources.rs
+++ b/examples/late-resources.rs
@@ -32,6 +32,11 @@ app! {
         static PORT: u16;
     },
 
+    idle: {
+        // Test that late resources can be used in idle
+        resources: [IP_ADDRESS],
+    }
+
     tasks: {
         SYS_TICK: {
             priority: 1,
diff --git a/macros/src/trans.rs b/macros/src/trans.rs
index 45841e730078ea954423c5582fb9b83be4420d32..96ff770b64f2982de7ae088fbf5ad0f646a68d21 100644
--- a/macros/src/trans.rs
+++ b/macros/src/trans.rs
@@ -74,8 +74,14 @@ fn idle(
                     });
 
                     let _name = Ident::new(format!("_{}", name.as_ref()));
-                    rexprs.push(quote! {
-                        #name: &mut #super_::#_name,
+                    rexprs.push(if resource.expr.is_some() {
+                        quote! {
+                            #name: &mut #super_::#_name,
+                        }
+                    } else {
+                        quote! {
+                            #name: #super_::#_name.as_mut(),
+                        }
                     });
                 } else {
                     rfields.push(quote! {