1. 指针操作
指针是C语言中非常重要的概念,它可以让我们直接访问内存中的数据。在嵌入式系统中,指针操作通常用于动态分配内存、传递参数等场景。
示例代码:
int *p = (int *)malloc(sizeof(int)); // 动态分配内存
*p = 10; // 直接访问内存中的数据
free(p); // 释放内存
2. 结构体和联合体
结构体和联合体是C语言中用来定义复合数据类型的方式。它们可以让我们将多个不同类型的变量组合在一起,方便进行数据交换和处理。
示例代码:
typedef struct {
int x;
int y;
} Point;
Point p = {10, 20}; // 定义一个Point结构体变量并初始化
printf("%d %d", p.x, p.y); // 输出Point结构体变量的值
3. 位运算符
位运算符是C语言中用来对二进制数进行操作的运算符。在嵌入式系统中,位运算符通常用于控制硬件设备的状态、优化算法性能等场景。
示例代码:
unsigned int a = 0b1101; // 定义一个二进制数a
unsigned int b = a & ~0b1010; // 对a进行按位与和按位非操作,得到新的二进制数b
printf("%d", b); // 输出二进制数b的值(结果为1)
4. 文件操作函数库
C语言提供了一组文件操作函数库,包括fopen、fclose、fread、fwrite等函数,可以方便地进行文件读写操作。在嵌入式系统中,文件操作通常用于存储配置信息、读取传感器数据等场景。
示例代码:
FILE *fp = fopen("config.txt", "r"); // 以只读模式打开文件config.txt
if (fp == NULL) { // 判断文件是否打开成功
printf("Failed to open file!\n");
return;
}
char buffer[1024]; // 定义一个缓冲区,用于存储读取到的数据
fgets(buffer, sizeof(buffer), fp); // 从文件中读取一行数据到缓冲区中
fclose(fp); // 关闭文件句柄
printf("%s", buffer); // 输出读取到的数据(结果为"Hello World")
5. 动态内存分配函数库
C语言提供了一组动态内存分配函数库,包括malloc、calloc、realloc等函数,可以方便地进行内存管理。在嵌入式系统中,动态内存分配通常用于动态分配内存空间、调整数组大小等场景。
示例代码:
int *arr = (int *)malloc(sizeof(int) * 10); // 动态分配一个包含10个整数的数组空间,每个整数占用4字节(int类型占4字节)
for (int i = 0; i < 10; i ) { // 将数组元素初始化为i 1000的值(例如:[1001, 1002, ...])
*(arr i) = i 1000; // 通过指针访问数组元素并赋值(注意:使用*运算符解引用指针)
}
free(arr); // 释放动态分配的内存空间(注意:使用free()函数释放内存)