rt_uint8_t flag) {/*suspend thread*/rt_thread_suspend(thread);//挂起线程switch(flag) {caseRT_IPC_FLAG_FIFO://FIFO方式rt_list_insert_before(list, &(thread->tlist));//直接放入队列末尾break;caseRT_IPC_FLAG_PRIO://线程优先级方式{structrt_list_node *n;structrt_thread *sthread;/*find...
rt_uint8_t *rt_hw_stack_init(void*tentry,void*parameter, rt_uint8_t*stack_addr,void*texit) {structstack_frame *stack_frame; rt_uint8_t*stk; unsignedlongi;/*对传入的栈指针做对齐处理*/stk= stack_addr +sizeof(rt_uint32_t); stk= (rt_uint8_t *)RT_ALIGN_DOWN((rt_uint32_t)st...
根据之前的记录,rt_thread_ready_priority_group 是0x40000000,那么就是第30位最先位1,所以to_thread指针就指向了优先级数组里面第30个元素指向的下一个线程: 然后全局变量 rt_current_thread 也指向这里。 最后,开始调度: rt_hw_context_switch_to((rt_uint32_t)&to_thread->sp); 把栈指针当做参数,这个函...
rt_err_t rt_mutex_init (rt_mutex_t mutex, const char* name, rt_uint8_t flag) 该函数对参数mutex指定的互斥量控制块进行初始化。另外两个参数name和flag与动态创建函数相同。 2. 获取互斥量 RT-thread 提供的获取互斥量的函数接口如下,线程通过调用此函数来获取某个互斥量。 rt_err_t rt_mutex_take...
/* 初始优先级*/rt_uint32_t number_mask;...rt_ubase_t init_tick;/* 线程初始化计数值*/rt_ubase_t remaining_tick;/* 线程剩余计数值*/struct rt_timer thread_timer;/* 内置线程定时器*/void(*cleanup)(struct rt_thread*tid);/* 线程退出清除函数*/rt_uint32_t user_data;/* 用户数据*/}...
rt_uint16_t critical_lock_nest;/**< critical lock count */#endif/*RT_USING_SMP*//* 优先级 */rt_uint8_t current_priority;/* 当前优先级 */rt_uint8_t init_priority;/* 初始优先级 *//* 如果优先级大于32 */#ifRT_THREAD_PRIORITY_MAX>32rt_uint8_t number;rt_uint8_t high_mask;#...
(void)_thread_exit); #endif /ARCH_CPU_STACK_GROWS_UPWARD */ 也就是针对不同架构的CPU实际传入此函数的参数还存在着不一样的地方! 针对==栈是向下增长型== 的CPU架构,传入的参数为:(rt_uint8_t *)((char *)thread->stack_addr + thread->stack_size - sizeof(rt_ubase_t)) ...
rt_uint8_t priority, rt_uint32_t tick) 1.2 静态创建线程 static struct rt_thread led1_thread; //demo,用户定义的线程句柄 static char led1_thread_stack[256]; //demo,用户定义的静态线程大小 /* 参数的含义 1、线程句柄。线程句柄由用户提供出来,并指向对应的线程控制块内存地址,上面的led1_thread...
rt_uint16_t entry; /* 消息队列中已有的消息数 */ void *msg_queue_head; /* 消息链表头 */ void *msg_queue_tail; /* 消息链表尾 */ void *msg_queue_free; /* 空闲消息链表 */ rt_list_t suspend_sender_thread; /* 发送线程的挂起等待队列*/ ...
根据之前的记录,rt_thread_ready_priority_group 是0x40000000,那么就是第30位最先位1,所以to_thread指针就指向了优先级数组里面第30个元素指向的下一个线程: 然后全局变量 rt_current_thread 也指向这里。 最后,开始调度: rt_hw_context_switch_to((rt_uint32_t)&to_thread->sp); ...