登录/注册

STM32 指针代替数组赋值

STM32 指针代替数组赋值

更多

在STM32编程中使用指针代替数组赋值可以提高效率和灵活性。以下是几种常见场景的实现方法及注意事项:

1. 指针遍历赋值(代替下标索引)

uint16_t buffer[10]; // 定义数组
uint16_t *p = buffer; // 指针指向数组首地址

// 用指针遍历赋值(等效于buffer[i]=i)
for (int i = 0; i < 10; i++) {
    *p = i;  // 赋值到当前指针位置
    p++;     // 指针移动到下一个元素(地址+2字节,uint16_t类型)
}

2. 直接操作外设寄存器

// 使用指针访问GPIO端口寄存器
#define GPIOA_ODR (*(volatile uint32_t*)0x48000014) // 定义寄存器指针

// 通过指针直接赋值(替代数组映射)
GPIOA_ODR = 0xFFFF; // 设置GPIOA所有输出为高电平

3. DMA传输(指针替代数组复制)

// 使用指针配置DMA传输(避免数组拷贝)
uint32_t srcData = 0x12345678;
uint32_t destArray[4];
DMA1_Channel1->CMAR = (uint32_t)&srcData;    // 源地址指针
DMA1_Channel1->CPAR = (uint32_t)destArray;   // 目标数组指针
DMA1_Channel1->CNDTR = 4;                    // 传输4个元素
DMA_Cmd(DMA1_Channel1, ENABLE);              // 启动传输

4. 函数参数传递

// 通过指针传递数组(避免复制整个数组)
void FillBuffer(uint8_t *pBuf, uint32_t len) {
    while(len--) {
        *pBuf++ = 0xAA; // 指针自增赋值
    }
}

// 调用函数
uint8_t data[100];
FillBuffer(data, sizeof(data)); // 数组名自动转为指针

关键注意事项:

  1. 指针类型匹配
    uint16_t* 指针自增时地址+2,uint32_t* 自增地址+4。

  2. 边界检查
    指针越界可能引发硬件错误(HardFault),需确保操作在有效内存范围内。

  3. Volatile关键字
    操作硬件寄存器时必须使用 volatile(如 (volatile uint32_t*)0x40000000),防止编译器优化。

  4. 对齐访问
    STM32的某些外设(如DMA)要求内存地址对齐(如4字节对齐),可使用 __attribute__((aligned(4)))

效率优势:

在STM32CubeIDE/HAL库中,外设驱动常使用指针(如pData参数),遵循此模式可提升性能并节省内存。

面试常考+1:函数指针指针函数、数组指针指针数组

在嵌入式开发领域,函数指针、指针函数、数组指针和

2024-08-10 08:11:01

为什么指针之间不要随意赋值呢?

指针之间也不能随意赋值。

2024-03-28 17:13:40

数组指针不相同吗?数组指针有哪些区别

数组就是指针,指针就是数组,这样的言论在评论区看到不下于10次。

2023-12-13 16:34:34

C语言中指针数组

#define SIZE 10int arry[SIZE]={0,1,2,3,4,5,6,7,8,9}; //数组名arry表示数组首元素的地址*int p,temp;//可直接初始化定义

资料下载 李泳瑜 2022-01-13 13:11:20

MCU_C语言中 数组指针 的应用 -- char (*stringp)[]

定义一个指向数组的指针stringpchar (*stringp)[];取得某个数组的地址 :char *dst = &amp;stri

资料下载 h1654155275.3132 2021-11-29 18:06:10

二维数组指针指向错误应该如何纠正

本文档的主要内容详细介绍的是二维数组的指针指向错误应该如何纠正。

资料下载 佚名 2019-12-13 16:01:21

指针数组的详细资料和实例程序免费下载

指针变量来访问数组中任一元素,通常将数组的首地址称为数组的

资料下载 佚名 2019-11-05 17:07:14

指针实现字符串拷贝的程序和字符型指针变量与字符数组的区别说明

字符串是存放在字符数组中的,对字符数组中的字符逐个处理时,前面介绍的指针与数组

资料下载 佚名 2019-11-05 16:15:31

数组指针不能混用的情况

数组与指针不能混用的情况  数组与指针是 C/C++ 中非常常见的特性和

2023-12-07 13:46:35

C语言中指针数组数组指针的区别

指针和数组之间存在着紧密的关系。在本文中,我们将探讨指针和数组的关系、

2023-08-17 15:29:08

C语言中什么是指针数组

在C语言中一个数组,若其元素均为指针类型数据,称为指针数组,也就是说,

2023-03-10 15:26:24

【C语言进阶】“数组指针”和“指针数组”都是啥跟啥?

【C语言进阶】“数组指针”和“指针数组”都是啥跟啥?

2022-08-31 13:21:59

二维数组数组指针以及指针数组

二维数组与数组指针以及指针

2022-08-16 09:02:07

理解函数指针、函数指针数组、函数指针数组指针

理解函数指针、函数指针数组、函数指针

2020-06-29 15:38:34

指针数组数组指针的区别

这里我们区分两个重要的概念:指针数组、数组指针。

2020-06-29 15:30:01

7天热门专题 换一换
相关标签