我对指针及其使用有一定的了解,但我想到了一些使用指针转换的代码(我认为)我从未见过,而且我不确定我是否理解
该代码是 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]
在第一个问题中 *代码是什么 unsigned char *pt = (unsigned char )(&add93);做?据我了解,它将 add93 转换为无符号字符指针?
是的,unsigned char *pt = (unsigned char *)(&add93) 行将 add93 的地址发送到指向 unsigned char 的指针
第二个: add93 &= 0x00ff; 添加93 |= 0x0600; 它们执行按位 AND 和 OR 运算,为 add93 准备正确的命令和地址位,以进行 EEPROM 读取操作。