作用均是退出线程、清理线程。当前线程退出可以直接从 while 循环里跳出来,从线程入口函数 return 就可以。 `rt_thread_startup` 当一个线程正在运行的时候,它自己再 startup 自己是不是就很诡异了。 `rt_thread_resume` 线程挂起由得自己,唤醒就由不得自己了。 `rt_thread_control` 控制某线程的动作可能有:...
rt_base_t level; RT_ASSERT(serial != RT_NULL); rx_fifo = (struct rt_serial_fifo*) serial->serial_rx; RT_ASSERT(rx_fifo != RT_NULL); /* disable interrupt */ level = rt_hw_interrupt_disable(); len = _serial_fifo_calc_data_len(rx_fifo); if ((len == 0) && // non-block...
RT_ASSERT(priority < RT_THREAD_PRIORITY_MAX); thread->init_priority = priority; thread->current_priority = priority; thread->number_mask = 0; #if RT_THREAD_PRIORITY_MAX > 32 thread->number = 0; thread->high_mask = 0; #endif /* tick init */ thread->init_tick = tick; thread->re...
RT-Thread提供了网卡管理和控制的网路组件netdev 网卡。netdev 组件主要作用是解决设备多网卡连接时网络连接问题,用于统一管理各个网卡信息与网络连接状态,并且提供统一的网卡调试命令接口。 Netdev官网地址 关于Netdev的原理和API请参看官方手册。笔者这里给出网卡切换的代码。 如下示例,导出命令用于切换...
/*** This function will detach an event object from resource management** @param event the event object** @return the operation status, RT_EOK on successful*///静态事件集脱离rt_err_trt_event_detach(rt_event_tevent){/* parameter check */RT_ASSERT(event!=RT_NULL);RT_ASSERT(rt_object_...
when disable debug */ { RT_ASSERT(obj != object);} 或者 struct rt_object *obj RT_UNUSED;...
RT_ASSERT(((lfree== heap_end) || (!lfree->used))); } 之后将得到的内存点返回,这个时候不是返回这个可分配点的其实地址,而是返回这个可分配点的起始地址偏移一个数据结构尺寸的地址,因为每个可分配的内存块都在其前面有一个用于管理内存所需用到的一个数据结构(链表,魔数,used等信息)。
RT_ASSERT(result == RT_EOK); } return result; } 这个初始化函数直接看上去,只有一个函数我们比较熟悉rt_hw_serial_register,顾名思义,串口设备注册函数,不同于简单的 I/O 设备注册函数 rt_device_register,说明它 UART 设备还有设备驱动框架层,这个rt_hw_serial_register就是 UART 设备驱动框架层定义的函...
RT_ASSERT(result == RT_EOK); } return result; } 奇怪的是:函数中没有对uart_obj ->handle -> gState进行任何初始化操作,uart_obj声明时已经 = {0}了,理论上没有赋值的部分都应该为0。 因为uart_obj是全局静态变量,可以debug直接看其内容参数,发现其一开始就有值。