sem = (rt_sem_t)rt_object_allocate(RT_Object_Class_Semaphore, name); if(sem == RT_NULL) returnsem; /* init ipc object */ rt_ipc_object_init(&(sem->parent)); /* set init value */ sem->value = value; /* set parent */ sem->parent.parent.flag = flag; returnsem; } RTM_E...
RT-Thread 支持的 IPC 有:信号量、互斥量、事件集、邮箱、消息队列等。 10.1 基础结构 rt_ipc_object struct rt_ipc_object { struct rt_object parent; rt_list_t suspend_thread; // 挂起线程链表 } IPC 对象初始化,即初始化挂起线程链表 rt_inline rt_err_t rt_ipc_object_init(struct rt_ipc_object...
上图中由对象控制块 rt_object 派生出来的有:线程对象、内存池对象、定时器对象、设备对象和 IPC对象(IPC:Inter-Process Communication,进程间通信。在 RT-Thread 实时操作系统中,IPC 对象的作用是进行线程间同步与通信);由 IPC 对象派生出信号量、互斥量、事件、邮箱与消息队列、信号等对象。 5.3 对象控制块 内...
rt_hw_uart_init(); return 0; } 这里会出现两个问题: 问题一:动态模块加载缺少函数符号问题 问题二:动态驱动模块加载报错【rt_object_init】是否存在bug? 以上是针对两个问题的解决方式。 针对问题二做一下补充说明 #ifdef RT_USING_MODULE if (module) { if(rt_strcmp(object->name,"uart1") == 0) ...
在rtthread中所有的类型的上帝就是rt_object。 一个rt_object的属性如下: 对象有对应的名称,类型,标识以及下一个的链表。 比如说ipc,消息间的通信机制 这些都是基于rt_ipc_object的基类集成的。 所以rt-thread的程序设计中,大量的用到了这种面向对象的思想进行设计。
_init */rt_mutex_t rt_mutex_create(const char *name, rt_uint8_t flag){ struct rt_mutex *mutex; RT_DEBUG_NOT_IN_INTERRUPT; /* allocateobject */ mutex = (rt_mutex_t)rt_object_allocate(RT_Object_Class_Mutex, name); if (mutex == RT_NULL) return mutex; /* init ipcobject */ ...
有点不明白的是,线程对象结构体怎么直接把rt_object里的内容全搬过来了,而不是像定时器对象结构体那样定义一个rt_object类型的成员以达到继承的目的。 RT-Thread代码的层次感很强,让我们学习起来很有条理,比如信号量、互斥量、事件、邮箱、消息队列这几类对象具有共性,都是用于线程间的同步及通信(即IPC对象)。然...
h 头 文 件 里 struct rt_semaphore { struct rt_ipc_object parent;/* 继承自 ipc_object 类 */ rt_uint16_t value; /* 信号量的值 */ }; 4.2 初始化条件变量 int pthread_cond_init(pthread_cond_t *cond, const pthread_condattr_t *attr); 此函数会初始化 cond 条件变量,并根据 attr ...
struct rt_ipc_object parent; /**< inherit from ipc_object */ rt_ubase_t *msg_pool; /**< 邮箱缓冲区的开始地址 */ rt_uint16_t size; /**< 邮箱缓冲区的大小 */ rt_uint16_t entry; /**< 邮箱中邮件的数目 */ rt_uint16_t in_offset; /**< 邮箱缓冲的入口指针 */ ...
函数rt_mb_init()的返回值为RT_EOK。 创建邮箱的标志变量取值有两种: RT_IPC_FLAG_FIFO,等待邮箱的线程按照先进先出的方式进行排列。 RT_IPC_FLAG_PRIO,等待邮箱的线程按照优先级的方式进行排列。 2. 发送邮件 RT-Thread 提供的发送邮件接口函数有两种:一种是无等待超时接口,一种是有等待超时。