我对指针及其使用有一般的了解,但我遇到了一些使用指针转换的代码(我想),我从未见过,也不确定我是否理解
该代码是一个C语言函数(为STM 32 F091微控制器编写),用于从只读存储器(93c66)读取数据.
据我所知,该函数将地址视为参数.地址值用作指针并在SPI上发送.
如果通信正确完成,它将开始监听从EEPROME发送的实际值,然后该函数返回数据
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;
)并附加收件箱的初始读代码(add93 |= 0x0600;
)[0x6 = 110b]
SPI接口设置
/* SPI2 init function */
void MX_SPI2_Init(unsigned int dataSize)
{
/* SPI2 parameter configuration*/
hspi2.Instance = SPI2;
hspi2.Init.Mode = SPI_MODE_MASTER;
hspi2.Init.Direction = SPI_DIRECTION_2LINES;
hspi2.Init.DataSize = SPI_DATASIZE_16BIT;
hspi2.Init.CLKPolarity = SPI_POLARITY_LOW;
hspi2.Init.CLKPhase = SPI_PHASE_1EDGE;
hspi2.Init.NSS = SPI_NSS_SOFT;
hspi2.Init.BaudRatePrescaler = SPI_BAUDRATEPRESCALER_128;
hspi2.Init.FirstBit = SPI_FIRSTBIT_MSB;
hspi2.Init.TIMode = SPI_TIMODE_DISABLE;
hspi2.Init.CRCCalculation = SPI_CRCCALCULATION_DISABLE;
hspi2.Init.CRCPolynomial = 7;
hspi2.Init.CRCLength = SPI_CRC_LENGTH_DATASIZE;
hspi2.Init.NSSPMode = SPI_NSS_PULSE_DISABLE;
if (HAL_SPI_Init(&hspi2) != HAL_OK)
{
_Error_Handler(__FILE__, __LINE__);
}
}