自学内容网 自学内容网

嵌入式杂谈-- C语言指针及其在嵌入式中的应用

深入剖析 C 语言指针及其在嵌入式中的璀璨光芒

一、指针初相识:内存中的导航仪

在 C 语言里,指针是一类特殊变量,它存的并非常规数据,而是内存地址。想象内存是一片巨大仓库,每个存储单元都有独一无二的地址,指针就如同指向这些存储单元的路标。定义指针的基本形式为:数据类型 *指针变量名; 例如,int *ptr; ,这表明 ptr 是个准备指向整型数据的指针。

获取变量地址用取地址运算符 &,假设 int num = 5;,那么 ptr = # 后,ptr 就精准定位到 num 所在内存位置。通过解引用运算符 *,如 *ptr = 10;,能直接修改 num 的值,实现间接数据操控,仿佛隔空移物。

二、指针进阶:多维探索

1. 指针运算:指针加减整数具有特殊意义。若 ptr 指向整型数组起始,ptr + 1 并非简单加 1,而是跳过一个整型数据占据的字节数(通常 4 字节,依编译器而定),指向数组下一个元素。这让遍历数组变得高效,for(int i = 0; i < array_size; i++) { printf("%d ", *(ptr + i)); } 可轻松输出数组所有元素。

2. 指针与数组:数组名在 C 语言中隐含着首元素地址特性,所以某种程度上,可把数组名当作指针使用。int arr[5];,int *p = arr; 完全合法,后续通过 p 操作数组与用 arr 操作等效,只是 arr 是常量指针,不能修改指向,而 p 可重新赋值。

3. 指针与函数:函数指针是强大工具,定义形式 返回值类型 (*函数指针名)(参数列表);,如 int (*func_ptr)(int, int);。能将函数地址赋给它,func_ptr = add_function;(假设 add_function 是个两数相加函数),之后调用 (*func_ptr)(3, 5) 等同于直接调用 add_function(3, 5),为函数调用增添灵活性,在实现回调机制等场景效用显著。

三、指针在嵌入式领域的高光时刻

1. 硬件底层交互:嵌入式系统频繁打交道的硬件寄存器有固定内存地址,指针可直捣黄龙。以点亮 LED 为例,假设有对应控制寄存器 LED_CR,定义 volatile unsigned int *led_ptr = (volatile unsigned int *)0x1234;(地址依硬件而定),*led_ptr = 1; 就能按硬件协议点亮,实时精准控制硬件,确保设备响应如飞。

2. 动态内存精打细算:嵌入式资源宝贵,动态内存分配必备。malloc 函数结合指针,如 char *buffer = (char *)malloc(100 * sizeof(char)); 按需开辟 100 字节存储区,用于暂存传感器采集的动态变化数据,任务完成后 free(buffer) 释放,避免内存浪费,保障系统流畅运行。

3. 任务间无缝协作:多任务嵌入式系统里,任务共享数据靠指针。定义全局指针指向共享区,不同任务按规则读写,像无人机飞控系统,姿态解算与电机控制任务通过共享指针访问姿态数据,协同作业确保飞行稳定,当然要靠信号量等同步手段防冲突。

 


原文地址:https://blog.csdn.net/JK03820/article/details/145271836

免责声明:本站文章内容转载自网络资源,如侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!