DFS
DFS 虚拟文件系统https://www.rt-thread.org/document/site/#/rt-thread-version/rt-thread-standard/programming-manual/filesystem/filesystem 123456789101112131415161718FatFS 是专为小型嵌入式设备开发的一个兼容微软 FAT 格式的文件系统,采用 ANSI C 编写,具有良好的硬件无关性以及可移植性,是 RT-Thread 中最常用的文件系统类型。传统型的 RomFS 文件系统是一种简单的、紧凑的、只读的文件系统,不支持动态擦写保存,按顺序存放数据,因而支持应用程序以 XIP(execute In Place,片内运行) 方式运行,在系统运行时, 节省 RAM 空间。Jffs2 文件系统是一种日志闪存文件系统。主要用于 NOR 型闪存,基于 MTD 驱动层,特点是:可读写的、支持数据压缩的、基于哈希表的日志型文件系统,并提供了崩溃 / 掉电安全保护,提供写平衡支持等。DevFS 即设备文件系统,在 RT-Thread 操作系统中开启该...
SDMMC
SDMMC SD 协议 SD 卡系统定义了三种通信协议:SD , SPI 和 UHS-II。主机系统可以选择任意一种。当收到 reset 命令的时候,SD 卡通过主机的信息来决定 使用何种模式,并且之后的通讯都会使用相同的模式。不推荐多卡槽用共同的总线信号。一个单独的 SD 总线应该连接一个单独的 可移除的 SD 卡。UHS-II 支持多个器件通过环形(Ring)或 Hub 拓扑连接 在默认速度下,SD 卡总线有一个主(应用),多个从(卡),同步的星型拓扑结构(图 3-1)。时钟,电源和 地信号是所有卡都有的。在高速模式和 UHS-I 模式下,SD 卡总线有一个主机(应用)一个从(卡),同步的点对点拓扑。命令(CMD)和数据(DAT0-3)信号是根据每张卡的,提供连续地点对点连接到所有卡。 在初始化时,处理命令会单独发送到每个卡,允许应用程序检测卡以及分配逻辑地址给物理卡槽。数据总是单独发送(接收)到(从)每张卡。但是,为了简化卡的堆栈操作,在初始 化过 程结束后,所有的命令都是同时发送到所有卡。地址信息包含在命令包中。 SD 总线允许数据线的动态配置。上电后,SD 卡默认只...
SIGNAL
信号 SIGNAL 信号(又称为软中断信号),在软件层次上是对中断机制的一种模拟,在原理上,一个线程收到一个信号与处理器收到一个中断请求可以说是类似的。 信号的工作机制 信号在 RT-Thread 中用作异步通信,POSIX 标准定义了 sigset_t 类型来定义一个信号集,然而 sigset_t 类型在不同的系统可能有不同的定义方式,在 RT-Thread 中,将 sigset_t 定义成了 unsigned long 型,并命名为 rt_sigset_t,应用程序能够使用的信号为 SIGUSR1(10)和 SIGUSR2(12)。 信号本质是软中断,用来通知线程发生了异步事件,用做线程之间的异常通知、应急处理。一个线程不必通过任何操作来等待信号的到达,事实上,线程也不知道信号到底什么时候到达,线程之间可以互相通过调用 rt_thread_kill() 发送软中断信号。 收到信号的线程对各种信号有不同的处理方法,处理方法可以分为三类: 第一种是类似中断的处理程序,对于需要处理的信号,线程可以指定处理函数,由该函数来处理。 第二种方法是,忽略某个信号,对该信号不做任何处...
RT-LINK
RT-LINKservice attach&detach1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283struct rt_link_service{ rt_int32_t timeout_tx; void (*send_cb)(struct rt_link_service *service, void *buffer); void (*recv_cb)(struct rt_link_service *service, void *data, rt_size_t size); void *user_data; rt_uint8_t flag; /* Whether to use the CRC and ACK */ rt_link_servic...
completion
completion completion 可以称之为完成量,是一种轻量级的线程间(IPC)同步机制 完成量和信号量对比 信号量是一种非常灵活的同步方式,可以运用在多种场合中。形成锁、同步、资源计数等关系,也能方便的用于线程与线程、中断与线程间的同步中。 完成量,是一种更加轻型的线程间同步的一种实现,可以理解为轻量级的二值信号,可以用于线程和线程间同步,也可以用于线程和中断之间的同步。 完成量不支持在某个线程中调用 rt_completion_wait,还未唤醒退出时,在另一个线程中调用该函数。 注意:当完成量应用于线程和中断之间的同步时,中断函数中只能调用 rt_completion_done 接口,而不能调用 rt_completion_wait 接口,因为 wait 接口是阻塞型接口,不可以在中断函数中调用 12345678910111213141516171819202122232425262728/** * Completion - A tiny & rapid IPC primitive for resource-constrained scenarios ...
condvar
condvar条件变量是一种线程间同步的机制,它可以让一个线程等待另一个线程满足某个条件。条件变量是与互斥量配合使用的,互斥量用于保护共享数据,条件变量用于等待某个条件的发生。 初始化123456789//初始化等待队列rt_wqueue_init(&cv->event);rt_atomic_store(&cv->waiters_cnt, 0);rt_atomic_store(&cv->waiting_mtx, 0); 等待12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182intrt_condvar_timedwait(rt_condvar_tcv, rt_mutex_tmtx, intsuspend_flag, rt_tick_tt...
USB
USBUSB2.0枚举与配置 设备被连接到 USB 端口上,并得到检测。 集线器通过监控端口的电压来检测设备。集线器的 D+线和 D-线上带有下拉电阻,根据设备的速度,D+或 D-线上会带有上拉电阻。通过监控这些线上的电压变换,集线器检测设备是否得到连接。 这部分具体IAD描述符的参考<<iadclasscode_r10.pdf>> 2节 IAD Use Model Example 具体枚举配置过程,wireshark抓包不够准确,可以通过打印日志查看 方向分为设备到主机和主机到设备;意思是收到请求后执行的方向 请求类型:Standard Device Request 方向:设备到主机 请求:GET_DESCRIPTOR wValue 描述符类型 :1 (设备描述符) 描述符索引: 0 (第一个描述符) wIndex字段为字符串描述符指定语言ID 12[80 06 00 01 00 00 12 00][23:29:12 571]Setup: bmRequestType 0x80, bRequest 0x06, wValue 0x0...
dataqueue
dataqueue消息队列:消息队列能够接收来自线程或中断服务例程中不固定长度的消息,并把消息缓存在自己的内存空间中。其他线程也能够从消息队列中读取相应的消息,而当消息队列是空的时候,可以挂起读取线程。当有新的消息到达时,挂起的线程将被唤醒以接收并处理消息。消息队列是一种异步的通信方式。(摘自 RT-Thread文档中心). 数据队列:没有找到官方详细的说明,只是在 RT-Thread API参考手册,有介绍。数据队列能够接收来自线程中不固定长度的数据,数据 不会 缓存在自己的内存空间中,自己的内存空间只有一个指向这包数据的指针。其他线程也能够从数据队列获取数据,当数据队列为空的时候,可以挂起线程。当有新的数据到达时,挂起的线程将被唤醒以接收并处理消息。数据队列是一种异步的通信方式。 消息队列 是用于线程消息传递的,属于线程间同步异步 IPC;消息队列在 recv 数据之后,这组数据就没了。 数据队列 更多的使用在流式数据传递,属于线程间通信 IPC;数据队列可以使用 peak 的方式 舔一下 这组数据不会丢失。自带高、低水位,可以对锯齿速度(压入数据的间隔不一致,时快时慢的)情...
RTC
RTCRTC驱动1.rt_hw_rtc_register注册RTC设备 实现RTC设备的操作函数 提供控制命令 12345678910111213141516171819202122232425262728293031323334353637case RT_DEVICE_CTRL_RTC_GET_TIME: ret = TRY_DO_RTC_FUNC(rtc_device, get_secs, args); break;case RT_DEVICE_CTRL_RTC_SET_TIME: ret = TRY_DO_RTC_FUNC(rtc_device, set_secs, args); break;case RT_DEVICE_CTRL_RTC_GET_TIMEVAL: ret = TRY_DO_RTC_FUNC(rtc_device, get_timeval, args); break;case RT_DEVICE_CTRL_RTC_SET_TIMEVAL: ret = TRY_DO_RTC_FUNC(rtc_device, set...
ULOG
ULOG 标准输出 过滤功能 异步输出 颜色功能 后端支持 标准输出初始化12345678910111213intulog_init(void){ rt_mutex_init(&ulog.output_locker, "ulog", RT_IPC_FLAG_PRIO); ulog.output_lock_enabled = RT_TRUE; return0;} ulog_output 根据当前是否在中断中,判断使用的缓冲区 上锁(线程环境互斥量,中断环境关闭中断,未初始化互斥量时使用 ulog_voutput_recursion) 3.ulog_voutput_recursion递归输出 1234567891011121314151617181920212223/* If there is a recursion, we use a simple way */if ((ulog_voutput_recursion == RT_TRUE) && (hex_buf == RT_NULL))...







