ARM指针寄存器
ARM指针寄存器 https://blog.csdn.net/zhuguanlin121/article/details/120883025 -堆栈指针r13 SP:每一种异常模式都有其自己独立的r13,它通常指向异常模式所专用的堆栈,也就是说五种异常模式、非异常模式(用户模式和系统模式),都有各自独立的堆栈,用不同的堆栈指针来索引。这样当ARM进入异常模式的时候,程序就可以把一般通用寄存器压入堆栈,返回时再出栈,保证了各种模式下程序的状态的完整性。 栈顶指针(Stack Pointer)是寄存器页的核心,用以指向系统栈的栈顶位置,某些情况下也可以作为通用寄存器来使用,例如,在 ARM Cortex M 内核中,SP 可以作为 R13 来使用。由于栈是函数式语言的核心,在操作系统中 SP 的地位举足轻重,以 RT-Thread 为例,每个用户任务都有独享的栈,任务的切换几乎就是栈的切换,也就是栈顶指针的切换,我们可以毫不夸张的说:栈顶指针就是每个任务的生命线。 -连接寄存器r14 LR:每种模式下r14都有自身版组,它有两个特殊功能。 (1)保存子程序返回地址。使用BL或BLX...
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...
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...
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...








