} RTM_EXPORT(rt_mq_send); 1.4 rt_mq_recv消息队列接收 从消息队列中取出数据,然后把取出数据的消息地址放回空闲池里; //ipc.c rt_err_trt_mq_recv(rt_mq_tmq, void*buffer, rt_size_tsize, rt_int32_ttimeout) { structrt_thread*thread; registerrt_ubase_ttemp; structr...
RTM_EXPORT(rt_mutex_create); 3.2 rt_mutex_take 获取互斥量 // ipc.c 要是递归访问,就hold++; // if互斥锁未上锁,那就给当前线程上锁;else根据time判断是否需要suspend_thread等待解锁; // 在suspend_thread线程的时候,如果suspend_thread的优先级比较高,就把拥有锁的线程优先级提高到一样高,等解锁...
RTM_EXPORT(rt_mq_detach); 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 消息队列的创建 rt_mq_t rt_mq_create(const char *name, rt_size_t msg_size, rt_size_t max_msgs, rt_uint8_t flag) { struct rt_messagequeue *mq; struct rt_mq_message *head; regi...
1.与object完全一样的部分,这个地方按道理是可以直接使用struct rt_object parent的,事实上除了rt_...
RTM_EXPORT(rt_interrupt_enter); /** * This function will be invoked by BSP, when leave interrupt service routine Expand All @@ -90,7 +90,6 @@ void rt_interrupt_leave(void) RT_OBJECT_HOOK_CALL(rt_interrupt_leave_hook,()); rt_hw_interrupt_enable(level); } RTM_EXPORT(rt_interrupt_...
RTM_EXPORT(rt_sem_create); 1.3 rt_sem_delete 删除信号量 //ipc.c rt_err_trt_sem_delete(rt_sem_tsem) { RT_DEBUG_NOT_IN_INTERRUPT; RT_ASSERT(sem != RT_NULL); /* wakeup all suspend threads */ rt_ipc_list_resume_all(&(sem->parent.suspend_thread)); ...
其它 还有一个EXPORT宏用来向外声明函数: RTM_EXPORT(fn) 但是这个没启用
return_rt_thread_init(thread, name, entry, parameter, stack_start, stack_size, priority, tick); } RTM_EXPORT(rt_thread_init); 4.2 动态内存分配 以动态分配的方式来分配线程内存,用完可释放,内存利用率高; rt_thread_create ( ) //thread.c...
RTM_EXPORT(rt_kprintf);//4 这个函数也不知道啥用,先放着不管; #endif //rtdef.h 不知道啥用,先放着; #defineva_start(v,l) __builtin_va_start(v,l) #defineva_end(v) __builtin_va_end(v) //使用usart1作为rt_kprintf() output,函数弱声明在kservice.c中;与单片机串口1的重定向并不冲突...