- 博客(54)
- 收藏
- 关注
原创 FreeRTOS内存管理
静态方法创建任务、队列、信号量等对象的 API 函数一般是以“Static”结尾的,例如静态创建任务的 API 函数xTaskCreateStatic()。使用静态方式创建各种对象时,需要用户提供各种内存空间,例如任务的栈空间、任务控制块所用内存空间等等,并且使用静态方式占用的内存空间一般固定下来了,即使任务、队列等被删除后,这些被占用的内存空间也没有其他用途。
2025-04-02 09:18:59
686
原创 STM32编译过程
编译MDK 软件使用的编译器是 armcc 和 armasm,它们根据每个 c/c++ 和汇编源文件编译成对应的以“.o”为后缀名的对象文件 (Object Code,也称目标文件),其内容主要是从源文件编译得到的机器码,包含了代码、数据以及调试使用的信息链接链接器 armlink 把各个.o 文件及库文件链接成一个映像文件“.axf”或“.elf”格式转换。
2025-02-25 10:29:15
1804
原创 MDK 工程的文件类型介绍
uvprojx、uvoptx 及 uvguix 都是使用 XML 格式记录的文件,若使用记事本打开可以看到 XML 代码。当使用 MDK 软件打开时,它根据这些文件的 XML 记录加载工程的各种参数,使得我们每次重新打开工程时,都能恢复上一次的工作环境。
2025-02-25 09:31:52
995
原创 STM32创建静态库lib
编译会报错,将文件 stm32f4xx_ll_fmc.c、stm32f4xx_ll_fsmc.c、stm32f4xx_ll_sdmmc.c、stm32f4xx_ll_usb.c。将创建lib库所需的下列所有头文件存放到 C:\Keil_v5\ARM\hal_inc。将创建lib库所需的下列所有头文件存放到 C:\Keil_v5\ARM\ll_inc。下存放用户开发的相应驱动文件,如LED、Beep等。下存放用户开发的相应驱动文件,如LED、Beep等。下存放用户开发的相应驱动文件,如LED、Beep等。
2025-02-17 23:05:30
782
1
原创 计算程序Flash和SRAM是使用情况
堆 + 栈 + ZI-data + RW-data(一定是解压缩后的):Code + RO-data + RW-data(可能是压缩的)可以计算出项目程序所需的。工具或编译编译后产生的。
2025-02-07 11:05:40
244
原创 STM32新建不同工程的方式
由于寄存器资源非常宝贵,一般都是一个位或者几个位控制一个功能,对于 STM32 来说,其寄存器是 32 位的,一个 32 位的寄存器,可能会有 32 个控制功能,相当于 32 个开关,由于STM32 的复杂性,它内部有几百个寄存器,所以整体来说 STM32 的寄存器还是比较复杂的。(Low Layer)目前与 HAL 库捆绑发布,它设计为比 HAL 库更接近于硬件底层的操作,代码更轻量级,代码执行效率更高的库函数组件,可以完全独立于 HAL 库来使用,但 LL库不匹配复杂的外设,如 USB 等。
2025-01-24 16:34:31
1390
1
原创 STM32 GPIO工作模式
GPIO 是通用输入输出端口的简称,简单来说就是 STM32 可控制的引脚,STM32 芯片的 GPIO 引脚与外部设备连接起来,从而实现与外部通讯、控制以及数据采集的功能。STM32 芯片的 GPIO 被分成很多组,每组最多 16 个 IO 口,组数视芯片而定。
2025-01-22 11:23:05
1183
原创 CM3/4 map文件分析
MDK 编译工程,会生成一些中间文件(如.o、.axf、.map 等),最终生成 hex 文件,以便下载到 MCU 上面执行,编译过程产生的所有文件,都存放在 OBJ 文件夹下,如下图所示:这里总共生成了 66 个文件,共 11 个类型,分别是:.axf、.crf、.d、.dep、.hex、.lnp、.lst、.o、.htm、bulild_log.htm 和.map。
2025-01-17 16:55:40
1055
原创 CM3/4启动流程
例如:我们将 0x0800 0000 映射到 0x0000 0000,即从内部 FLASH 启动,那么内核会从地址 0x0800 0000 处取出堆栈指针 MSP 的初始值,从地址 0x0800 0004 处取出程序计数器指针PC 的初始值。因此,内核离开复位状态后,读取内部 FLASH的 0x08000000 地址空间存储的内容,赋值给栈指针 MSP,作为栈顶地址,再读取内部 FLASH的 0x08000004 地址空间存储的内容,赋值给程序指针 PC,作为将要执行的第一条指令所在的地址。
2025-01-07 13:35:00
1026
原创 CM3/4启动文件分析
AREA汇编一个新的数据段[DATA],段名为RESET,只读[READONLY]。EXPORT表示声明一个标号具有全局属性,可被外部的文件使用。EXPORT表示声明一个标号具有全局属性,可被外部的文件使用。EXPORT表示声明一个标号具有全局属性DCD分配一个或者多个以字为单位的内存,以四字节对齐,并要求初始化这些内存。__Vectors为向量表起始地址。为向量表结束地址。EQU给数字常量取一个符号名__Vectors_Size [向量表大小]。汇编一个段名为RESET的数据段。
2025-01-06 16:30:34
930
原创 CM3/CM4时钟系统
数字电路的知识告诉我们:任意复杂的电路控制系统都可以经由门电路组成的组合电路实现。STM32 内部也是由多种多样的电路模块组合在一起实现的。当一个电路越复杂,在达到正确的输出结果前,它可能因为延时会有一些短暂的中间状态,而这些中间状态有时会导致输出结果会有一个短暂的错误,这叫做电路中的“毛刺现象”,如果电路需要运行得足够快,那么这些错误状态会被其它电路作为输入采样,最终形成一系列的系统错误。
2025-01-02 14:52:38
971
原创 创建$(u-boot-dirs)目标集分析
文章目录1. tools (回显 54-136)2. arch/arm/cpu (回显 137-138)3. arch/arm/cpu/armv7 (回显 139-147)4. arch/arm/lib (回显 148-178)5. arch/arm/mach-bcm283x (回显 179-185)6. board/raspberrypi/rpi (回显 186-189)7. cmd (回显 190-235)8. common (回显 236-272)1.
2024-08-09 09:30:25
548
原创 make -f ./scripts/Makefile.build obj=dir 分析2
【代码】make -f ./scripts/Makefile.build obj=dir 分析2。
2024-08-02 09:29:41
348
原创 make V=1 输出信息
make -f ./Makefile syncconfigmake -f ./scripts/Makefile.build obj=scripts/basicrm -f .tmp_quiet_recordmcountmake -f ./scripts/Makefile.build obj=scripts/kconfig syncconfigscripts/kconfig/conf --syncconfig Kconfigmake -f ./scripts/Makefile.autoconf ||
2024-07-15 16:13:36
176
原创 make -f ./scripts/Makefile.build obj=dir 分析1
由上可知,目标只有创建命令没有依赖,接下来执行目标的创建命令即可。6. 由步骤1中的定义可知, 在。2. 由步骤1中的定义可知,在。3. 由步骤1中的定义可知,在。4. 由步骤1中的定义可知,在。5. 由步骤1中的定义可知,在。
2024-07-10 19:32:32
397
原创 ./scripts/Makefile.autoconf 分析
由于执行的命令未带目标参数,所以默认执行第一个目标(即目标。由上可知,目标有很多,第一个目标为。这些变量的定义都是在配置文件。这些变量的定义都是在配置文件。
2024-06-21 16:11:19
1000
原创 make syncconfig V=1分析
命令【即生成 scripts/basic/fixdep 工具】,将实现目标。的所有依赖都已生成,接下来执行目标的生成语句即可。的所有依赖都已生成,接下来执行目标的生成语句即可。所用的命令、源码、头文件等信息全部写入到。,所以第493行条件不成立,这里什么都不做。输入命令自动匹配 563 行,由于目标。在顶层 Makefile 中定义为。时,94行条件成立,,101行条件成立,由上面三步可知,目标。
2024-06-19 19:28:23
464
原创 make V=1 分析
文章目录make V=1make V=11 Makefile:2321: "####### _all all scripts_basic outputmakefile scripts inputs dtbs cmd common disk drivers drivers/dma drivers/gpio drivers/i2c drivers/net drivers/net/phy drivers/power drivers/power/battery drivers/power/domain dr
2024-06-18 17:21:29
504
原创 make menuconfig V=1分析
(当在命令行中输入:时,94行条件成立,,101行条件成立,,则输出整个命令。输入命令自动匹配顶层 Makefile 的第563 行并执行,由于目标%config依赖和FORCE, 则执行顺序如下:执行依赖481-483行执行依赖492-497行执行依赖FORCE,什么都不做,2318行这三个依赖的生成见《》中的步骤1和步骤2:打印和执行命令【即生成 scripts/basic/fixdep 工具】,将实现目标所用的命令、源码、头文件等信息全部写入到文件中。
2024-06-11 18:55:41
549
原创 fixdep & conf & pkg-config & mconf 工具介绍
将配置文件和Kconfig文件中的相应信息写入到。查找实现目标所用的命令、源码、头文件等全部信息。实现目标所用的命令、源码、头文件等全部信息。系统的文件,较为复杂,也比较枯燥。,完成具体的词法和语法分析任务。编译产生的依赖文件*.d。编译时,编译器会根据选项。,是整个应用的主程序;主程序的文件,通过分析。文件生成新的依赖文件。
2024-06-06 19:40:42
638
原创 make xxxx_defconfig 分析【生成fixdep、conf工具】
(当在命令行中输入:时,94行条件成立,,101行条件成立,,则输出整个命令。输入命令自动匹配顶层 Makefile 的第563 行并执行,由于目标%config依赖和FORCE, 则执行顺序如下:执行依赖481-483行执行依赖492-497行执行依赖FORCE,什么都不做,2318行。
2024-05-31 16:49:12
573
原创 ./scripts/Makefile.build 分析
($($($($($($(if$($(if$($($($($($($($($($($($(if$($($($($(" = \$(目标PHONY在第17、417、424行中定义,最终目标PHONY依赖__build和FORCE。
2024-05-30 15:40:56
1105
原创 scripts/Makefile.host 分析【fixdep、conf】
所以第75行条件成立,执行第76行,第76行中的 $(_hostc_flags) 在第70行中定义,其中的。第92行:$(HOSTCC) 在顶层 Makefile 的282行定义。,在 scripts/basic/Makefile 中定义。,又在 Makefile.build 中第57行引用。第83行:$(__hostc_flags),当输入。,其目录下存在此类文件【fixdep.c】,经过。第24行:由于顶层 Makefile 中执行。分析,第95行实际是打印并执行。函数,并将相应内容输入到。
2024-05-30 13:45:40
914
原创 ./scripts/Makefile.clean 文件分析
从上到下依次执行,伪目标PHONY在第8行和第91行可知,,目标__clean在74行定义了依赖和语句,在92行定义了依赖和语句,所以从这两个目标的依赖和语句可知,优先执行目标再执行目标__clean。
2024-05-23 22:33:42
1092
1
原创 Makefile中的函数介绍
返回与模式相匹配的所有文件名列表,如果没有任何匹配,那么返回空字符串。在Makefile中用于获取匹配指定模式的所有文件名列表。
2024-05-20 16:00:40
503
1
原创 ./scripts/Makefile.buid 的分析
用于实现对用户自己定义函数引用。在执行时,将它的参数“ PARAM”依次赋值给临时变量“ $(1)”、“ $(2)”(这些临时变量定义在“ VARIABLE”的值中)……第 8 行就是在“scripts/basic”或“scripts/kconfig ”中查找符合“tpl/%”的部分,然后将“tpl/”取消掉,但是“scripts/basic”或“scripts/kconfig ”没有“tpl/”,所以 src= “scripts/basic”或“scripts/kconfig ”即src=$(obj)。
2024-05-16 13:51:50
935
原创 uboot 顶层 Makefile 分析
在 Makefile 中,规则的顺序是很重要的,因为,Makefile 中只应该有一个最终目标,其它的目标都是被这个目标所连带出来的,所以一定要让 make 知道你的最终目标是什么。一般来说,定义在 Makefile 中的目标可能会有很多,但是第一条规则中的目标将被确立为最终的目标。如果第一条规则中的目标有很多个,那么,第一个目标会成为最终的目标。但 make 并不会完全马上展开,make 使用的是拖延战术,如果变量出现在依赖关系的规则中,那么仅当这条依赖被决定要使用了,变量才会在其内部展开。
2024-05-10 17:13:48
176
原创 uboot工程目录分析
这个文件夹里面存放着和架构有关的文件,有很多架构,比如 arm、avr32、m68k 等,我们现在用的是 ARM 芯片,所以只需要关心 arm 文件夹即可,打开 arm 文件夹里面内容,有一部分 mach-xxx 的文件夹(mach 开头的文件夹是跟具体的设备有关的,比如“mach-exynos”就是跟三星的 exyons 系列 CPU 有关的文件)。.u-boot.xxx_cmd 是一系列的文件,这些文件都是编译生成的,都是一些命令文件,后续分析 uboot 的时候详细介绍。cpu 文件夹里面有个名为“
2024-05-09 19:53:10
873
虚拟机环境和树莓派调试环境自动配置脚本
2024-01-29
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人