5268|20

198

帖子

3

TA的资源

一粒金砂(中级)

楼主
 

全局数组不更新,这是什么原因? [复制链接]

uint8_t temp_buf[3] = {0x32,0x33,0x43};

在case 0x14:
                 temp_buf[0] = 0x34;
                 temp_buf[1] = 0x35;
                 break;
赋值,再读回来,发现
最初,temp_buf[0] = 0x34;
         temp_buf[1] = 0x35;
后来,又变为
         temp_buf[0] = 0x32;
         temp_buf[1] = 0x33;
百思不得其解!

最新回复

楼主,是你的看门狗在作怪  详情 回复 发表于 2014-9-25 07:40
点赞 关注

回复
举报

1149

帖子

3

TA的资源

五彩晶圆(初级)

沙发
 
buf内容作为常量定义的,是只读的。中间读的只不过是临时变量的罢了!可以看看指针变量和变量指针的概念及其区别。
 
个人签名construction complete!
 

回复

1792

帖子

0

TA的资源

五彩晶圆(初级)

板凳
 
不赞同楼上说的,数组和指针是不一样的,建议你把代码全贴上来,光靠你的几句话描述看不出问题所在
 
 
 

回复

6423

帖子

17

TA的资源

版主

4
 
我也不赞同二楼说的,还是多几行代码才能定位问题
 
个人签名training
 
 

回复

1149

帖子

3

TA的资源

五彩晶圆(初级)

5
 
sint27 发表于 2014-9-24 08:13
不赞同楼上说的,数组和指针是不一样的,建议你把代码全贴上来,光靠你的几句话描述看不出问题所在

数组和指针表面不一样罢了,实际上数组调用的时候是指针的方式调用的,之所以让他看指针变量和变量指针是要明白数据的本质。
 
个人签名construction complete!
 
 

回复

1149

帖子

3

TA的资源

五彩晶圆(初级)

6
 
白丁 发表于 2014-9-24 08:19
我也不赞同二楼说的,还是多几行代码才能定位问题

看这几行足够了!不能修改就是不能修改,buf内容本就是只读的。
 
个人签名construction complete!
 
 

回复

1792

帖子

0

TA的资源

五彩晶圆(初级)

7
 
zqjqq88 发表于 2014-9-24 08:50
数组和指针表面不一样罢了,实际上数组调用的时候是指针的方式调用的,之所以让他看指针变量和变量指针是 ...

