summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorMan, Jianting (Meco) <[email protected]>2022-12-20 22:36:32 -0500
committerGitHub <[email protected]>2022-12-20 22:36:32 -0500
commit061af7b0925c55be4d8fb55651091937bf0c8c69 (patch)
tree8c1286456fd7e059e5e8ea0cca32b10860afdb67 /src
parent91cdcea9004fcb0b3dbbc830774f5300d0280487 (diff)
[kenel] add static name for rt_object (#6422)
增加静态object 名字,用户可以根据内存实际使用情况决定使用动态还是静态。适用于资源极度受限的情况下使用。该功能在RT-Thread完整版本中不常用,主要用于RT-Thread Nano,以缩减对内存的占用。由于没有动态拼接支持,在静态名字下,空闲线程的名字在多核时将命名成相同的名字。
Diffstat (limited to 'src')
-rw-r--r--src/Kconfig3
-rw-r--r--src/idle.c10
-rw-r--r--src/object.c14
3 files changed, 21 insertions, 6 deletions
diff --git a/src/Kconfig b/src/Kconfig
index 88d6c970a0..0a583b407f 100644
--- a/src/Kconfig
+++ b/src/Kconfig
@@ -3,11 +3,12 @@ menu "RT-Thread Kernel"
config RT_NAME_MAX
int "The maximal size of kernel object name"
- range 2 32
+ range 0 64
default 8
help
Each kernel object, such as thread, timer, semaphore etc, has a name,
the RT_NAME_MAX is the maximal size of this object name.
+ If RT_NAME_MAX sets as 0, the name will be const.
config RT_USING_ARCH_DATA_TYPE
bool "Use the data types defined in ARCH_CPU"
diff --git a/src/idle.c b/src/idle.c
index 214a6b2ad2..8b0a49c7f9 100644
--- a/src/idle.c
+++ b/src/idle.c
@@ -306,13 +306,21 @@ static void rt_thread_system_entry(void *parameter)
void rt_thread_idle_init(void)
{
rt_ubase_t i;
+#if RT_NAME_MAX > 0
char idle_thread_name[RT_NAME_MAX];
+#endif /* RT_NAME_MAX > 0 */
for (i = 0; i < _CPUS_NR; i++)
{
- rt_sprintf(idle_thread_name, "tidle%d", i);
+#if RT_NAME_MAX > 0
+ rt_snprintf(idle_thread_name, RT_NAME_MAX, "tidle%d", i);
+#endif /* RT_NAME_MAX > 0 */
rt_thread_init(&idle_thread[i],
+#if RT_NAME_MAX > 0
idle_thread_name,
+#else
+ "tidle",
+#endif /* RT_NAME_MAX > 0 */
idle_thread_entry,
RT_NULL,
&idle_thread_stack[i][0],
diff --git a/src/object.c b/src/object.c
index 354703b713..b7ccf23725 100644
--- a/src/object.c
+++ b/src/object.c
@@ -387,8 +387,11 @@ void rt_object_init(struct rt_object *object,
/* initialize object's parameters */
/* set object type to static */
object->type = type | RT_Object_Class_Static;
- /* copy name */
- rt_strncpy(object->name, name, RT_NAME_MAX);
+#if RT_NAME_MAX > 0
+ rt_strncpy(object->name, name, RT_NAME_MAX); /* copy name */
+#else
+ object->name = name;
+#endif /* RT_NAME_MAX > 0 */
RT_OBJECT_HOOK_CALL(rt_object_attach_hook, (object));
@@ -483,8 +486,11 @@ rt_object_t rt_object_allocate(enum rt_object_class_type type, const char *name)
/* set object flag */
object->flag = 0;
- /* copy name */
- rt_strncpy(object->name, name, RT_NAME_MAX);
+#if RT_NAME_MAX > 0
+ rt_strncpy(object->name, name, RT_NAME_MAX); /* copy name */
+#else
+ object->name = name;
+#endif /* RT_NAME_MAX > 0 */
RT_OBJECT_HOOK_CALL(rt_object_attach_hook, (object));