理解C中的指针定义

问题描述 投票:0回答:1

我对指针及其使用有一定的了解,但我想到了一些使用指针转换的代码(我认为)我从未见过,而且我不确定我是否理解

该代码是 C 语言函数(为 STM32F 微控制器编写),用于从 EEPROM (93c66) 读取数据。

据我了解,该函数将要读取的地址作为参数。地址值用作指针并在 SPI 上发送。

如果通讯正确完成,则开始监听EEPROM发送的实际值,然后函数返回数据

unsigned short rd_word(unsigned short add93)
{
  unsigned char *pt = (unsigned char *)(&add93);
  unsigned char error = 0;
  
  CS_HIGH;
  
  add93 &= 0x00ff;
  add93 |= 0x0600;
  
  while (HAL_SPI_Transmit(&hspi2, pt, 1, 1000) != HAL_OK){
    __iar_builtin_no_operation();
  }

  SET_BIT((&hspi2)->Instance->CR1, SPI_CR1_CPHA);
  
  while (HAL_SPI_Receive(&hspi2, pt, 1, 1000) != HAL_OK){
    __iar_builtin_no_operation();
  }
  
  CLEAR_BIT((&hspi2)->Instance->CR1, SPI_CR1_CPHA);

  
  CS_LOW;
  
  return add93;
}

我的问题是代码

unsigned char *pt = (unsigned char *)(&add93);
的作用是什么?据我了解,它将
add93
转换为
unsigned char
指针?

现在,如果

unsigned char *pt
是一个指针,那么它的值是存储
add93
的实际内存值,为什么它传输的是
pt
而不是
add93

代码

add93 &= 0x00ff;
add93 |= 0x0600;

add93
转换为无符号字符 (
add93 &= 0x00ff;
) 并附加 eeprom 的初始读取代码 (
add93 |= 0x0600;
) [0x6 = 110b]

c pointers microcontroller
1个回答
0
投票

在第一个问题中 *代码是什么 unsigned char *pt = (unsigned char )(&add93);做?据我了解,它将 add93 转换为无符号字符指针?

是的,unsigned char *pt = (unsigned char *)(&add93) 行将 add93 的地址发送到指向 unsigned char 的指针

第二个: add93 &= 0x00ff; 添加93 |= 0x0600; 它们执行按位 AND 和 OR 运算,为 add93 准备正确的命令和地址位,以进行 EEPROM 读取操作。

© www.soinside.com 2019 - 2024. All rights reserved.