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_uint8_t *)((char *)thread->stack_addr + thread->stack_size - sizeof(rt_ubase_t)) 同时此处的代码是放在 thread.c 内,thread.c是内核文件,是公共的文件,不管你是什么硬件平台,不管你是什么CPU架构,在内核的...
//创建threadtid = rt_thread_create("main", main_thread_entry, RT_NULL, RT_MAIN_THREAD_STACK_SIZE, RT_MAIN_THREAD_PRIORITY,20); rt_thread_t rt_thread_create(constchar*name,void(*entry)(void*parameter),void*parameter, rt_uint32_t stack_size, rt_uint8_t priority, rt_uint32_t tick)...
线程挂起可以由多种方法实现:线程调用rt_thread_delay()、rt_thread_suspend()等函数接口可以使得线程主动挂起,放弃CPU使用权,当线程调用rt_sem_take(),rt_mb_recv()等函数时,资源不可使用也会导致调用线程被动挂起。 当线程已经是挂起态的时候无法调用rt_thread_suspend()函数,已经是挂起态的线程调用rt_thread_...
RT-Thread第4课,听听RT-Thread 的心跳,再学习一下基于心跳的软件定时器使用。 前言 学习RTOS,肯定接触到软件定时器,学会软件定时器的使用能够使得我们摆脱硬件定时器在某些地方的局限性,而软件定时器的实现,又是基于系统的时钟节拍,本文除了了解 RT-Thread 软件定时器API,学会使用 RT-Thread 软件定时器,还需要先了...
/* 初始优先级*/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 value; /* 信号量的值 */ rt_uint16_t reserved; /* 保留域 */ }; /* rt_sem_t 为指向 rt_semaphore 结构体的指针类型 */ typedef struct rt_semaphore *rt_sem_t; 1. 2. 3. 4. 5. 6. 7. 8. struct rt_semaphore从rt_ipc_object派生而来,由IPC容器管理,信号量的最大值为...
代码清单 6-3 (1):线程栈其实就是一个预先定义好的全局数据,数据类型为rt_uint8_t,大小我们设置为 512。在 RT-Thread 中,凡是涉及到数据类型的地方,RT-Thread 都会将标准的 C 数据类型用 typedef 重新取一个类型名,以“rt”前缀开头。这些经过重定义的数据类型放在 rtdef.h(rtdef.h 第一次使用需要在 ...
rt_sem_trt_sem_create(constchar*name,(1)rt_uint32_tvalue,(2)rt_uint8_tflag)(3){rt_sem_tsem;RT_DEBUG_NOT_IN_INTERRUPT;/* 分配内核对象 */sem=(rt_sem_t)rt_object_allocate(RT_Object_Class_Semaphore,name);if(sem==RT_NULL)(4)returnsem;/* 初始化信号量对象 */rt_ipc_object_init...
在Cortex-M 架构中,rt_hw_context_switch_interrupt() 的函数实现流程如下图所示,它将设置需要切换的线程 rt_interrupt_to_thread 变量,然后触发 PendSV 异常(PendSV 异常是专门用来辅助上下文切换的,且被初始化为最低优先级的异常)。PendSV 异常被触发后,不会立即进行 PendSV 异常中断处理程序,因为此时还在中断...