因此向下增长的栈从顶部往底部填充数据就类似于数组从尾部往头部填充数据,起始地址为: (rt_uint8_t *)((char *)thread->stack_addr + thread->stack_size - sizeof(rt_ubase_t)) 同时此处的代码是放在 thread.c 内,thread.c是内核文件,是公共的文件,不管你是什么硬件平台,不管你是什么CPU架构,在内核的...
typedef struct rt_thread *rt_thread_t; 线程控制块指针 3、实现线程创建函数 rt_err_t rt_thread_init(struct rt_thread *thread, void (*entry)(void *parameter), void *parameter, void *stack_start, rt_uint32_t stack_size) { rt_list_init(&(thread->tlist));//双向循环链表的初始化 //下...
voidrt_system_scheduler_init(void){register rt_base_t offset;rt_scheduler_lock_nest=0;for(offset=0;offset<RT_THREAD_PRIORITY_MAX;offset++){rt_list_init(&rt_thread_priority_table[offset]);}rt_current_priority=RT_THREAD_PRIORITY_MAX-1;rt_current_thread=RT_NULL;/* initialize ready priority ...
/* 线程控制块*/struct rt_thread{/* rt 对象*/char name[RT_NAME_MAX];/* 线程名称*/rt_uint8_t type;/* 对象类型*/rt_uint8_t flags;/* 标志位*/rt_list_t list;/* 对象列表*/rt_list_t tlist;/* 线程列表*//* 栈指针与入口指针*/void*sp;/* 栈指针*/void*entry;/* 入口函数指针*...
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 type; // 内核对象类型 rt_uint8_t flag; // 内核对象标志 #ifdef RT_USING_MODULE void *module_id; // 模块ID #endif rt_list_t list; // 内核对象链表节点 }; typedef struct rt_object *rt_object_t; 在内核里,所有对象都由链表组织起来。链表定义如下: ...
本文记录RT-Thread的时钟相关知识,包括时钟节拍、RT-Thread定时器工作机制以及定时器的管理方式,在定时器方面有硬件定时器和软件定时器,这里不讲硬件定时器,硬件定时器只需学习裸机时候的硬件定时器即可。后面进行实际的操作时采STM32L475VET6,RTT&正点原子联合出品潘多拉开发板进行实验。
RT-Thread 中动态创建互斥量的函数接口如下: rt_mutex_t rt_mutex_create (const char* name, rt_uint8_t flag) 调用此函数创建一个互斥量时,内核会自动创建一个互斥量控制块,并从内核对象管理器中分配一个mutex对象,然后对其初始化。 参数name为互斥量的名字;flag用来设置等待互斥量的线程队列排序方式。
RT-Thread内核的我们已经基本都学习过了,除了基本的线程操作和通信, 内核部分还有内存管理和中断处理,本文主要就来说说内存管理相关问题。 目录 前言 一、为什么要内存管理 二、RT-Thread 内存堆管理 2.1 RT-Thread 内存分配 2.2 RT-Thread内存堆管理方式
rt_timer_t rt_timer_create(const char *name,void (*timeout)(void *parameter),void *parameter,rt_tick_t time,rt_uint8_t flag); 详细函数定义: 查看flag定义: #define RT_TIMER_FLAG_ONE_SHOT 0x0 // 单次触发#define RT_TIMER_FLAG_PERIODIC 0x2 // 周期性触发#define RT_TIMER_FLAG_HARD_...