弱弱的问一下,自己写了一个RS232发送的函数,但是不能正常工作,看了书也没找到那里错误,但就是sizeof计算的不对。 代码如下: <span style="font-size: small"><span style="font-family: 宋体">void RS232_Send(USART_TypeDef* RS232_No, uint8_t ToSend[]) { uint8_t NbrOfDataToTransfer = 0; uint8_t TxCounter = 0; NbrOfDataToTransfer = sizeof(ToSend); USART_SendData(RS232_3, NbrOfDataToTransfer); while(TxCounter |
RE:我自己写的一个函数里的Sizeof有问题,求助。
回复:我自己写的一个函数里的Sizeof有问题,求助。
sizeof是计算你的给的数组的空间,这样是不对的。你应该自己输入要发送的长度。这样最好的办法。
这个是我参考STM官方的例程修改的,原来的是NbrOfDataToTransfer = sizeof(ToSend) / sizeof(*(ToSend)) - 1),可以计算出正确的长度,我发现sizeof(ToSend) 在这个例子中计算的数值是一样的,就写成这个了。
写成这样的原因,是觉得每次发送的时候都要自己计算数组长度,觉得而有点麻烦,用这样的方法可以让机器计算长度。
问题在于,比如有一个Buffer[ ]数组,在RS232_Send( )函数中直接写成sizeof(Buffer) 计算数组的长度是正确的,但就是通过RS232_Send(RS232-No, Buffer )计算Buffer[ ]的长度就不对。是不是我写的这个函数不正确呢,比如语法的错误,什么的,但是每次调用时输出的前三个字符是我调用的字符串,实在不懂。
RE:我自己写的一个函数里的Sizeof有问题,求助。
回复:我自己写的一个函数里的Sizeof有问题,求助。
可以看到例程里面计算的方式是通过数据空间和每个数据单元占用的字节来计算的。这样是准确的。你看一下sizeof计算的规则。
我看过了,是正确的,原例程中的这一段我直接拿来用也是正确的,但就是放在我这个函数里面就不正确了,只能得到3,不知道是哪里错了,找不到原因。
RE:我自己写的一个函数里的Sizeof有问题,求助。
回复:我自己写的一个函数里的Sizeof有问题,求助【悬赏问答】
你的函数没有问题,因为那是函数的一个行参参数,到函数里面采用这个方法就只能得出前三个数据了。
我仔细看了看函数的定义方法,函数处理数组时是用指针处理的,不是想其他变量一样用变量的副本处理,我这里sizeof得到的可能是指针的大小吧。
回复:我自己写的一个函数里的Sizeof有问题,求助【悬赏问答】
回复:我自己写的一个函数里的Sizeof有问题,求助【悬赏问答】
回复第 6 楼 于2012-08-22 22:03:16发表:
你的函数没有问题,因为那是函数的一个行参参数,到函数里面采用这个方法就只能得出前三个数据了。
我仔细看了看函数的定义方法,函数处理数组时是用指针处理的,不是想其他变量一样用变量的副本处理,我这里sizeof得到的可能是指针的大小吧。
指针的大小不应该是4吗?
RE:我自己写的一个函数里的Sizeof有问题,求助【悬赏问答】
为什么那个NbrOfDataToTransfer等于3,你要查看你传输的数据是不是一个字符串,字符串是有结束标志的, 除掉结束标志就只有三字节了
回复:我自己写的一个函数里的Sizeof有问题,求助【悬赏问答】
在c语言中,数组作为形参传入到子函数中去,其实是传入一个指针,这个指针指向数组的首地址,所以sizeof()等于4
为什么那个NbrOfDataToTransfer等于3,你要查看你传输的数据是不是一个字符串,字符串是有结束标志的, 除掉结束标志就只有三字节了
我想是这样子的。