单片机学习过程中遇到的玄学问题

在单片机中我用if(n==2)
程序不进入if,而用if(n>1),就可以进入程序,
还有一次for(i=3;i>0;i--)程序不进入,
而for(i=3;i>-1;i--)就可以进入程序。
eg1
void main(void)
{

   init_t0();
    EA=1;
    IT0=1;
    EX0=1;
    EX1 = 1;
    IT1 = 1;
    InitLCD1602();

LcdShowStr(0, 1, str2);     //液晶初始化显示

LcdShowStr(0, 0, str1);
// P0=0xff;

while(1)
{     
    unsigned int i; 


   forward(L,R);


    if((P1&0X60)==0x60)         //    0110 0000
       {
       flag++;//    P0=P1;
       delay(40);
       }

//

// if((P1&0x90)==0x80) // 1001 0000 1000 0000 向右转
// {
// for(i=0;i<4;i--)
// forward(50,40);
// }
//

// if((P1&0x10)==0x10) // 1001 0000 0001 0000 向左转
// {
// for(i=0;i<4;i--)
// forward(40,50);
// }
//

        if(flag==1) 
        {
         m=1;
         //led0=0;

         continue;
         }

        if(flag==2)
        {

        //led1=0;
         continue;
         }
    //  break;    //遇到第一条线,和第二条线无意义
        if(flag==3)
        {
        //led2=0;
        forward(2,3);
        continue;
        }
        if(flag==4)
        {
    //  led3=0;
        forward(30,34);
        continue;
        }
        if(flag==5)
        {
    //  led4=0;
        continue;
        }

        if(flag==6)
        {
           delay(100);
            n++;
        if(n>1)
          {
           m=0;
           stop();
           while(1);
          }
    //  led5=0;

        for(i=0;i<50000;i++)
        stop(); 
        //P0=0xff;
        for(i=0;i<4300;i++)
        {zhuan();
        flag=0;
        }
        for(i=0;i<50000;i++)
        stop(); 
       // P0=0xff;
        }

}

}
图片说明

1

7个回答

可能编译器觉得n在逻辑上不会等于2,被优化掉了

3
qq_34398976
qq_34398976 仿真看数据分析,如果不会仿真,那么串口把数传到串口工具上看就清楚了,比如n的值为3,此时if(n==2)不会进入,if(n>1)会进入,同理for(i=3;i>0;i--)只需看下此时i的值就清楚了
11 个月之前 回复
ggbond33
ggbond33 回复ggbond33: https://blog.csdn.net/gudongxian/article/details/44265677觉得这篇博客 可以回答了,应该是优化了谢谢
11 个月之前 回复
ggbond33
ggbond33 回复ailaillia: 那什么时候会优化呢
11 个月之前 回复
ailaillia
ailaillia 在程序编译的时候可能就把这代码删除了
11 个月之前 回复
ggbond33
ggbond33 什么意思
11 个月之前 回复

调试下程序,>1不一定是2啊,也可能是3 4 5等等。

2
ggbond33
ggbond33 回复qq_25392489: 看答案合不合理吧
11 个月之前 回复
ggbond33
ggbond33 我是让它识别到n==2的时候停止,n不会变成3啊
11 个月之前 回复
weixin_42716378
苏艳珍 回复weixin_42716378: mnbmn
11 个月之前 回复
weixin_42716378
苏艳珍 mn,mn
11 个月之前 回复

对于n,如果它是一个定时器,或者别的信号控制器反馈的值,由于它和晶振等等有关,反馈的值不精确,例如n==2.00001,不符合n==2要求,但是符合n>>1要求。

2
ggbond33
ggbond33 哇,超级有道理,可惜我已经采纳了
11 个月之前 回复

直接用keil单步调试,调出变量n的值,看在if之前n的状态。或者看对应的汇编那一步是怎么执行的。

1

n值 初始化成0了没有

0
ggbond33
ggbond33
11 个月之前 回复

n值导出来看下是多少 不等于2大于1 不是很正常嘛

0

单步调试能看到N的值吗?

