RT-Thread中的HARD_TIMER与SOFT_TIMER最大区别就是指向超时函数的执行位置不同,HARD_TIMER超时函数在中断上下文环境中执行,SOFT_TIMER超时函数在定时器线程上下文中执行。 下面代码将会创建两个静态定时器单次触发和周期触发 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26...
通过将0强制转化为指向type类型的指针后,对其进行->操作,我们就可以获得在0地址开始定义的type结构体内某个成员的地址,接下来将该地址转化为offset,offset偏移是一个数,又因为是32机器,所以用(unsigned long),并且offset每加一,就代表多偏移一个字节,分析到这我们解释完了(unsigned long)(&((type*)0)->member)...
队列的机制实现了任务与任务、任务与中断之间的消息传递。 1 队列的结构体 新版的队列结构体与旧版的结构体的表达方式存在一些区别,也多了一些内容,主要表现在:利用QueuePointers_t(队列指针结构体)和SemaphoreData_t(信号量结构体)这两个结构体分别去包含了如下成员。 typedef struct QueuePointers { //指向队列存...
RT-Thread是一款国产化的嵌入式操作系统,目前在嵌入式领域得到广泛应用,其强大的扩展功能以及通用的外设驱动框架备受大家追捧。 关于基本的外设驱动,其官网上基本也都有部分描述,但是关于SDIO设备驱动目前为止还没有相关文档说明,因此本文笔者将根据自己的调试使用经验,与大家分享下rtthread的通用SDIO设备驱动的实现。 RT...
1.1 目录结构 1.2 许可证 TaskMsgBus package 遵循 Apache license v2.0 许可,详见LICENSE文件。 1.3 依赖 无。 2、如何打开 TaskMsgBus package 使用TaskMsgBus package 需要在 RT-Thread 的包管理器中选择它,具体路径如下: RT-Thread online packages
线程控制块 更多... 成员变量 char name [RT_NAME_MAX] 线程名称 rt_uint8_t type 对象类型 rt_uint8_t flags 线程的参数 void * module_id …
继承自 rt_object void * start_address 内存池的起始地址 rt_size_t size 内存池的大小 rt_size_t block_size 内存块的大小 rt_uint8_t * block_list 内存块链表 rt_size_t block_total_count 内存块的总数量 rt_size_t block_free_count 未使用内存块的数量 rt_list_t suspend_thread 挂起线程链表...
struct in_addr sin_addr 32位IP地址 char sin_zero [SIN_ZERO_LEN] 通常全为 0,主要功能是为了与 sockaddr 结构在长度上保持一致。 详细描述 IP地址和端口信息 示例: tcpclient_sample.c, tcpclient_select_sample.c, tcpserver_sample.c, udpclient_sample.c , 以及 udpserver_sample.c. ...
rt_uint16_t priority 优先级 rt_uint32_t stack_size 堆栈空间大小 struct rt_thread * main_thread 运行的主线程 int ret_code 退出返回值 rt_uint32_t vstart_addr 第一个LOAD段的VMA基址 rt_dlmodule_entry_func_t entry_addr 入口地址,动态库入口为RT_NULL char * cmd_line 命令行 rt_addr_t me...
RT-Thread 简介模块 内核 文件系统 网络设备管理 设备子系统 环形缓冲区 环形块状缓冲区 完成信号量 管道 数据队列 rt_data_queue 结构体 工作队列 等待队列 UART PIN I2C SPI RTC Alarm PWM 电源管理 WLAN框架 FinSH控制台 日志组件 动态模块 AT 组件 ...