fatfs
fatfs 因此应用程序应尽可能以大块的形式写入数据。理想的写入块大小和对齐方式是扇区大小,簇大小最好。当然,应用程序和存储设备之间的所有层都必须考虑多扇区写入,但大多数开源存储卡驱动程序都缺乏这一点。不要将多扇区写入请求拆分为单扇区写入事务,否则写入吞吐量会变差。 努力实现扇区对齐的读/写访问可以消除缓冲数据传输,从而提高读/写性能。除此之外,在 tiny 配置下,缓存的 FAT 数据不会被文件数据传输刷新,因此它可以以较小的内存占用实现与非 tiny 配置相同的性能。 如果由于意外故障(例如突然断电、错误移除介质和不可恢复的磁盘错误)而中断对 FAT 卷的写入操作,则卷上的 FAT 结构可能会被破坏。为了最大限度地降低数据丢失的风险,可以通过最小化以写入模式打开文件的时间或使用f_sync函数来最小化临界区 FatFs 模块不支持对文件的重复打开的读写冲突控制。仅当对文件的每种打开方式都是读取模式时才允许重复打开。始终禁止对文件进行一次或多次写入模式的重复打开,并且打开的文件不得重命名或删除。违反这些规则可能会导致数据冲突。 文件系统操作mkfs 格式化...
SPI驱动
SPI驱动SPI原理 https://www.circuitbasics.com/basics-of-the-spi-communication-protocol/ https://learn.sparkfun.com/tutorials/serial-peripheral-interface-spi/all SPI设备驱动初始化1.rt_spi_bus_register注册 SPI BUS设备,并且初始化互斥量 1.rt_spi_bus_attach_device_cspin 调用 rt_spidev_device_init注册 SPI DEV设备 初始化CS引脚 配置SPI设备,互斥量加锁保护 rt_spi_transfer_message 传输任意消息 互斥量加锁保护 总线设备不是当前设备,则切换设备,并且重新配置SPI总线 SPI需要明确当前操作的设备是什么,并且需要重新配置SPI总线,因为SPI一次只能操作一个设备,所以设备可以是不同的配置信息;SPI的配置可以有相位和极性,速率等 I2C总线不需要重新配置,因为I2C总线是共享的;I2C的配置只有...
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...
构建
[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 块,则...
setlocalversion
[TOC] 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168KERNELVERSION="5.10.0"# 变量默认值与传入赋值no_local=falseif test "$1" = "--no-l...
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...
u-boot
[TOC] u-boot.map Archive member included to satisfy reference by file (symbol) 静态库链接成员 Archive member:归档成员是指静态库(通常是 .a 文件)中的对象文件。静态库是由多个对象文件打包而成的归档文件。 Included to satisfy reference:这部分信息表示链接器在链接过程中包含了某个归档成员,以满足其他文件中的符号引用。 by file (symbol):by file 表示引用该符号的文件。symbol 表示被引用的符号名称。 (–whole-archive) 表示在链接过程中将整个归档文件包含在内 这是一个链接选项,表示在链接过程中将整个归档文件包含在内。–whole-archive 选项告诉链接器将指定的归档文件中的所有对象文件都包含在最终的可执行文件中,而不仅仅是那些被其他对象文件引用的符号。 Discarded input sections 丢弃的输入段 在链接过程中,某些段可能会被丢弃,因为它们不需要包含在最终的可执行文件中。 Memory...







