我遇到这个问题的时候,一开始怀疑自己的程序写的不对,然后发现我程序只要多一行就会跑错,不管多的是什么代码,然后就发现了code只要超过7782这个值程序就会跑乱,但是我查看了我的flash是32K的,不可能程序区不够啊,就特别奇怪,百度说可能是什么堆栈溢出,但是程序没有用到堆栈,但是呢这个给了我一个提示,或许我的代码真的有啥溢出了呢,数组还是什么;后面发现程序里面有划分flash程序区和数据区的变量,这个变量太小了,导致划分的程序区小,所以出现溢出
RC_5编码类型的红外遥控,RC_5编码的特点(每一位用时1.8ms,即一位的一个周期是1.8ms;先是2位起始位、1位控制位、5位系统位、6位指令码;其中的起始位都是11,;控制位是为了辨别一直按住还是松开了再按的,当一直按住时这一位则不变;系统码对于同一个遥控器来说,每个按键的系统码都是一样的;指令码则是我们需要的;还需要注意的是我们接收到的位都是反码,所以我们接收到的起始位是00;先高后低则是0,先低后高则是1)。所以基于上面的知识点,我们利
1.概述简单的说,时钟是单片机的脉搏,是单片机的驱动源,使用任何一个外设都必须打开相应的时钟。这样的好处是,如果不使用一个外设的时候,就把它的时钟关掉,从而可以降低系统的功耗,达到节能,实现低功耗的效果。每个时钟tick,系统都会处理一步数据,这样才能让工作不出现紊乱。2.原理首先,任何外设都需要时钟,51单片机,stm32,430等等,因为寄存器是由D触发器组成的,往触发器里面写东西,前提条件是有时钟输入。51单片机不需要配置时钟,是因为一个时钟开了之后所有的功能都可以用了,而这个时钟是默认开
刚开始接触单片机休眠的时候,我以为单片机休眠后就停止了程序运行,其实不是的,他依然在跑程序(看休眠模式,如果是stop模式,中断等程序还在继续跑),只不过他跑的速度变慢了而已。 如果要求很低功耗, 在单片机休眠前要把耗电的硬件都关掉(当然根据需求设置)。 还有要说的就是, 要解决一个问题,你得知道这个问题涉及的点,然后去把来龙去脉了解清楚,才能更好的解决问题;也就是所谓的知己知彼,百战不殆。就比如我这
今天用Keil4写程序时遇到这个问题:warning C316:unterminated conditionals跑了几个论坛,在审视了一遍代码之后,知道了原因: 像类似XX.C(99):warning C316:unterminated conditionals这种警告的话XX.c文件有一个凌乱的条件编译或预编译。因为C语言中有些头文件中的预编译或宏定义,那么条件编译就避免不了。写条件编译时,可能有忘写一个基本的语句。比如说,你用了条件编译#ifndef而忘记写#endif。因为他们本来就是