地址和指针是一个东西吗?
两个例子为什么不同?
一、
//buf:接收缓存首地址
//len:读到的数据长度
函数声明:
void RS485_Receive_Data(u8 *buf)
函数调用:
u8 rs485buf[5];
RS485_Receive_Data(rs485buf);
数组名是指向第一个元素的地址,地址! buf是指针变量,是一个变量!值为一个内存地址。这个我一直以为理解了,可是今天有点绕晕了。主要是因为第三个问题。
二:
#define USART1 ((USART_TypeDef *) USART1_BASE)
#define USART1_BASE (APB2PERIPH_BASE + 0x3800)
USART1_BASE是一个地址值,说到底是个数,((USART_TypeDef *) USART1_BASE) 这个操作是什么意思呢,抛开结构体不说,这是不是就相当于一个(int *) 3 操作?这怎么理解?
其实我学STM32有一段时间,本来自我感觉挺清晰的,知道USART1就是一个结构体指针,但是看了下面这个代码我就想了想,晕了,然后就不知道它为什么是结构体指针了。
我的猜测:USART1->DR是一个指针
三、
//cpar:外设地址
//cmar:存储器地址
//cndtr:数据传输量
函数声明:
void MYDMA_Config(u32 cpar,u32 cmar) //地址为什么不用指针了?为什么不是u32 * cpar?因为在调用的时候给的参数就是(u32)&USART1->DR,这个是个数还是个指针呢?
函数调用:
u8 SendBuff[SEND_BUF_SIZE]; //发送数据缓冲区
MYDMA_Config( (u32)&USART1->DR,(u32)SendBuff); //(u32)SendBuff是什么呢?和(u32 *)SendBuff区别呢?
&USART1->DR这是个指针吗?是 &(USART1->DR) 吗? 看样子好像不是,用u32强制转换,那&USART1->DR 应该是个数吧,是个地址值,地址值和指针的关系是什么,是不是常数1和变量b的关系呢?
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
没有仔细看你前面的内容,
仅就这一楼的疑问谈我的理解:
前者你的理解是对的。
后者即RS485_Receive_Data(u32(rs485buf));
传递的是一个32位的数值,这个数值等于u8 rs485buf[5]的首地址。
至于说,在函数体内部如何处理就看函数的具体实现方法了。
它只是得到了一个32位的数值!!!
一周热门 更多>