diff options
| author | Kat Perez <[email protected]> | 2025-05-06 09:27:19 -0400 |
|---|---|---|
| committer | Kat Perez <[email protected]> | 2025-05-06 09:27:19 -0400 |
| commit | 54b3fb6e7a12598e0f6299c18a333060d6a3f9c7 (patch) | |
| tree | b72a50ede475e87d491d503d3f6e0781aa1a16db /embassy-executor/src | |
| parent | 61f0f889a0dc89410218be725a43dcd967e53003 (diff) | |
remove name from TaskRegistry and retrieve from task header instead
Diffstat (limited to 'embassy-executor/src')
| -rw-r--r-- | embassy-executor/src/raw/trace.rs | 33 | ||||
| -rw-r--r-- | embassy-executor/src/spawner.rs | 3 |
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 | ||
| 84 | use crate::raw::{SyncExecutor, TaskRef}; | 84 | use crate::raw::{SyncExecutor, TaskHeader, TaskRef}; |
| 85 | 85 | ||
| 86 | use core::cell::UnsafeCell; | 86 | use core::cell::UnsafeCell; |
| 87 | use core::sync::atomic::{AtomicUsize, Ordering}; | 87 | use core::sync::atomic::{AtomicUsize, Ordering}; |
| @@ -95,7 +95,6 @@ const MAX_TASKS: usize = 1000; | |||
| 95 | #[derive(Clone)] | 95 | #[derive(Clone)] |
| 96 | pub struct TrackedTask { | 96 | pub 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 | ||
| 201 | unsafe impl Sync for TaskRegistry {} | 178 | unsafe impl Sync for TaskRegistry {} |
| @@ -343,8 +320,10 @@ pub(crate) fn executor_idle(executor: &SyncExecutor) { | |||
| 343 | impl rtos_trace::RtosTraceOSCallbacks for crate::raw::SyncExecutor { | 320 | impl 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(()) |
