OpenEdv-开源电子网

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

咨询是C语言逻辑问题还是MDK编译器问题

[复制链接]

8

主题

14

帖子

0

精华

初级会员

Rank: 2

积分
65
金钱
65
注册时间
2016-11-7
在线时间
15 小时
发表于 2017-7-30 09:05:45 | 显示全部楼层 |阅读模式
本帖最后由 2576936901 于 2017-7-30 09:20 编辑

请大家帮帮忙,我找了好久也不知道为什么,我写了一个串口程序,当上位机往单片机发送数据的时候,数据保存在数组中,单片机接收完后把数组中的数据返回到上位机,问题出现在下面的while()语句中,没注释的语句是有问题的,在调试过程中,发现当条件不满足的时候也不跳出循环。然后被注释的语句是正常的语句,当条件不满足的时候正常跳出循环。逻辑上这两个语句应该是一样的,但是发现MDK出现不同的反应。。。。。。。我想问大家,出现这种原因是我的逻辑问题还是MDK编译器的问题?源码在附件链接中,之前是配置串口2,后来找不出问题以为是串口问题,就把程序改到串口1,但是没有修改注释
#include "MyUsart.h"
#include "sys.h"
#include "delay.h"
extern u16 My_USART_RX_STA;//1表示单片机接收完数据
extern char My_USART_RX_BUF[200];//单片机用于保存从上位机发送来的数据
int main(void)
{        int i;
        int len;
        Stm32_Clock_Init(9);
        delay_init(72);
        MyNvicInit();
        My_UsartInit();
        
        while(1)
        {
                if(My_USART_RX_STA&0x8000)//单片机接受完数据的标志
                {
                        len=My_USART_RX_STA&0x3fff;//获取字节个数
                        for(i=0;i<len;i++)
                        {                                                               
                                while((USART1->SR&0x80)!=1);//问题语句,条件为假的时候不跳出循环
                                //while((USART1->SR&0x80)==0); //没问题语句,条件为假的时候跳出循环
                                USART1->DR=My_USART_RX_BUF;//把数组中的数据发送到上微机
                        }
                        My_USART_RX_STA=0;//发送完所有数据后把接受标志清零
                }
        }
}

MyUsart.rar

587.38 KB, 下载次数: 89

源码

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

使用道具 举报

17

主题

587

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
4467
金钱
4467
注册时间
2013-6-27
在线时间
565 小时
发表于 2017-7-30 10:22:17 | 显示全部楼层
while((USART1->SR&0x80)!=1);//问题语句,条件为假的时候不跳出循环

改为

while((USART1->SR&0x80)!=0X80);//问题语句,条件为假的时候不跳出循环

让我们的思维驾驭在电的速度之上!
回复 支持 2 反对 0

使用道具 举报

8

主题

14

帖子

0

精华

初级会员

Rank: 2

积分
65
金钱
65
注册时间
2016-11-7
在线时间
15 小时
 楼主| 发表于 2017-7-30 09:10:27 | 显示全部楼层
请大家帮帮忙,问题虽然小,但是这种基础的问题如果解决不了,以后我肯定会经常出现类似问题
回复 支持 反对

使用道具 举报

8

主题

14

帖子

0

精华

初级会员

Rank: 2

积分
65
金钱
65
注册时间
2016-11-7
在线时间
15 小时
 楼主| 发表于 2017-7-30 21:27:48 | 显示全部楼层
DongInker 发表于 2017-7-30 10:22
while((USART1->SR&0x80)!=1);//问题语句,条件为假的时候不跳出循环

改为

是我傻逼了~~~~~~~~~
回复 支持 反对

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-4-19 22:34

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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