OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 3517|回复: 3

nrf24l01传输过程中结束符有什么作用?

[复制链接]

5

主题

28

帖子

0

精华

初级会员

Rank: 2

积分
95
金钱
95
注册时间
2018-9-19
在线时间
13 小时
发表于 2018-10-19 16:01:16 | 显示全部楼层 |阅读模式
1金钱
不清楚这个结束符在这个程序里面起到了什么样的作用,我把结束符注释掉后,发送和接收两个程序都正常运行。
两处标星号的地方。
if(mode==0)//RX模式
        {
                LCD_ShowString(30,150,200,16,16,"NRF24L01 RX_Mode");       
                LCD_ShowString(30,170,200,16,16,"Received DATA:");       
                NRF24L01_RX_Mode();                  
                while(1)
                {                                                                                   
                        if(NRF24L01_RxPacket(tmp_buf)==0)//一旦接收到信息,则显示出来
                        {
                                //tmp_buf[32]=0;//加入字符串结束符***********************************
                                LCD_ShowString(0,190,lcddev.width-1,32,16,tmp_buf);   
                        }else delay_us(100);          
                        t++;
                        if(t==10000)//′óÔ¼1sÖó¸Ä±äò»′Î×′ì¬
                        {
                                t=0;
                                LED0=!LED0;
                        }                                     
                };       
        }else//TXÄ£ê½
        {                                                            
                LCD_ShowString(30,150,200,16,16,"NRF24L01 TX_Mode");       
                NRF24L01_TX_Mode();
                mode=' ';//′ó¿Õ¸ñ¼ü¿aê¼  
                while(1)
                {                                                              
                        if(NRF24L01_TxPacket(tmp_buf)==TX_OK)
                        {
                                LCD_ShowString(30,170,239,32,16,"Sended DATA:");       
                                LCD_ShowString(0,190,lcddev.width-1,32,16,tmp_buf);
                                key=mode;
                                for(t=0;t<32;t++)
                                {
                                        key++;
                                        if(key>('~'))key=' ';
                                        tmp_buf[t]=key;       
                                }
                                mode++;
                                if(mode>'~')mode=' ';            
                                //tmp_buf[32]=0;//加入结束符*****************************                  
                        }else
                        {                                                                                          
                                LCD_Fill(0,170,lcddev.width,170+16*3,WHITE);//&#199;&#229;&#191;&#213;&#207;&#212;ê&#190;                          
                                LCD_ShowString(30,170,lcddev.width-1,32,16,"Send Failed ");
                        };
                        LED0=!LED0;
                        delay_ms(1500);                                    
                };
        }

最佳答案

查看完整内容[请看2#楼]

NRF24L01一次最大传输32字节;而从: tmp_buf[32]=0 来看的话,是对这个缓冲区数组的第33个字节赋值0.所以肯定是不会传输到这个字节的,这个也就是为什么楼主发现去掉和不去掉并没有什么不同的原因。 不过对于为什么这里会有这个结束符,不是很清楚。猜测可能要通过NRF24L01传送的数据是一个字符串,可能有些步骤需要计算这个字符串的长度,使这个缓冲区数组的最后一个字节为\0能够避免使用字符串长度计算函数计算出不正确的 ...
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

2

主题

756

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
4163
金钱
4163
注册时间
2017-10-24
在线时间
251 小时
发表于 2018-10-19 16:01:17 | 显示全部楼层
NRF24L01一次最大传输32字节;而从:
tmp_buf[32]=0
来看的话,是对这个缓冲区数组的第33个字节赋值0.所以肯定是不会传输到这个字节的,这个也就是为什么楼主发现去掉和不去掉并没有什么不同的原因。

不过对于为什么这里会有这个结束符,不是很清楚。猜测可能要通过NRF24L01传送的数据是一个字符串,可能有些步骤需要计算这个字符串的长度,使这个缓冲区数组的最后一个字节为\0能够避免使用字符串长度计算函数计算出不正确的字符串长度,例如如果这个字符串就是32字节,如果后面不加\0那么字符串长度计算函数就会一直向这个数组地址区域之外的地址读数据,直到找到\0为止。
(仅仅是一种猜想)
十六进制带我飞。
回复

使用道具 举报

57

主题

1680

帖子

3

精华

资深版主

Rank: 8Rank: 8

积分
4306
金钱
4306
注册时间
2018-6-30
在线时间
808 小时
发表于 2018-10-19 18:48:20 | 显示全部楼层
tmp_buf[32]=0发送完32个字节的结束符
业精于勤荒于嬉;行成于思毁于随!
回复

使用道具 举报

0

主题

109

帖子

0

精华

初级会员

Rank: 2

积分
167
金钱
167
注册时间
2018-9-2
在线时间
8 小时
发表于 2018-10-20 08:15:59 | 显示全部楼层
学习了,谢谢大佬的讲解
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-6-8 14:25

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表