0
Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
其他相关推荐
把学单片机过程中遇到的问题与大家分享
转载▼ 标签: 单片机 常见问题 指令 cpu结构 伪指令 分类: 单片机 一.单片机有4位、8位、16位、32位以及64位现在,请问的是在8位,16位,32位等等是什么意思? 答: CPU内部总线的位数就是单片机的位数。这里的位也就是指单片机中CPU处理的数据的位数(一次处理信息的长度)。比如:51单机  属于8位机,就是CPU
当程序遇到“玄学”bug
所谓玄学bug大多是不易触发,或者复现非常困难的bug,而这样的bug大多隐藏在硬件上或者无法捕获的外界环境上。给大家说说那些曾经的“玄学”bug:        17年英特尔公布了一个cpu内的bug,其实这个bug早就出现了,一直有开发者说某些程序在打开超线程后不稳定,但是一直无法准确找到触发条件,直到这一消息被确认:英特尔第六代和第七代 Core 处理器(桌面、移动和服务器版的 Skylak...
STM32单片机调试风洞过程中所遇到的问题总结
PID算法的原理相信大家手里有资料而且也都看过了吧,下面我就来和大家分享一下我在调风洞得过程中所遇到的问题以及原因,如果有错误的地方还希望大家指出来。 我所用到的单片机是STM32单片机,芯片型号是STM32F407ZET6. 刚开始调的时候不管怎么样调比例调积分都是一下子冲到顶然后又一下子冲到底,后来仔细想了一下,原因就是PID以及超声波模块更新的速度太慢,当更新时,积累的量已经过多,所以始...
JavaScript学习过程所遇到中的问题(一)
Write By Monkeyfly All the following information is from the Internet and blogs,and collected and tidied by myself.一、addEventListener事件第三个参数的作用addEventListener(event,function,useCapture) event:事件名称,St
ORACLE学习过程中遇到的小问题
1.“sum”是关键字,不能直接使用2.怎样退出输入模式:输入“/”3.安装plsql developer12 64 位不需要提前安装client,也不需要更改配置文件,之前网上的许多教程是因为当时只有32位的developer4.developer 12保存登陆密码:最新版PL/SQLDeveloper12.0如何保存登陆密码? - SQL Server(mssql)数据库栏目 - 红黑联盟ht...
程序调试中遇到的几种问题
1。无限等待signal 有线程1和线程2,线程1结束前需要等待线程2发送signal,才能结束。 结果线程1还未进入等待signal的时候,线程2已经发送signal完毕,造成线程1无限等待signal,程序陷入死循环。 2。相互等待signal线程1发送消息(往消息队列写入), 线程2接收消息(从消息队列读取),线程3处理消息命令,线程4负责播放状态切换。 
学习大数据过程中遇到的问题1
首先说明下学习过程中所用到的系统及软件的版本: ubuntu16.04 jkd1.8.0_131 hadoop2.7.3 hbase1.2.5 如果在ubuntu14.04上配置hadoop不顺利的话,建议换ubuntu16.04版本。。。 配置java环境及安装eclipse,网上有许多攻略,可以参考http://www.linuxidc.com/Linux/2016-07/1334
JAVA 学习过程中出现的问题
eclipse编译java程序没有添加JAR System library 初学者刚开始接触java,下载了eclipse后在添加项目时发现没有添加JAR System library,最后终于找出了解决方法 window --&amp;gt; Preference --&amp;gt; 左侧Java(有个三角形的图标,点击展开) --&amp;gt; installed JREs --&amp;gt;  右侧Add - -...
记录一下学习JAVA过程中所遇到的问题(持续更新)
一.在使用JQuery过程中,得到后台JSON数据,在js里面使用$.each()方法的时候报错如下         SyntaxError: JSON.parse: expected property name or '}' at line 1 column 3 of。 后台得到的JSON数据: [{id:1,name:'四川'},{id:2,name:'广东'},{id:3,name:'...
Oracle学习工作中遇到的问题及解决方法
1、sql编程中用到的is 和as 的区别    在创建存储过程中,用as 和 is 没有什么区别,都可以;在创建视图中只能用as 不能用is ;在创建游标的过程中只能用is 而不能用as.2、远程连接数据库    要连接数据库,首先需要一个oracle的客户端,这个网上下载安装即可,安装完成后找到安装路径,打开文件oracle\product\10.1.0\db_2\network\admin\...
程序调试中的常见问题及解决方法【2017.9.27更新】
1、CE(Compile Error)编译错误其实很多时候通过返回的错误信息就能找出错误。①缺失符号,如下图 第一句Error表示在“printf”前少了一个分号, 第二句Error表示在“return”前少了一个分号。 通常在错误行的上一行找缺失的分号。比如, int main() { int sas //here; printf("%d",
个人写程序的准备工作 并且过程中所遇到问题以及解决过程(单片机)
1:准备好仿真板---主要是搭建好新的板以便仿真用 2:准备好仿真工具---如是新的,让供应商提供是最好的方法,这次我就是,很幸运,没什么问题 3:看原理图--这次遇到新的原理图:LCD SEG脚位与LED共用,需要思考如何显示 4:了解并理解功能 5:画流程图 6:开始写软件 A:如果新MCU,需要先初始化好 IO设置,定时器验证,基本按键扫描,...
玩转Linux:学习Linux过程中遇到的各种问题和小技巧(每天更新)
目录: 0.常用指令(最常更新) 1.虚拟机无法联网 2.vim打开多个文件同时编辑 3.vim编辑模式下如何复制粘贴代码 3.1复制到光标位置 3.2将若干行复制到指定行(我喜欢的这个方式) 4.vim编辑模式下如何选中多行 5.vi/vim键盘图 6.Linux如何安装并且使用中文输入法 7.Linux时间操作 7.1设置Linux系统的时间 7.2查看当前天是今年的第几天 8....
在学习VB.net过程中遇到的一些问题及解决方案的总结(小菜鸟版)
搞了三个月的VB.net,介绍一下我的环境吧,用的VS2008编译器,运行坏境是WINCE7.0系统,不要问我为什么不选更优的编译器,这是公司比较老的一款产品,但是也需要维护的,所以。。。。。 大体说说身为菜鸟的我的学习方法吧,本人电气出身,只会点嵌入式的东东,对这个VS确实不太懂,但公司需要,我又只是一块砖,所以,,,,硬着头皮上了,首先,在网上找了个大体介绍这门语言的,好久前好像是传过,新手...
初学linux遇到的问题及命令
初学linux遇到的问题及命令 A:unable to find the ncurses libraries Re:sudo apt-get insatll ncurses-dev mkdir backup 新建一个叫backup的文件夹 看当前用户的环境变量:echo $PATH 改root环境变量:vim /ect/environment 改完后要执行source /ect/environ...
android studio学习过程中遇到的不能解决的问题
这篇博客是我在android studio学习过程中记录的不能解决的问题。(红色标记的是问题)package com.example.alex.topreview.NotePad; import android.content.Intent; import android.support.v7.app.AppCompatActivity; import android.os.Bundle; im...
深度学习环境搭建过程中遇到的问题
windows10+ubuntu16.04双系统 安装过程基本是参考:这里写链接内容 需要注意的几点: 1. 在安装Ubuntu时找不到EFI系统分区,说明不是用UEFI方式启动的,在进入BIOS界面后,选择高级设置-启动-CMS模式选择-把里面的选项全部改为UEFI方式,保存退出后重新安装Ubuntu。 2. 所有的软件和系统不要一味追求最新版本,建议使用老版本,以减少兼容性问题。 ...
学习bootstrap过程中遇到的问题及总结
**一.栅格系统** (1) “行(row)”必须包含在 .container (固定宽度)或 .container-fluid (100% 宽度)中,以便为其赋予合适的排列(aligment)和内补(padding)。 (2)通过“行(row)”在水平方向创建一组“列(column)”。 (3)你的内容应当放置于“列(column)”内,并且,只有“列(column)”可以作为行(...
玄学解决BUG
佛祖保佑 永无BUG 永不修改 //////////////////////////////////////////////////////////////////// // _ooOoo_ // // o8888888...
jsp学习中遇到的问题
 一、The superclass "javax.servlet.http.HttpServlet" was not found on the Java Build Path,没有找到servlet的httpServlet 超类,解决办法:       1、右击web工程->属性或Build Path-》Java Build Path->Libraries-> Add Libray...-
JavaEE 学习过程中遇到的问题
1 Hibernate :Jboss 遇到的问题 :org.jboss.tools.vpe.xulrunner.XulRunnerBundleNotFoundException: Bundle org.mozilla.xulrunner.win32.win32.x86_64 is not found.解决办法:https://tunatore.wordpress.com/2015/06/15/org
实验遇到的问题及解决
1.linux cache清除: echo 1 | sudo tee /proc/sys/vm/drop_caches echo 2 | sudo tee /proc/sys/vm/drop_caches echo 3 | sudo tee /proc/sys/vm/drop_caches
学习爬虫过程中遇到的问题总结
1.下载数据编码问题 "title":["\u5a92\u4f53\u63ed\u5730\u94c1\"\u5988\u5988\u4e10\u5e2e\":\u5e26\u5a03\u884c\u4e5e\u6708\u5165\u8fc7\u4e07(\u56fe)"] 存放在文本文件中是上面这种Unidcode形式编码的,存放到数据库中是自动转码的,转换化为文字形式。如果想打印出汉字,
学python过程中遇到的一些问题及解决方法
[bug]socket.error: [Errno 48] Address already in use [solustion]ps -fA | grep python kill 对应的端口
单片机程序中遇到的错误和警告小结
warning C316:unterminated conditionals 头文件中条件编译或预编译错误,注意#ifndef和#endif的对应即可。 还有一种警告情况是定义的参数没有用到。 很多都忘记了,先贴这么多吧。
C++学习中遇到的问题
一、#ifndef的作用? 以下文件在&quot;os_cpu.h&quot;中。 #ifndef __OS_CPU_H__ #define__OS_CPU_H__  /* 中间有许多定义啦声明啦!;; */ #endif/*__OS_CPU_H__*/ 这样,在编译阶段(ifndef是在编译阶段起作用滴!)假设有两个文件同时include了这个文件(os_cpu.h),这两个文件如果一个先编译了,那
初学者在java学习中常见的30个问题
本文回答了30个JAVA入门级初学者的常见问题。如我可以用%除以一个小数吗? a += b 和 a = a + b 的效果有区别吗? 声明一个数组为什么需要花费大量时间? 为什么Java库不用随机pivot方式的快速排序? 1.2 基本数据类型 Q. 为什么 -0/3 结果是 0,而 -0.0/3.0 结果是 -0.0?(注意后边的结果0带负号) A. 在Java里,整数是用补码
学习linux日常操作中的小问题
1.我在虚拟机里面遇到此问题,试了很多方法都没法启动,后来发现,问题出在/etc/httpd/conf/目录里面有一个叫httpd.conf的文件。在同一目录下还有另外一个叫httpd.conf.bak,只要把httpd.conf.bak的内容复制httpd.conf文件中,覆盖原来的内容就能启动了,到shell里运行service httpd start,惊喜发现,start httpd ok。...
学习Java Web开发中遇到的问题,及其解决方法
摘要: 最基本的乱码问题 表单使用Post方式提交后接收到的乱码问题 表单get提交方式的乱码处理方式 上传文件时的乱码解决 Java代码关于url请求,接受参数的乱码 脚本代码关于url请求,接受到的参数乱码 关于jsp在MyEclipse中打开的乱码问题 关于html页面在eclipse中打开出现乱码情况 目录: 最基本的乱码问题 表单使用Post方式提交后接收到的乱码问.
学习C++中遇到的各种问题
拷贝构造函数到底是个是什么东西? 到底什么时候用const? &是写在前还是写在后?有区别? 为什么在析构函数中加了delete程序就会卡死? size_t是个什么东西? 初始化构造函数怎么看起来那么别扭? 什么时候用虚函数? 后期联编又是什么鬼? 纯虚函数存在的意义? 向上转换数据类型和非向上转换数据类型
关于毕设设计过程流程以及遇到问题的解决方法总结
    毕设题目是医院数据分析系统的设计与实现。需要解决的需求问题还是不少的。    实现的思路就是用flume实现数据从本地采集到hdfs,用spark进行mapreduce操作进行数据分析,最后用echarts完成数据可视化。     1)数据是随机生成的,一个文件大约30w条数据,一个文件大小约18.5m,idea本身设定的单个文件大小约为25m,为了简化flume上传的文件数量,尝试将两个...
react学习过程记录3(包含项目中出现的问题)
1. 项目中对于一个简单的图片轮播的完成到修改 首先采用的jquery,那需要在组件中引入jquery : import $ from 'jquery' 然后利用jquery的animate()函数来实现图片滑动 const getPage = (value) =&amp;gt;{ let count=parseInt($('#1').attr('data-count')) ...
Java学习中,所遇到的一些问题及解决方案
1、在使用BigDecimal数据类型做除法运算的时候,弹出如下异常:public static void main(String[] args){ BigDecimal a = new BigDecimal(1000); BigDecimal b = new BigDecimal(1500); System.out.println(a.divide(
在java学习中遇到的一些经典问题和解答(6)
1.Applet和普通的Java应用程序有什么区别? (1)运行方式不同。Java Applet程序不能单独运行,它必须依附于一个用HTML语言编写的网页并嵌入其中,通过与Java兼容的浏览器来控制执行。Java Application是完整的程序,可以独立运行,只要有支持Java的虚拟机,它就可以独立运行而不需要其他文件的支持。 (2)运行工具不同。运行Java Applet程序的解释器不是独立...
学习vue.js中遇到的一些问题
  最近正在学习vue.js,大致看完了基础和组件部分,想自己折腾仿一个购物车页面,在给购物车商品写一个button实现增减商品的时候发现用&amp;lt;button&amp;gt;标签结合vue用的时候发现每点一次页面就会刷新一次,根本无法结合vue获得响应式效果,原按钮代码如下: &amp;lt;form id=&quot;counter&quot;&amp;gt; &amp;lt;table&amp;gt; &amp;lt;tr&amp;gt; ...
linux学习中碰到的问题
1、 scp文件到远端服务器提示 command not found: sudo yum install openssh-clients 注意传文件的两端都需要安装才可以。 2、无法使用sudo 登录root用户在/etc/sudoers文件中 在root ALL=(ALL) ALL 之后添加hadoop ALL=(ALL) ALL 即可,其中ha
学习java遇到的问题1
在cmd中用javac编译java程序,会出现javac不是内部命令的错误。 这是因为没有将环境配置配好。 环境配置的方法: 安装完JDK后配置环境变量 计算机→属性→高级系统设置→高级→环境变量 系统变量→新建 JAVA_HOME 变量 。变量值填写jdk的安装目录,我的jdk是安装在D盘中的,所以我的是 系统变量→寻找 Path 变量→编辑 在变量值最后输入 %JAVA_H...
自己学习Struts2过程中遇到的问题及解决办法(第一天)
Struts2,配置,我遇到的问题和解决办法,struts.xml
vue学习过程遇到的一些问题集合
学习vue开发过程中遇到的一些问题集合 1、input文本框不可以使用动态的type 以上这么使用是会被报错的:v-model does not support dynamic input types. Use v-if branches instead. 这就是说使用v-model的type是不能用动态的type标签,只能使用v-if代替,因此如果想要做密码框类型切换只能使用如下方式
linux学习心得体会及遇到的问题
linux学习心得体会、及遇到的困难、及解决办法、linux学习心得体会及遇到的问题
文章热词 jQuery学习 设计制作学习 虚拟化技术学习 机器学习教程 Objective-C培训
相关热词 mysql关联查询两次本表 native底部 react extjs glyph 图标 大数据学习遇到的问题 java学习中遇到的问题