OpenEdv-开源电子网

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

关于C语言中const关键字的问题,请帮忙解答

[复制链接]

39

主题

156

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
417
金钱
417
注册时间
2012-12-23
在线时间
19 小时
发表于 2013-8-27 11:12:33 | 显示全部楼层 |阅读模式


const u8 TX_ADDRESS[TX_ADR_WIDTH]={0x34,0x43,0x10,0x10,0x01}; //发送地址
const u8 RX_ADDRESS[RX_ADR_WIDTH]={0x34,0x43,0x10,0x10,0x01}; //发送地址

void TX_Mode(void)
{  
// u8 t_r;
NRF24L01_CE=0; //使能24L01    
  NRF24L01_Write_Buf(WRITE_REG+TX_ADDR,(u8*)TX_ADDRESS,TX_ADR_WIDTH);//写TX节点地址 
// t_r=1;
// printf("t_r:%d\n",sizeof(TX_ADDRESS));
//写配置寄存器,发送地址
  NRF24L01_Write_Buf(WRITE_REG+RX_ADDR_P0,(u8*)RX_ADDRESS,RX_ADR_WIDTH); 
//设置RX节点地址,主要为了使能ACK  

  NRF24L01_Write_Reg(WRITE_REG+EN_AA,0x01);     //使能通道0的自动应答
//EN_AA[7:0]->bit7&6=0,bit5(CH5自动应答),bit4(CH4自动应答),bit3(CH3自动应答)
//bit2(CH2自动应答),bit1(CH1自动应答),bit0(CH0自动应答)    
  NRF24L01_Write_Reg(WRITE_REG+EN_RXADDR,0x01); //使能通道0的接收地址,允许通道0接收地址  
  NRF24L01_Write_Reg(WRITE_REG+SETUP_RETR,0x1a);
//设置自动重发间隔时间:500us + 86us; 最大自动重发次数:10次

  NRF24L01_Write_Reg(WRITE_REG+RF_CH,40);       //设置RF通道为40
  NRF24L01_Write_Reg(WRITE_REG+RF_SETUP,0x0f);  //设置TX发射参数,0db增益,2Mbps,低噪声增益开启   
  NRF24L01_Write_Reg(WRITE_REG+CONFIG,0x0e);    
//配置基本工作模式的参数WR_UP,EN_CRC,16BIT_CRC,接收模式,开启所有中断
NRF24L01_CE=1;//CE为高,10us后启动发送
}
void RX_Mode(void)
{
NRF24L01_CE=0;    //使能24L01
  NRF24L01_Write_Buf(WRITE_REG+RX_ADDR_P0,(u8*)RX_ADDRESS,RX_ADR_WIDTH);//写RX节点地址
 
  NRF24L01_Write_Reg(WRITE_REG+EN_AA,0x01);    //使能通道0的自动应答    
  NRF24L01_Write_Reg(WRITE_REG+EN_RXADDR,0x01);//使能通道0的接收地址    
  NRF24L01_Write_Reg(WRITE_REG+RF_CH,40);     //设置RF通信频率  
  NRF24L01_Write_Reg(WRITE_REG+RX_PW_P0,RX_PLOAD_WIDTH);//选择通道0的有效数据宽度    
  NRF24L01_Write_Reg(WRITE_REG+RF_SETUP,0x0f);//设置TX发射参数,0db增益,2Mbps,低噪声增益开启   
  NRF24L01_Write_Reg(WRITE_REG+CONFIG, 0x0f);//配置基本工作模式的参数WR_UP,EN_CRC,16BIT_CRC,接收模式 
  NRF24L01_CE = 1; //CE为高,进入接收模式 
}
TX_ADDRESS 和RX_ADDRESS这两个数字是被定义成const只读型的
上面是无线通信例程里面设置TX 模式和RX模式的两个函数
为什么在进行写地址的时候,也就是要写入
TX_ADDRESS 和RX_ADDRESS 的元素,这里不能直接用其数组名做形参呢?
而要在前面加一个(u8*)?不是数组名作为形参的时候他就是一个4bit的指针了吗?为什么还要加一个(u8*)呢?


  



天道酬勤
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2013-8-27 11:42:50 | 显示全部楼层
回复【楼主位】xly0907:
---------------------------------
为什么你不自己试试呢?
为什么你不去掉u8*,然后编译看看有什么不同呢?

为什么这么多人只知道问为什么?难道真理能通过为什么问出来么?
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

39

主题

156

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
417
金钱
417
注册时间
2012-12-23
在线时间
19 小时
 楼主| 发表于 2013-8-27 11:57:14 | 显示全部楼层
回复【2楼】正点原子:
---------------------------------
我有去掉编译过啊,然后出现了错误,报错出现了什么类型不兼容的情况啊,所以才拿出来问大家呢
天道酬勤
回复 支持 反对

使用道具 举报

51

主题

1455

帖子

3

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
2613
金钱
2613
注册时间
2011-1-25
在线时间
176 小时
发表于 2013-8-27 12:00:02 | 显示全部楼层
楼主试出来木有?知道为什么没?
一直努力就很好。
回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2013-8-27 12:00:30 | 显示全部楼层
回复【3楼】xly0907:
---------------------------------
那就是了,说明不能去掉嘛。
错误原因就是类型不匹配。
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-7-14 12:17

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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