aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorKat Perez <[email protected]>2025-05-06 09:27:19 -0400
committerKat Perez <[email protected]>2025-05-06 09:27:19 -0400
commit54b3fb6e7a12598e0f6299c18a333060d6a3f9c7 (patch)
treeb72a50ede475e87d491d503d3f6e0781aa1a16db
parent61f0f889a0dc89410218be725a43dcd967e53003 (diff)
remove name from TaskRegistry and retrieve from task header instead
-rw-r--r--embassy-executor/src/raw/trace.rs33
-rw-r--r--embassy-executor/src/spawner.rs3
2 files changed, 8 insertions, 28 deletions
diff --git a/embassy-executor/src/raw/trace.rs b/embassy-executor/src/raw/trace.rs
index bdd3e4706..28be79cee 100644
--- a/embassy-executor/src/raw/trace.rs
+++ b/embassy-executor/src/raw/trace.rs
@@ -81,7 +81,7 @@
81 81
82#![allow(unused)] 82#![allow(unused)]
83 83
84use crate::raw::{SyncExecutor, TaskRef}; 84use crate::raw::{SyncExecutor, TaskHeader, TaskRef};
85 85
86use core::cell::UnsafeCell; 86use core::cell::UnsafeCell;
87use core::sync::atomic::{AtomicUsize, Ordering}; 87use core::sync::atomic::{AtomicUsize, Ordering};
@@ -95,7 +95,6 @@ const MAX_TASKS: usize = 1000;
95#[derive(Clone)] 95#[derive(Clone)]
96pub struct TrackedTask { 96pub struct TrackedTask {
97 task_id: u32, 97 task_id: u32,
98 name: Option<&'static str>,
99} 98}
100 99
101/// A thread-safe registry for tracking tasks in the system. 100/// A thread-safe registry for tracking tasks in the system.
@@ -128,7 +127,7 @@ impl TaskRegistry {
128 /// 127 ///
129 /// # Note 128 /// # Note
130 /// If the registry is full, the task will not be registered. 129 /// If the registry is full, the task will not be registered.
131 pub fn register(&self, task_id: u32, name: Option<&'static str>) { 130 pub fn register(&self, task_id: u32) {
132 let count = self.count.load(Ordering::Relaxed); 131 let count = self.count.load(Ordering::Relaxed);
133 if count < MAX_TASKS { 132 if count < MAX_TASKS {
134 for i in 0..MAX_TASKS { 133 for i in 0..MAX_TASKS {
@@ -136,7 +135,7 @@ impl TaskRegistry {
136 let slot = &self.tasks[i]; 135 let slot = &self.tasks[i];
137 let slot_ref = &mut *slot.get(); 136 let slot_ref = &mut *slot.get();
138 if slot_ref.is_none() { 137 if slot_ref.is_none() {
139 *slot_ref = Some(TrackedTask { task_id, name }); 138 *slot_ref = Some(TrackedTask { task_id });
140 self.count.fetch_add(1, Ordering::Relaxed); 139 self.count.fetch_add(1, Ordering::Relaxed);
141 break; 140 break;
142 } 141 }
@@ -174,28 +173,6 @@ impl TaskRegistry {
174 (*slot.get()).clone() 173 (*slot.get()).clone()
175 }) 174 })
176 } 175 }
177
178 /// Retrieves the name of a task with the given ID.
179 ///
180 /// # Arguments
181 /// * `task_id` - Unique identifier of the task
182 ///
183 /// # Returns
184 /// The name of the task if found and named, or `None` otherwise
185 pub fn get_task_name(&self, task_id: u32) -> Option<&'static str> {
186 for i in 0..MAX_TASKS {
187 unsafe {
188 let slot = &self.tasks[i];
189 let slot_ref = &*slot.get();
190 if let Some(task) = slot_ref {
191 if task.task_id == task_id {
192 return task.name;
193 }
194 }
195 }
196 }
197 None
198 }
199} 176}
200 177
201unsafe impl Sync for TaskRegistry {} 178unsafe impl Sync for TaskRegistry {}
@@ -343,8 +320,10 @@ pub(crate) fn executor_idle(executor: &SyncExecutor) {
343impl rtos_trace::RtosTraceOSCallbacks for crate::raw::SyncExecutor { 320impl rtos_trace::RtosTraceOSCallbacks for crate::raw::SyncExecutor {
344 fn task_list() { 321 fn task_list() {
345 for task in TASK_REGISTRY.get_all_tasks() { 322 for task in TASK_REGISTRY.get_all_tasks() {
323 let task_ref = unsafe { TaskRef::from_ptr(task.task_id as *const TaskHeader) };
324 let name = task_ref.name().unwrap_or("unnamed\0");
346 let info = rtos_trace::TaskInfo { 325 let info = rtos_trace::TaskInfo {
347 name: TASK_REGISTRY.get_task_name(task.task_id).unwrap(), 326 name,
348 priority: 0, 327 priority: 0,
349 stack_base: 0, 328 stack_base: 0,
350 stack_size: 0, 329 stack_size: 0,
diff --git a/embassy-executor/src/spawner.rs b/embassy-executor/src/spawner.rs
index 4fc4312b9..40202299f 100644
--- a/embassy-executor/src/spawner.rs
+++ b/embassy-executor/src/spawner.rs
@@ -171,8 +171,9 @@ impl Spawner {
171 171
172 match task { 172 match task {
173 Some(task) => { 173 Some(task) => {
174 task.set_name(Some(name));
174 let task_id = task.as_ptr() as u32; 175 let task_id = task.as_ptr() as u32;
175 TASK_REGISTRY.register(task_id, Some(name)); 176 TASK_REGISTRY.register(task_id);
176 177
177 unsafe { self.executor.spawn(task) }; 178 unsafe { self.executor.spawn(task) };
178 Ok(()) 179 Ok(())