查看: 4140|回复: 9

[求助] 运行和调试时,buffer的值不一样

[复制链接]

该用户从未签到

22

主题

93

帖子

0

新手上路

Rank: 1

积分
192
最后登录
1970-1-1
发表于 2012-4-6 09:43:49 | 显示全部楼层 |阅读模式
各位高手,
我的代码在运行(非调试状态下)的时候,buffer里的值是 64 01 01 64 4E AF 0D 0A,可以正确的显示到屏幕上;当我设置断点进行调试时,同样的buffer,可是为什么值不对呢?在单步调试的时候值为64 01 01 0A CF 01
出现这样的问题是什么原因啊?
我知道答案 目前已有8人回答
回复

使用道具 举报

  • TA的每日心情
    难过
    2021-12-15 16:01
  • 签到天数: 1 天

    连续签到: 1 天

    [LV.1]初来乍到

    305

    主题

    4701

    帖子

    0

    中级会员

    Rank: 3Rank: 3

    积分
    377
    最后登录
    2023-8-16
    发表于 2012-4-6 10:16:03 | 显示全部楼层

    RE:运行和调试时,buffer的值不一样

    你设置断点以后,buffer的值内容是什么?
    该会员没有填写今日想说内容.
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    22

    主题

    93

    帖子

    0

    新手上路

    Rank: 1

    积分
    192
    最后登录
    1970-1-1
     楼主| 发表于 2012-4-6 10:22:38 | 显示全部楼层

    回复:运行和调试时,buffer的值不一样

    回复第 2 楼 于2012-04-06 10:16:03发表:
    你设置断点以后,buffer的值内容是什么? 

    64 01 01 0A
    感觉是漏掉些数据.
    我是读取串口接收到的数据的!
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    22

    主题

    93

    帖子

    0

    新手上路

    Rank: 1

    积分
    192
    最后登录
    1970-1-1
     楼主| 发表于 2012-4-6 10:25:32 | 显示全部楼层

    回复:运行和调试时,buffer的值不一样

    回复第 2 楼 于2012-04-06 10:16:03发表:
    你设置断点以后,buffer的值内容是什么? 

    64 01 01 0A
    感觉是漏掉些数据.
    我是读取串口接收到的数据的!
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    22

    主题

    93

    帖子

    0

    新手上路

    Rank: 1

    积分
    192
    最后登录
    1970-1-1
     楼主| 发表于 2012-4-6 10:41:09 | 显示全部楼层

    回复:运行和调试时,buffer的值不一样

    回复第 2 楼 于2012-04-06 10:16:03发表:
    你设置断点以后,buffer的值内容是什么? 

    while(TRUE)
        {  
           sFlag++;        
           if(charTemp==0)
             TestRecTask();       
           charTemp = 0;   
           if(sFlag %1250000==0)
           {
             TestSendTask();    
             charTemp = 0;
           }         
           if(sFlag >= 1250100)
            sFlag = 0;       
        }
    buffer:64 01 01 64 4E AF 0D 0A ,结果是对的.
    如果代码修改为:
    while(TRUE)
        {  
           sFlag++;
           if(charTemp==1)
           {
             TestRecTask();        
           }       
           charTemp = 0
           if(sFlag %1250000==0)
           {
             TestSendTask();    
             charTemp = 1;
           }         
           if(sFlag >= 1250100)
            sFlag = 0;       
        }
    buffer:64 01 01 0A,结果就不对了
    安老大,能帮我分析下不? 我现在找不到原因,急啊!!!
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    难过
    2021-12-15 16:01
  • 签到天数: 1 天

    连续签到: 1 天

    [LV.1]初来乍到

    305

    主题

    4701

    帖子

    0

    中级会员

    Rank: 3Rank: 3

    积分
    377
    最后登录
    2023-8-16
    发表于 2012-4-6 14:35:05 | 显示全部楼层

    RE:运行和调试时,buffer的值不一样

    你修改以后,只有发送后才去读取数据。而且读取1次以后就不再读取了。能不能把你接收数据的思路说一下,这样看不太明白。
    if(charTemp==1)
    {
          TestRecTask();        
    }
    该会员没有填写今日想说内容.
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    22

    主题

    93

    帖子

    0

    新手上路

    Rank: 1

    积分
    192
    最后登录
    1970-1-1
     楼主| 发表于 2012-4-6 15:46:05 | 显示全部楼层

    回复:运行和调试时,buffer的值不一样

    回复第 6 楼 于2012-04-06 14:35:05发表:
    你修改以后,只有发送后才去读取数据。而且读取1次以后就不再读取了。能不能把你接收数据的思路说一下,这样看不太明白。
    if(charTemp==1)
    {
    TestRecTask();
    }
    我接收的思路 很简单
    while(uart0_rechit())      ---查询MCF_UART_USR(0) & MCF_UART_USR_RXRDY为1的时候,说明有数据接收到
         { 
            uCharTemp = uart_getch_new(); ---直接返回MCF_UART0_URB中的字符,原型如下
            uRecBufTemp[uCmdLen++] = uCharTemp;  -- 将接收的字符存在我需要的buffer中
           }
    unsigned char uart_getch_new(void)
    {
      while((MCF_UART0_USR & MCF_UART_USR_RXRDY))
           return ((char)MCF_UART0_URB);
    }
    上面就是我的接收函数.
    我现在就是不明白,当接收到一长串字符的时候,MCF_UART0_URB里面是不是依次读出即可??
    我看到的想象把我弄晕了....
     
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    难过
    2021-12-15 16:01
  • 签到天数: 1 天

    连续签到: 1 天

    [LV.1]初来乍到

    305

    主题

    4701

    帖子

    0

    中级会员

    Rank: 3Rank: 3

    积分
    377
    最后登录
    2023-8-16
    发表于 2012-4-6 15:58:26 | 显示全部楼层

    RE:运行和调试时,buffer的值不一样

    当你读取出以后,会把标志位清除,下一个数据到来,标志位会置位。我认为你这些操作最好使用中断处理,另外,当你加断点的时候,会引起数据丢失。所以你在全速运行的时候,接收没有问题,当加上断点以后,你读取的速度又没有传输的数度快的时候,会发生数据的丢失。这个你可以在仿真的时候试试。
    该会员没有填写今日想说内容.
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    22

    主题

    93

    帖子

    0

    新手上路

    Rank: 1

    积分
    192
    最后登录
    1970-1-1
     楼主| 发表于 2012-4-6 16:46:43 | 显示全部楼层

    回复:运行和调试时,buffer的值不一样

    回复第 8 楼 于2012-04-06 15:58:26发表:
    当你读取出以后,会把标志位清除,下一个数据到来,标志位会置位。我认为你这些操作最好使用中断处理,另外,当你加断点的时候,会引起数据丢失。所以你在全速运行的时候,接收没有问题,当加上断点以后,你读取的速度又没有传输的数度快的时候,会发生数据的丢失。这个你可以在仿真的时候试试。 

    我没有用过中断?能不能教我使用下.
    我前面自己看到的是: 在向量表中 注册中断, 中断函数,
    可是我不太明白,这个中断 什么情况下会响应啊?
    还有它的优先级应该怎么确定?
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    22

    主题

    93

    帖子

    0

    新手上路

    Rank: 1

    积分
    192
    最后登录
    1970-1-1
     楼主| 发表于 2012-4-13 11:30:55 | 显示全部楼层

    RE:运行和调试时,buffer的值不一样

    改用中断接收就不存在上述的问题了!!
    回复 支持 反对

    使用道具 举报

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

    本版积分规则

    关闭

    站长推荐上一条 /3 下一条

    Archiver|手机版|小黑屋|恩智浦技术社区

    GMT+8, 2025-7-20 13:37 , Processed in 0.109633 second(s), 30 queries , MemCache On.

    Powered by Discuz! X3.4

    Copyright © 2001-2024, Tencent Cloud.

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