CLASS B - BEACON
CLASS B – BEACONClass B在当前协议版本中还仅作实验性参考。
CLASS C – CONTINUOUSLY LISTENING
CLASS C – CONTINUOUSLY LISTENING
13 Class B Downlink slot timing
第13章 Class B下行时隙时序13.1 定义为了使 Class B模式能够正常运行,终端必须以信标规定的精准时刻打开接收时隙窗口。这章节定义了所需的时序操作。 两个连续的信标起始点之间的间隔称为信标周期。信标帧的传输以 BEACON_RESERVED 时间间隔的起始端对齐。每个信标都有一个保护时间间隔,在该时间间隔之内是没有 ping 时隙的。保护间隔的长度对应于允许帧在空中的最长时间。这样就能保证在保护时间之前的一个 ping 时隙内发起的下行数据帧总是有时间去完成传输而不与信标的传输发生冲突。因此用于ping时隙的时间间隔是从 BEACON_RESERVED 时间间隔的末尾节点到下一 BEACON_GUARD 时间间隔的起始节点。 图 12 :信标时序 Beacon_period 128 s Beacon_reserved 2.120 s Beacon_guard 3.000 s Beacon-window 122.8...
freertos
[TOC] 0.前言0.1 变量及函数命名规范 变量名 ‘c’ for char ‘s’ for int16_t(short) ‘l’ for int32_t (long) ‘x’ for BaseType_t and any other non-standard types (structures, task handles, queue handles, etc.). If a variable is unsigned, it is also prefixed with a ‘u’. If a variable is a pointer, it is also prefixed with a ‘p’. For example, a variable of type uint8_t will be prefixed with ‘uc’, and a variable of type pointer to char (char *) will be prefixed with ‘pc’. 函数名 函数的前缀是它们返回的类型和定义它们的文件 vTaskPriorit...
littlefs
littlefs123456789101112131415161718192021// Users can override lfs_util.h with their own configuration by defining// LFS_CONFIG as a header file to include (-DLFS_CONFIG=lfs_config.h).//// If LFS_CONFIG is used, none of the default utils will be emitted and must be// provided by the config file. To start, I would suggest copying lfs_util.h// and modifying as needed.#ifdef LFS_CONFIG#define LFS_STRINGIZE(x) LFS_STRINGIZE2(x)#define LFS_STRINGIZE2(x) #x#include LFS_STRINGIZE(LFS_CONFIG) 机制 断电恢...
map文件分析
map文件分析1234567891011121314151617181920212223242526272829303132333435363738394041424344454647Image$$ER_IROM1$$Base 0x90000000 Number 0 anon$$obj.o ABSOLUTE__Vectors 0x90000000 Data 4 startup_stm32h750xx.o(RESET)__Vectors_End 0x90000298 Data 0 startup_stm32h750xx.o(RESET)__main 0x90000299 Thumb Code 0 entry.o(.ARM.Collect$$$$00000000)_main_st...
pipe
pipepipe: 匿名管道。pipe 是一种 IPC 机制,他的作用是用作有血缘进程间完成数据传递,只能从一端写入,从另外一端读出。为了解决 pipe 的弊端,linux 又引入了 mkfifo(实名管道)。 创建管道12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455rt_pipe_t *rt_pipe_create(constchar *name, intbufsz){ //分配管道内存,初始化锁,初始化等待队列,初始化条件变量 rt_mutex_init(&pipe->lock, name, RT_IPC_FLAG_FIFO); rt_wqueue_init(&pipe->reader_queue); rt_wqueue_init(&pipe->writer_queue); rt_condvar_init(&pipe->waitf...
ringblock
环形缓冲块 ringblock环形块状缓冲区简称为:rbb。与传统的环形缓冲区不同的是,rbb 是一个由很多不定长度的块组成的环形缓冲区,而传统的环形缓冲区是由很多个单字节的 char 组成。rbb 支持 零字节拷贝 。所以 rbb 非常适合用于生产者顺序 put 数据块,消费者顺序 get 数据块的场景,例如:DMA 传输,通信帧的接收与发送等等 ringblk: 是由 多个不同长度 的 block 组成的,ringbuff : 是由单字节的数据组成的。ringblk 每一个 block 有多少个字节可以由用户自己设定。 ringblk 支持零字节拷贝(不需要额外的 memcpy 操作)。所以 rbb 非常适合用于生产者顺序 put 数据块,消费者顺序 get 数据块的场景,例如:DMA 传输,通信帧的接收与发送等等。 初始化 初始化块链表和释放链表 对每一个块链表进行初始化,并插入到释放链表中 PUT & GET 块 put 123block->status = RT_RBB_BLK_PUT; get 判断块链表为空,则返回NULL 遍历链表,找到具...
ringbuffer
ringbuffer buffer_ptr 是指向缓冲区的指针,buffer_size 是缓冲区的大小,read_index 是读索引,write_index 是写索引,而 read_mirror 和 write_mirror 可以理解为一种镜像值,每次向缓冲区写入数据,碰到缓冲区末尾时,切换到另一个镜像的缓冲区头部写入剩余数据。这种镜像操作可用于判断缓冲区内数据是满还是空。 等于是把缓冲区回绕了看做为另一个缓冲区,通过镜像值来判断缓冲区的状态,当前读写指针是否进入到另一个缓冲区中; 当 write_index == read_index 且 read_mirror == write_mirror 时,缓冲区内数据为空。 当 write_index == read_index 且 read_mirror != write_mirror 时,缓冲区内数据已满。 若是没有上述镜像值,我们就没有办法区分缓冲区空和缓冲区满这两种情况。 注意:RT-Thread 的 ringbuffer 组件并未提供线程阻塞的功...
romfs
romfsRomFS 是在嵌入式设备上常用的一种文件系统,具备体积小,可靠性高,读取速度快等优点,常用来作为系统初始文件系统。但也具有其局限性,RomFS 是一种只读文件系统。 不同的数据存储方式对文件系统占用空间,读写效率,查找速度等主要性能影响极大。RomFS 使用顺序存储方式,所有数据都是顺序存放的。因此 RomFS 中的数据一旦确定就无法修改,这是 RomFS 是一种只读文件系统的原因。也由于这种顺序存放策略,RomFS 中每个文件的数据都能连续存放,读取过程中只需要一次寻址操作,就可以读入整块数据,因此 RomFS 中读取数据效率很高。 https://www.rt-thread.org/document/site/#/rt-thread-version/rt-thread-standard/tutorial/qemu-network/filesystems/filesystems?id=%e4%bd%bf%e7%94%a8-romfs 文件系统操作mount 挂载123dfs_mount(RT_NULL, "/", "rom"...







