/*小内存堆和slab 管理算法*/voidrt_system_heap_init(void* begin_addr,void* end_addr);/*memheap 管理算法*/rt_err_trt_memheap_init(structrt_memheap *memheap,constchar*name,void*start_addr,rt_uint32_tsize) 我在《RT-Thread记录(二、RT-Thread内核启动流程 — 启动文件和源码分析)》板级硬件初始...
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...
/* 线程控制块*/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 *rt_hw_stack_init(void *tentry, void *parameter, rt_uint8_t *stack_addr, void *texit) { unsigned long *lower_csa = NULL; unsigned long *upper_csa = NULL; UpperCtx_Ptr upperCtxPtr = NULL; rt_hw_interrupt_disable(); { __dsync(); /* 使用两个空闲CSA存储线程上层上...
这是一个rt_uint8_t(RTThread中的宏定义,无符号8位)类型的全局数组,第一句话是为了栈空间对齐,使得CPU对数据的访问更加高效,第二句就是线程的具体定义了,这里定义1024的长度。 然后是线程的ID卡——线程控制块 在操作系统中,常常有许多的线程在运行,面对着这么多的的线程,自然需要一个身份块来标识每个线程,使...
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-Thread第4课,听听RT-Thread 的心跳,再学习一下基于心跳的软件定时器使用。 前言 学习RTOS,肯定接触到软件定时器,学会软件定时器的使用能够使得我们摆脱硬件定时器在某些地方的局限性,而软件定时器的实现,又是基于系统的时钟节拍,本文除了了解 RT-Thread 软件定时器API,学会使用 RT-Thread 软件定时器,还需要先了...
(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)) ...
代码清单 6-3 (1):线程栈其实就是一个预先定义好的全局数据,数据类型为rt_uint8_t,大小我们设置为 512。在 RT-Thread 中,凡是涉及到数据类型的地方,RT-Thread 都会将标准的 C 数据类型用 typedef 重新取一个类型名,以“rt”前缀开头。这些经过重定义的数据类型放在 rtdef.h(rtdef.h 第一次使用需要在 ...
根据之前的记录,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); ...