我特意试了一下,代码如下
  1. void main(void)
  2. {
  3.         uchar buffer = smartOption[0];
  4.         uchar a[2]={0x01,0x02};
  5.         di();
  6.         SYM=0x00;
  7.         SPL=0xff;//指针初始化,必须在使用函数体之前初始化
  8.         SysInit();
  9.         ei();       

  10.         a[0]=0x03;
  11.        
  12.         while(1)
  13.         {                         
  14.                 CLRWDT();
  15.                 if(a[0]==0x03)
  16.                 {
  17.                         pS1Out=1;
  18.                 }
  19.                 //SystemWork();
  20.         }
复制代码
很抱歉,这个pS1out被置高了,在我的板上灯亮了,不知道这如何解释
 
 
 

回复

1149

帖子

3

TA的资源

五彩晶圆(初级)

8
 
抱歉,是我错啦!这个只是数据的初始化,我看到这个习惯性的想到const code修饰字符。不能修改可能是其它原因。
 
个人签名construction complete!
 
 

回复

1149

帖子

3

TA的资源

五彩晶圆(初级)

9
 
白丁 发表于 2014-9-24 08:19
我也不赞同二楼说的,还是多几行代码才能定位问题

抱歉,是我错啦!这个只是数据的初始化,我看到这个习惯性的想到const code修饰字符。不能修改可能是其它原因。
 
个人签名construction complete!
 
 

回复

1149

帖子

3

TA的资源

五彩晶圆(初级)

10
 
sint27 发表于 2014-9-24 08:13
不赞同楼上说的,数组和指针是不一样的,建议你把代码全贴上来,光靠你的几句话描述看不出问题所在

抱歉,是我错啦!这个只是数据的初始化,我看到这个习惯性的想到const code修饰字符。不能修改可能是其它原因。
 
个人签名construction complete!
 
 

回复

6423

帖子

17

TA的资源

版主

11
 
zqjqq88 发表于 2014-9-24 09:20
抱歉,是我错啦!这个只是数据的初始化,我看到这个习惯性的想到const code修饰字符。不能修改可能是其它 ...


 
个人签名training
 
 

回复

1972

帖子

1

TA的资源

五彩晶圆(初级)

12
 
看看是怎么回事,现在搞定了吗
 
 
 

回复

1792

帖子

0

TA的资源

五彩晶圆(初级)

13
 
zqjqq88 发表于 2014-9-24 09:21
抱歉,是我错啦!这个只是数据的初始化,我看到这个习惯性的想到const code修饰字符。不能修改可能是其它 ...

   
 
 
 

回复

198

帖子

3

TA的资源

一粒金砂(中级)

14
 
sint27 发表于 2014-9-24 08:13
不赞同楼上说的,数组和指针是不一样的,建议你把代码全贴上来,光靠你的几句话描述看不出问题所在


/***********************************************************************************************************************
* DISCLAIMER
* This software is supplied by Renesas Electronics Corporation and is only intended for use with Renesas products.
* No other uses are authorized. This software is owned by Renesas Electronics Corporation and is protected under all
* applicable laws, including copyright laws.
* THIS SOFTWARE IS PROVIDED "AS IS" AND RENESAS MAKES NO WARRANTIESREGARDING THIS SOFTWARE, WHETHER EXPRESS, IMPLIED
* OR STATUTORY, INCLUDING BUT NOT LIMITED TO WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
* NON-INFRINGEMENT.  ALL SUCH WARRANTIES ARE EXPRESSLY DISCLAIMED.TO THE MAXIMUM EXTENT PERMITTED NOT PROHIBITED BY
* LAW, NEITHER RENESAS ELECTRONICS CORPORATION NOR ANY OF ITS AFFILIATED COMPANIES SHALL BE LIABLE FOR ANY DIRECT,
* INDIRECT, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES FOR ANY REASON RELATED TO THIS SOFTWARE, EVEN IF RENESAS OR
* ITS AFFILIATES HAVE BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
* Renesas reserves the right, without notice, to make changes to this software and to discontinue the availability
* of this software. By using this software, you agree to the additional terms and conditions found by accessing the
* following link:
* http://www.renesas.com/disclaimer
*
* Copyright (C) 2012, 2014 Renesas Electronics Corporation. All rights reserved.
***********************************************************************************************************************/

/***********************************************************************************************************************
* File Name    : r_cg_main.c
* Version      : Code Generator for RL78/R7F0C8021 V1.02.01.01 [30 May 2014]
* Device(s)    : R7F0C8021
* Tool-Chain   : CA78K0R
* Description  : This file implements main function.
* Creation Date: 2014-9-21
***********************************************************************************************************************/

/***********************************************************************************************************************
Pragma directive
***********************************************************************************************************************/
/* Start user code for pragma. Do not edit comment generated here */
/* End user code. Do not edit comment generated here */

/***********************************************************************************************************************
Includes
***********************************************************************************************************************/
#include "r_cg_macrodriver.h"
#include "r_cg_cgc.h"
#include "r_cg_port.h"
#include "r_cg_wdt.h"
#include "r_cg_sau.h"
/* Start user code for include. Do not edit comment generated here */
/* End user code. Do not edit comment generated here */
#include "r_cg_userdefine.h"

/***********************************************************************************************************************
Global variables and functions
***********************************************************************************************************************/
/* Start user code for global. Do not edit comment generated here */
unsigned short temp_data;
uint8_t tx_buf[] = {"Temperature is "};
uint8_t temp_buf[3] = {0x32,0x33,0x43};
uint8_t end_buf[2] = {"\n"};
/* End user code. Do not edit comment generated here */

void R_MAIN_UserInit(void);
void send_data(void);
void time_delay(unsigned int count);
void delay(unsigned short time);
unsigned char DS18B20_INIT();
unsigned char DS18B20_READ();
void DS18B20_WRITE(unsigned char data);
void DS18B20_SENDCHANGECMD();
void DS18B20_SENDREADCMD();
unsigned short DS18B20_GETTEMP();
/***********************************************************************************************************************
* Function Name: main
* Description  : This function implements main function.
* Arguments    : None
* Return Value : None
***********************************************************************************************************************/
void main(void)
{
    uint8_t rx_buf[2];
    uint8_t i;
   
    R_MAIN_UserInit();
    /* Start user code. Do not edit comment generated here */
         
    while (1U)
    {
        R_UART0_Receive(rx_buf, 1);
        switch(rx_buf[0])
        {
         case 0x11:
                  P0.4 = 0;
                 rx_buf[0] = 0x00;
                 break;
         case 0x12:
                  P0.4 = 1;
                 rx_buf[0] = 0x00;
                 break;
         case 0x13:
                  for(i=0;i<20;i++)
                 {
                          P0.4 = ~P0.4;
                         time_delay(200);
                 }
                 rx_buf[0] = 0x00;
                 break;       
         case 0x14:
                 //DS18B20_SENDCHANGECMD();
                 //temp_data=DS18B20_GETTEMP();
                 //time_delay(2000);
                 //temp_data = temp_data * 63;
                 //temp_buf[0] = (unsigned char)(temp_data>>8);
                 //temp_buf[1] = (unsigned char)temp_data;
                 temp_buf[0] = 0x33;
                 temp_buf[1] = 0x34;
                 R_UART0_Send(tx_buf, sizeof(tx_buf));
                 time_delay(100);
                 R_UART0_Send(temp_buf, sizeof(temp_buf));
                 time_delay(100);
                 R_UART0_Send(end_buf, sizeof(end_buf));
                 time_delay(100);
                 rx_buf[0] = 0x00;
                 break;
         case 0x15:
                  
                 rx_buf[0] = 0x00;
                 break;
         default:
                 break;
        }       
    }
    /* End user code. Do not edit comment generated here */
}
/***********************************************************************************************************************
* Function Name: R_MAIN_UserInit
* Description  : This function adds user code before implementing main function.
* Arguments    : None
* Return Value : None
***********************************************************************************************************************/
void R_MAIN_UserInit(void)
{
    /* Start user code. Do not edit comment generated here */
    EI();
    R_UART0_Start();
    /* End user code. Do not edit comment generated here */
}

void delay(unsigned short time) //delay for timex us.
{       
        while(--time);
}
unsigned char DS18B20_INIT()
{      
        unsigned char data;
        unsigned char res;
           R_PORT_Create_OUT();
        P0.2=1;
        delay(10);
        P0.2=0;
        delay(960);//480.35us
        R_PORT_Create_IN();
        delay(131);//66.35us
        data=P0.2;
        delay(829);//480-66us
        if(data==0)
        {
                res=1;
        }
        else
        {
                res=0;
        }
        return res;
}
unsigned char DS18B20_READ()
{
        unsigned char data;
        unsigned char i;
        for(i=8;i>0;i--)
        {
        data>>=1;
        R_PORT_Create_OUT();
        P0.2=0;
        delay(11);//6.35us
        P0.2=1;
        delay(7);//4.35us
        R_PORT_Create_IN();
        if(P0.2)
        {
         data|=0x80;
        }
        delay(125);//25us
        }
        delay(1);
        R_PORT_Create_OUT();
        return data;
}
  void DS18B20_WRITE(unsigned char data)
  {
          unsigned char i;
        unsigned char temp;
        delay(10);
        R_PORT_Create_OUT();
        for(i=8;i>0;i--)
        {
                temp=data&0x01;
                P0.2=0;
                delay(2);////////////////////
                if(temp==1) {P0.2=1;}
                delay(125);//63.35us
                P0.2=1;
                NOP();
                NOP();               
                data=(data>>1);
        }
  }
void DS18B20_SENDCHANGECMD()
{
         DS18B20_INIT();
         delay(1);
         DS18B20_WRITE(0xcc);
         DS18B20_WRITE(0x44);
}
void DS18B20_SENDREADCMD()
{
         DS18B20_INIT();
         delay(1);
         DS18B20_WRITE(0xCC);
         DS18B20_WRITE(0xbe);
}
unsigned short DS18B20_GETTEMP()
{
        unsigned short value;
        //float t;
        unsigned char low,high;
        DS18B20_SENDREADCMD();
        low=DS18B20_READ();
        high=DS18B20_READ();
        value=(unsigned short)high;
        value=(value<<8)|low;
        //t=value*0.0625;
        //value=t*10+0.5;
        return value;
}

void time_delay(unsigned int count)
{
        unsigned int i,j;
       
        for(i=0; i         for(j=0; j<500; j++);
       
}
/* Start user code for adding. Do not edit comment generated here */
/* End user code. Do not edit comment generated here */
 
 
 

回复

198

帖子

3

TA的资源

一粒金砂(中级)

15
 
sint27 发表于 2014-9-24 08:58
我特意试了一下,代码如下
很抱歉,这个pS1out被置高了,在我的板上灯亮了,不知道这如何解释

这种我也试过没问题,但是你看我的代码(新贴出来了),就是改不了数组内容,我怀疑是芯片存储方式我没用好可能。
 
 
 

回复

198

帖子

3

TA的资源

一粒金砂(中级)

16
 
bobde163 发表于 2014-9-24 13:20
看看是怎么回事,现在搞定了吗

还没啊,昨天我研究了一晚上,好奇怪,我之前也用过不少品牌,这个还是第一次碰到。
 
 
 

回复

198

帖子

3

TA的资源

一粒金砂(中级)

17
 
sint27 发表于 2014-9-24 08:13
不赞同楼上说的,数组和指针是不一样的,建议你把代码全贴上来,光靠你的几句话描述看不出问题所在

/***********************************************************************************************************************
* DISCLAIMER
* This software is supplied by Renesas Electronics Corporation and is only intended for use with Renesas products.
* No other uses are authorized. This software is owned by Renesas Electronics Corporation and is protected under all
* applicable laws, including copyright laws.
* THIS SOFTWARE IS PROVIDED "AS IS" AND RENESAS MAKES NO WARRANTIESREGARDING THIS SOFTWARE, WHETHER EXPRESS, IMPLIED
* OR STATUTORY, INCLUDING BUT NOT LIMITED TO WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
* NON-INFRINGEMENT.  ALL SUCH WARRANTIES ARE EXPRESSLY DISCLAIMED.TO THE MAXIMUM EXTENT PERMITTED NOT PROHIBITED BY
* LAW, NEITHER RENESAS ELECTRONICS CORPORATION NOR ANY OF ITS AFFILIATED COMPANIES SHALL BE LIABLE FOR ANY DIRECT,
* INDIRECT, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES FOR ANY REASON RELATED TO THIS SOFTWARE, EVEN IF RENESAS OR
* ITS AFFILIATES HAVE BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
* Renesas reserves the right, without notice, to make changes to this software and to discontinue the availability
* of this software. By using this software, you agree to the additional terms and conditions found by accessing the
* following link:
* http://www.renesas.com/disclaimer
*
* Copyright (C) 2012, 2014 Renesas Electronics Corporation. All rights reserved.
***********************************************************************************************************************/

/***********************************************************************************************************************
* File Name    : r_cg_main.c
* Version      : Code Generator for RL78/R7F0C8021 V1.02.01.01 [30 May 2014]
* Device(s)    : R7F0C8021
* Tool-Chain   : CA78K0R
* Description  : This file implements main function.
* Creation Date: 2014-9-21
***********************************************************************************************************************/

/***********************************************************************************************************************
Pragma directive
***********************************************************************************************************************/
/* Start user code for pragma. Do not edit comment generated here */
/* End user code. Do not edit comment generated here */

/***********************************************************************************************************************
Includes
***********************************************************************************************************************/
#include "r_cg_macrodriver.h"
#include "r_cg_cgc.h"
#include "r_cg_port.h"
#include "r_cg_wdt.h"
#include "r_cg_sau.h"
/* Start user code for include. Do not edit comment generated here */
/* End user code. Do not edit comment generated here */
#include "r_cg_userdefine.h"

/***********************************************************************************************************************
Global variables and functions
***********************************************************************************************************************/
/* Start user code for global. Do not edit comment generated here */
unsigned short temp_data;
uint8_t tx_buf[] = {"Temperature is "};
uint8_t temp_buf[3] = {0x32,0x33,0x43};
uint8_t end_buf[2] = {"\n"};
/* End user code. Do not edit comment generated here */

void R_MAIN_UserInit(void);
void send_data(void);
void time_delay(unsigned int count);
void delay(unsigned short time);
unsigned char DS18B20_INIT();
unsigned char DS18B20_READ();
void DS18B20_WRITE(unsigned char data);
void DS18B20_SENDCHANGECMD();
void DS18B20_SENDREADCMD();
unsigned short DS18B20_GETTEMP();
/***********************************************************************************************************************
* Function Name: main
* Description  : This function implements main function.
* Arguments    : None
* Return Value : None
***********************************************************************************************************************/
void main(void)
{
    uint8_t rx_buf[2];
    uint8_t i;
   
    R_MAIN_UserInit();
    /* Start user code. Do not edit comment generated here */
     
    while (1U)
    {
    R_UART0_Receive(rx_buf, 1);
    switch(rx_buf[0])
    {
     case 0x11:
          P0.4 = 0;
         rx_buf[0] = 0x00;
         break;
     case 0x12:
          P0.4 = 1;
         rx_buf[0] = 0x00;
         break;
     case 0x13:
          for(i=0;i<20;i++)
         {
              P0.4 = ~P0.4;
             time_delay(200);
         }
         rx_buf[0] = 0x00;
         break;   
     case 0x14:
         //DS18B20_SENDCHANGECMD();
         //temp_data=DS18B20_GETTEMP();
         //time_delay(2000);
         //temp_data = temp_data * 63;
         //temp_buf[0] = (unsigned char)(temp_data>>8);
         //temp_buf[1] = (unsigned char)temp_data;
         temp_buf[0] = 0x33;
         temp_buf[1] = 0x34;
         R_UART0_Send(tx_buf, sizeof(tx_buf));
         time_delay(100);
         R_UART0_Send(temp_buf, sizeof(temp_buf));
         time_delay(100);
         R_UART0_Send(end_buf, sizeof(end_buf));
         time_delay(100);
         rx_buf[0] = 0x00;
         break;
     case 0x15:
         
         rx_buf[0] = 0x00;
         break;
     default:
         break;
    }   
    }
    /* End user code. Do not edit comment generated here */
}
/***********************************************************************************************************************
* Function Name: R_MAIN_UserInit
* Description  : This function adds user code before implementing main function.
* Arguments    : None
* Return Value : None
***********************************************************************************************************************/
void R_MAIN_UserInit(void)
{
    /* Start user code. Do not edit comment generated here */
    EI();
    R_UART0_Start();
    /* End user code. Do not edit comment generated here */
}

void delay(unsigned short time) //delay for timex us.
{   
    while(--time);
}
unsigned char DS18B20_INIT()
{      
    unsigned char data;
    unsigned char res;
       R_PORT_Create_OUT();
    P0.2=1;
    delay(10);
    P0.2=0;
    delay(960);//480.35us
    R_PORT_Create_IN();
    delay(131);//66.35us
    data=P0.2;
    delay(829);//480-66us
    if(data==0)
    {
        res=1;
    }
    else
    {
        res=0;
    }
    return res;
}
unsigned char DS18B20_READ()
{
    unsigned char data;
    unsigned char i;
    for(i=8;i>0;i--)
    {
    data>>=1;
    R_PORT_Create_OUT();
    P0.2=0;
    delay(11);//6.35us
    P0.2=1;
    delay(7);//4.35us
    R_PORT_Create_IN();
    if(P0.2)
    {
     data|=0x80;
    }
    delay(125);//25us
    }
    delay(1);
    R_PORT_Create_OUT();
    return data;
}
  void DS18B20_WRITE(unsigned char data)
  {
      unsigned char i;
    unsigned char temp;
    delay(10);
    R_PORT_Create_OUT();
    for(i=8;i>0;i--)
    {
        temp=data&0x01;
        P0.2=0;
        delay(2);////////////////////
            if(temp==1) {P0.2=1;}
        delay(125);//63.35us
        P0.2=1;
        NOP();
        NOP();        
        data=(data>>1);
    }
  }
void DS18B20_SENDCHANGECMD()
{
     DS18B20_INIT();
     delay(1);
     DS18B20_WRITE(0xcc);
     DS18B20_WRITE(0x44);
}
void DS18B20_SENDREADCMD()
{
     DS18B20_INIT();
     delay(1);
     DS18B20_WRITE(0xCC);
     DS18B20_WRITE(0xbe);
}
unsigned short DS18B20_GETTEMP()
{
    unsigned short value;
    //float t;
    unsigned char low,high;
    DS18B20_SENDREADCMD();
    low=DS18B20_READ();
    high=DS18B20_READ();
    value=(unsigned short)high;
    value=(value<<8)|low;
    //t=value*0.0625;
    //value=t*10+0.5;
    return value;
}

void time_delay(unsigned int count)
{
    unsigned int i,j;
   
    for(i=0; i     for(j=0; j<500; j++);
   
}
/* Start user code for adding. Do not edit comment generated here */
/* End user code. Do not edit comment generated here */


 
 
 

回复

198

帖子

3

TA的资源

一粒金砂(中级)

18
 
我猜测是因为仿真器没断电的原因?不知道有赞同的没?今天上电又跑了一次,没有再出现昨天的问题。但是,采集温度之后,串口又显示不出来,独立工作是没问题的。
 
 
 

回复

374

帖子

3

TA的资源

一粒金砂(高级)

19
 
楼主,是你的看门狗在作怪
 
 
 

回复

198

帖子

3

TA的资源

一粒金砂(中级)

20
 
wenyangzeng 发表于 2014-9-25 07:40
楼主,是你的看门狗在作怪

我回家试试看
 
 
 

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

开源项目 更多>>
    随便看看
    查找数据手册?

    EEWorld Datasheet 技术支持

    相关文章 更多>>
    关闭
    站长推荐上一条 1/10 下一条

     
    EEWorld订阅号

     
    EEWorld服务号

     
    汽车开发圈

    About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

    站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

    北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

    电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved
    快速回复 返回顶部 返回列表