随笔分类 - 数据结构
摘要:1、实际上,对于在STM32F103这类资源紧缺的单片机芯片中: 代码段保存在Flash上,直接在Flash上运行(当然也可以重定位到内存里) 数据段暂时先保存在Flash上,然后在使用前被复制到内存里(只读数据段(RO data)不复制) 函数入口地址、函数参数、临时变量、const修饰的局部常量
阅读全文
摘要:这些步骤将源代码转换成可以在目标硬件上执行的机器代码。以下是这个过程的一般描述: 预处理(Preprocessing):源代码(如 .c、.cpp、.s 等)首先被预处理。预处理器处理源文件中的宏定义、条件编译指令、包含指令(如 #include)等。预处理器的输出通常是一个 .i 或 .ii 文件
阅读全文
摘要:名词: LR = Load region上面只有1个,实际可以有多个。 ER = Execution region1个LR中可以有多个ER。 ER = Execution region1个LR中可以有多个ER。 input section1个ER中可以有多个Input section。 首先,LR_
阅读全文
摘要:1,全局变量和全局静态变量 a、全局变量:全局变量存放在静态存储区,作用域是全局(对比下面添加static),整个声明周期都可以使用,其他文件如需要使用,需要添加extern b、全局静态变量 (static):分配的内存与全局变量一样,也是在静态存储内存上,其生命周期也是与整个程序同在的,从程序开
阅读全文
摘要:对RAM分区的了解 在一个STM32程序代码中,从内存高地址到内存低地址,依次分布着栈区、堆区、全局区(静态区)、常量区、代码区,其中全局区中高地址分布着.bss段,低地址分布着.data段,其分布图如下: 各区特点一、栈区(stack) 临时创建的局部变量存放在栈区。函数调用时,其入口参数存放在栈
阅读全文
摘要:在使用keil开发STM32应用程序时,点击Build后在Build Output窗口中经常会有如下信息: 以前一直好奇这几个参数和实际使用的STM32芯片中Flash和SRAM的对应关系,于是上网搜了一圈,做如下总结: 这些参数的单位是Byte 图中几个参数分别代表 Code:代码的大小 RO:常
阅读全文
摘要:编译一个程序,出现下面的信息: 明明程序没有什么内容,为什么变量大小就有RW+ZI=52+1836=1888字节大小了呢,就已经使用了1888字节的SRAM空间。让我们打开map文件: 可以看到每个文件所使用的SRAM大小,比如delay文件使用了4个字节,地址从0x20000014到0x20000
阅读全文
摘要:代码下载:https://gitee.com/jhembedded/flmparse 写这篇博客的目的是因为最近在做一个STM32的离线编程器,离线下载需要用到FLM文件的下载算法,所以实现了一下提取FLM文件中下载算法的C程序。 有关ELF格式的详细说明可查看这个文件:http://flint.c
阅读全文
摘要:1.*.FLM的本质其实就是*.axf,它也是一段可执行代码。 2.它是ARM工具链的一部分, /***********************************************************************/ /* This file is part of the
阅读全文
摘要:#include <stdio.h> // 定义一个枚举类型来表示光电开关的状态 typedef enum { SWITCH_OPEN, SWITCH_CLOSED } SwitchState; // 定义一个结构体来记录光电开关传感器的状态 typedef struct { SwitchState
阅读全文
摘要:01. 位带概述位带操作简单的说,就是把每个比特膨胀为一个 32 位的字,当访问这些字的时候就达到了访问比特的目的,比如说 GPIO 的 ODR 寄存器有 32 个位,那么可以映射到 32 个地址上,我们去访问这 32 个地址就达到访问 32 个比特的目的。这样我们往某个地址写 1 就达到往对应比特
阅读全文
摘要:https://www.runoob.com/cprogramming/c-function-strstr.html #include <stdio.h> #include <string.h> int main() { const char haystack[20] = "RUNOOB"; con
阅读全文
摘要:Hex文件是可以烧录到MCU中,被MCU执行的一种文件格式。如果用记事本打开可发现,整个文件以行为单位,每行以冒号开头,内容全部为16进制码(以ASCII码形式显示)。Hex文件可以按照如下的方式进行拆分来分析其中的内容: 例如 “:1000080080318B1E0828092820280B1D0
阅读全文
摘要:在Keil中实现按键扫描并记录按键变化事件,可以通过创建一个按键处理函数,该函数在每次被调用时检查按键状态,并在按键状态发生变化时记录事件。以下是一个简单的示例,说明如何使用C语言在Keil中实现这个过程: 首先,创建一个头文件(例如:key_event.h)来定义函数原型和宏定义: #ifndef
阅读全文
摘要:ANSI C 定义了许多宏。在编程中您可以使用这些宏,但是不能直接修改这些预定义的宏。 __DATE__ 当前日期,一个以 “MMM DD YYYY” 格式表示的字符串常量。 __TIME__ 当前时间,一个以 “HH:MM:SS” 格式表示的字符串常量。 __FILE__ 这会包含当前文件名,一个
阅读全文
摘要:在C语言中,基本数据类型用于定义变量的类型和存储数据的方式。C语言提供了几种常见的基本数据类型,包括以下几种: 整型 (Integer): 整型用于表示整数值。在C语言中,整型可以分为不同的大小和范围,取决于具体的实现。常见的整型类型有: int:表示整数,通常为机器字长大小,常见的取值范围是-32
阅读全文
摘要:信息处理中,有些信息在存储时,并不需要占用一个完整的字节,而只需占一个或几个比特位。例如在存放一个开关量时,只有0和1 两种状态, 用一位二进制位即可。为了节省存储空间,并使处理简便,C语言又提供了一种数据结构,称为“位域”或“位段”。所谓“位域”是把一个字节中的比特位划分为几个不同的区域, 并说明
阅读全文
摘要:共用体(Union)是C语言中的一种特殊数据类型,它允许在相同的内存空间中存储不同类型的数据。 1、定义共用体:共用体的定义与结构体类似,使用 union 关键字,后跟共用体的名称和成员变量列表。共用体的成员变量可以是不同的数据类型,但它们共享同一块内存空间。 union MyUnion { int
阅读全文
摘要:在C语言中,typedef 是一个关键字,用于为已有的数据类型创建一个新的名称。它可以简化代码,提高可读性,并使代码更具可维护性。typedef 的用法如下: 1、为基本数据类型创建别名:typedef 可以为基本数据类型(如 int、float、char 等)创建别名,使其在代码中使用起来更加直观
阅读全文