一、了解 线程结构体内容
以下注解:
thread-> entry //函数的入口
thread-> parameter // 函数的参数
thread-> stack_starrt; // 栈的地址
thread-> stack_size; // 栈的大小
thread-> init_priority = priority;// 线程的初始优先级
thread-> current_priority =priority; 线程的当前优先级
二、创建函数的栈
#ifedef ARCH_CPU_STACK_GROWS _UPWARD
thread -> sp =( void *) rt_hw_stack_init ( thread -> entry , thread -> parameter ,
( void *)((char*)thread -> stack_addr),
( void ") rt_thread_exit );
else
thread ->sp =( void*) rt_hw_stack_init ( thread -> entry, thread->parameter,
( rt_uint8_ t *)( char*) thread->stack_addr + thread->stack_size-sizeof(rt_ ubase_t)),
( void*) rt_thread_exit );
该函数两个作用:
1.调整栈 (sp寄存器)
2.虚构栈的内容
该值 保存在栈中 之后再赋值给PC寄存器
]
rt_uint32_t lr; // R14
rt_uint32_t pc; // R15
rt_uint32_t psr; // 状态1.比较结果
// 2.中断相关
存在栈中的 有R0到R15 ,PSR
R13不保存 其别名为栈 保存在sp
PSR: 函数运行过程中断的开还是关
R0为参数寄存器 在函数入口时 将参数传置R0寄存器之中
如何假装
构造好这个一个栈,然后将rt-thread 的sp指针 r4 栈尾
之后运行 这个线程时 将创建的栈中的词 写入CPU寄存器中
三、总结
1.分配了一个RT_thread 结构体
2.分配一个栈
3.初始栈