dataqueue
dataqueue消息队列:消息队列能够接收来自线程或中断服务例程中不固定长度的消息,并把消息缓存在自己的内存空间中。其他线程也能够从消息队列中读取相应的消息,而当消息队列是空的时候,可以挂起读取线程。当有新的消息到达时,挂起的线程将被唤醒以接收并处理消息。消息队列是一种异步的通信方式。(摘自 RT-Thread文档中心). 数据队列:没有找到官方详细的说明,只是在 RT-Thread API参考手册,有介绍。数据队列能够接收来自线程中不固定长度的数据,数据 不会 缓存在自己的内存空间中,自己的内存空间只有一个指向这包数据的指针。其他线程也能够从数据队列获取数据,当数据队列为空的时候,可以挂起线程。当有新的数据到达时,挂起的线程将被唤醒以接收并处理消息。数据队列是一种异步的通信方式。 消息队列 是用于线程消息传递的,属于线程间同步异步 IPC;消息队列在 recv 数据之后,这组数据就没了。 数据队列 更多的使用在流式数据传递,属于线程间通信 IPC;数据队列可以使用 peak 的方式 舔一下 这组数据不会丢失。自带高、低水位,可以对锯齿速度(压入数据的间隔不一致,时快时慢的)情...
fal
fal flash抽象层-FAL_FLASH_DEV_TABLE设备表挂载不同flash设备 -FAL_PART_TABLE分区表对同一个flash挂载不同分区 -blocks 对不同颗粒度的flash进行分块 初始化 执行 fal_init -FAL_FLASH_DEV_TABLE注册flash设备 fal_flash_init 遍历注册表信息,执行flash初始化,与block分割 fal_partition_init 使用ROM保存分区表,每次查询并挂钩 FAL_PART_TABLE分区表 使用FLASH保存分区表,仅需读取 加载分区表,读取分区信息 检查flash设备是否都存在 注册设备 注册块设备, 或字符串设备,或MTD nor设备 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162struct rt_mtd_nor_device{ struct rt_d...
fatfs
fatfs 因此应用程序应尽可能以大块的形式写入数据。理想的写入块大小和对齐方式是扇区大小,簇大小最好。当然,应用程序和存储设备之间的所有层都必须考虑多扇区写入,但大多数开源存储卡驱动程序都缺乏这一点。不要将多扇区写入请求拆分为单扇区写入事务,否则写入吞吐量会变差。 努力实现扇区对齐的读/写访问可以消除缓冲数据传输,从而提高读/写性能。除此之外,在 tiny 配置下,缓存的 FAT 数据不会被文件数据传输刷新,因此它可以以较小的内存占用实现与非 tiny 配置相同的性能。 如果由于意外故障(例如突然断电、错误移除介质和不可恢复的磁盘错误)而中断对 FAT 卷的写入操作,则卷上的 FAT 结构可能会被破坏。为了最大限度地降低数据丢失的风险,可以通过最小化以写入模式打开文件的时间或使用f_sync函数来最小化临界区 FatFs 模块不支持对文件的重复打开的读写冲突控制。仅当对文件的每种打开方式都是读取模式时才允许重复打开。始终禁止对文件进行一次或多次写入模式的重复打开,并且打开的文件不得重命名或删除。违反这些规则可能会导致数据冲突。 文件系统操作mkfs 格式化...
u-boot 学习笔记
u-boot 学习笔记 u-boot分类 1.1. api 1.1.1. api.md 1.2. arch 1.2.1. arm 1.2.1.1. arm.md 1.2.1.2. assembly.md 1.2.2. arch.md 1.3. boot 1.3.1. bootm.md 1.3.2. bootretry.md 1.3.3. bootz.md 1.3.4. image.md 1.4. cmd 1.4.1. cmd.md 1.5. common 1.5.1. autoboot.md 1.5.2. board.md 1.5.3. cli.md 1.5.4. command.md 1.5.5. console.md 1.5.6. dmalloc.md 1.5.7. event.md 1.5.8. export.md 1.5.9. log.md 1.5.10. main.md 1.6. dm 1.6.1. adc.md 1.6.2. button.md 1.6.3. clock.md 1.6.4. core.md 1.6.5. dts.md 1....
构建
[toc] art-pi构建命令123456789101112131415export CROSS_COMPILE=arm-none-eabi- ARCH=armmake stm32h750-art-pi_defconfigmake menuconfig > Boot options (console=ttySTM0,115200 root=/dev/ram loglevel=8) Boot arguments > Device Drivers > Serial drivers (115200) Default baudrateu-boot-v2021.07\arch\arm\dts\stm32h750i-art-pi.dts chosen { bootargs = "root=/dev/ram"; stdout-path = "serial0:2000000n8"; }; chosen { b...
Bison_Flex
[TOC] Flex(Fast Lexical Analyzer Generator) 于生成词法分析器的工具 词法分析器用于将输入文本分解成标记(tokens),这些标记是语法分析器(如由 Bison 生成的解析器)所使用的基本单位。Flex 是 Lex 的一个改进版本,广泛用于编译器和解释器的开发中。 Flex 的作用 生成词法分析器 : Flex 从一个词法规则文件(通常以 .l 为扩展名)生成一个 C 语言的词法分析器源代码文件(通常是 lex.yy.c)。 词法分析器读取输入文本,并根据定义的词法规则将其分解成标记。 处理输入文本 : 词法分析器扫描输入文本,识别出符合词法规则的模式,并将其转换为标记。 每个标记可以包含类型和语义值,供语法分析器使用。 Flex 文件的格式 Flex 文件通常以 .l 为扩展名,包含词法规则和动作代码。以下是一个典型的 Flex 文件的结构: Bison 是一个广泛使用的解析器生成器工具,用于从上下文无关文法(Context-Free Grammar,CFG)生成语法解析器。它通常用于编译器和解释器的开发中,用来解析编...
GNU_C
[TOC] 编译器特性 && 选项__va_arg_pack 用于处理可变参数函数__va_arg_pack_len 用于获取可变参数的数量__fortify_function 用于启用额外的安全检查,以防止常见的编程错误,如缓冲区溢出__LEAF 告诉编译器,该函数是一个叶函数(leaf function),即它不会调用其他函数 叶函数的属性允许编译器进行进一步的优化,例如减少函数调用的开销和栈空间的使用。 __error__ 属性告诉编译器,如果该函数被调用,则会触发编译错误,并输出指定的错误消息 msg12# define __errordecl(name, msg) \ extern void name (void) __attribute__((__error__ (msg))) __builtin_constant_p 检查 参数 是否为编译时常量__attribute_malloc__ 用于标记函数返回一个新分配的内存块 这有助于编译器进行优化,例如避免不必要的内存检查。 __attribute_alloc_size__ 用于指定分配的内存大...
Makefile
[TOC] 执行 输入make命令,执行Makefile文件中的第一个目标。如果没有指定目标,则执行Makefile文件中的第一个目标。 在 Makefile 中,如果你运行 make 而不带任何参数,make 将默认执行第一个目标。如果第一个目标是 __build,那么运行 make 将等同于执行 make __build.在 Makefile 中,第一个出现的目标通常被视为默认目标。如果你运行 make 而不带任何参数,make 将执行这个默认目标。 $(KCONFIG_CONFIG) include/config/auto.conf.cmd: ;这条语句定义了一个目标,它包含两个文件:$(KCONFIG_CONFIG) 和 auto.conf.cmd。当这两个文件被调用时,执行一个空命令;这意味着这两个文件是一起作为一个目标的,只有在这两个文件都存在时,才会执行空命令 语法ifeq && ifneq 条件语句 ifeq 比较两个条件(条件1 和 条件2)。 如果两个条件相等,则执行 ifeq 块中的代码。 如果两个条件不相等,并且存在 else 块,则...
scripts
[TOC] scripts 用于构建脚本的工具 参考UBOOT全部目标的编译过程详解 scripts_basic 用于构建基本脚本的工具参考 uboot 和 Linux kernel 的主 Makefile 里面,都有下面这段话: 1234PHONY += scripts_basicscripts_basic: $(Q)$(MAKE) $(build)=scripts/basic $(Q)rm -f .tmp_quiet_recordmcount 展开后就是: 1make -f ./scripts/Makefile.build obj=scripts/basic $(build)的展开主 Makefile 里面,有一个非常重要的 include: 1include scripts/Kbuild.include 这是一个头文件,相当于把 Kbuild.include 的内容直接写到主 Makefile 里。Kbuild.include 代码片段: 12345#### Shorthand for $(Q)$(MAKE) -f scripts/Makefile.build obj...
setlocalversion
[TOC] 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168KERNELVERSION="5.10.0"# 变量默认值与传入赋值no_local=falseif test "$1" = "--no-l...






