先分析题目,要求打印如下内容 * * * * * * * * * * 可以看到一共有四行内容,所以我们首先要在脑子里构建一个循环,循环次数为4 次,这里用 for 循环最为合适。 再分析横向,我们可以看到第一行打印了 4 个"*",之后每行依次递减,同样的,也在脑子里构建一个循
写在前面 嵌入式当中,使用例如i2c、spi等外设时,需要获取某个寄存器的某些位的具体值,这里就来探讨如何实现。 需求 现有需求,要求从寄存器获取从 第 5 位开始,往后数 3 位的值。 第 5 位开始,我们标记为:S = 5。 读取 3 个位,我们标记为:bit_len = 3。 这里先要明确一个
写在前面 嵌入式当中,使用例如i2c、spi等外设时,需要对寄存器中的某些连续位进行写入操作,而不影响其他位,本文来探讨如何实现。 需求 现在有数据要求写入到寄存器,从第 3 位开始,连续写入 4 位的数据。写入的数据为:1100,我们假设寄存器原始数据为:0110 1100。 我们定义从第 3 位
&,与 含义: 取得被运算的两个值同为 1 的位。 运算方式: 两个位都为1 时,结果才为 1 。 示例: 0 0 1 0 0 0 1 1 --> 0x23(Hex) --> 35(Dec) & 0 1 0 1 0 0 1 0 --> 0x52(Hex) --> 82(Dec) --------
栈与堆 栈(Stack): 栈用于存储局部变量和函数调用信息。栈上的内存是由系统自动管理的,当函数返回时,分配给改函数的栈内存会自动释放。 栈的大小是有限的,通常比较小。 堆(Heap): 堆用于动态内存分配。通过调用malloc、calloc或realloc函数从堆中分配内存。这些内存块的生命周期
前言 如需理解数组指针,需要先理解[[栈和堆]]。 数组指针详解: 现定义一个变量,并为其分配内存: char *buffer = (char *)malloc(100); *buffer = 'A'; 详解: buffer存储在栈中 buffer是一个局部变量,它是一个指针,存储在栈中。这个指针
定义结构 结构体关键字为struct和结构体名组成。 struct语句定了一个包含多个成员的新的数据类型,struct语句格式如下: struct tag { member-list member-list member-list ... } variable-list ;
字符串指针 ^89afed 字符串指针变量本身是一个变量,用于存放字符串的首地址。而字符串本身是存放在以改地址为首的一块连续内存中,并以\0作为字符串的结束。 char *str = "Hello, World!" 可以通过printf函数打印出字符串指针的内容: printf("%s\n", s
位和字节的关系 对于16位处理器来说,每个堆栈的宽度是16位: 1字节 = 8位 因此,16位 = 16 / 8 = 2字节 对于32位处理器来说,每个堆栈的宽度是32位: 一字节 = 8位 因此,32位 = 32 / 8 = 4字节 对于64位处理器来说,每个堆栈的宽度是64位: 一字节 = 8位
堆栈宽度 堆栈宽度是指每个堆栈元素(或条目)的大小,通常由处理器架构决定。 对于16位处理器,每个堆栈的宽度为16位。 对于32位处理器,每个堆栈的宽度为32位。 堆栈深度 堆栈深度表示堆栈中可以容纳的元素数量。这个数值通常是以堆栈条目位单位的,而不是以字节为单位的。 举例说明 假设现有一个任务堆栈
豆制品
Rust
MPU6050
neovim
Problem Solve
FreeRTOS
蓝牙
ESP32 JTAG Debug
C语言
默认分类