OpenEdv-开源电子网

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

程序一进入延时程序就循环出不来

[复制链接]

38

主题

93

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
267
金钱
267
注册时间
2014-12-21
在线时间
1 小时
发表于 2015-2-7 21:03:14 | 显示全部楼层 |阅读模式
5金钱

自己写了一个程序,但发现一旦进入延时程序就初步来了,调了好久也不见效果,最气人的是不能设置断点,来这请教原子哥与吧里的各位这是什么原因

#include"led.h"
#include"key.h"
#include"exti.h"
#include"sys.h"
#include"delay.h"

u8 x = 0;
int main(void)
{
    
  NVIC_Configuration();//中断优先级分配
 
  delay_init();
 
  LED_Init();//led_0,led_1的初始化
 
  KEY0_Init();//按键KEY0的初始化
 
  EXTIX_Init();//外部中断线5的初始化
  while(1)
  {
     
    LED_0 = 0;//点亮led_0
   
    LED_1 = 0;//点亮led_1
   
    if(x)
    {
         
        
        LED_0 = 1;//熄灭led_0
    
         LED_1 = 1;//熄灭led_1
      
         delay_ms(1000);//延时1秒
      
         LED_0 = 0;//点亮led_0
      
         LED_1 = 0;//点亮led_1
        
       
     
      
   
   
   
    }
  
  
 
  }
 
 

}

 

 

void EXTI9_5_IRQHandler(void)
{

    if(EXTI_GetFlagStatus(EXTI_Line5)!=RESET)
 {
     
      x = 1;//如果发生中断x置1
 
 
 }
 
 EXTI_ClearFlag(EXTI_Line5);//清除中断标志位

 

 

}

 

 

 

 

 


 

最佳答案

查看完整内容[请看2#楼]

设置断点的问题解决了原来不能勾 C/C++ 中的One  ELF Section per Function
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

38

主题

93

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
267
金钱
267
注册时间
2014-12-21
在线时间
1 小时
 楼主| 发表于 2015-2-7 21:03:15 | 显示全部楼层
设置断点的问题解决了原来不能勾 C/C++ 中的One  ELF Section per Function
回复

使用道具 举报

38

主题

93

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
267
金钱
267
注册时间
2014-12-21
在线时间
1 小时
 楼主| 发表于 2015-2-7 21:03:15 | 显示全部楼层
解决了,原来全是那个MDK优化的问题,对了我问一下就是我在将串口的接收的数据送到oled去显示时数据总是会少2比如接收是6,显示确实4这是为什么?但是将数据接收到的数据不送去oled显示马上发送给电脑就是真确的。但oled单独工作是正常的
回复

使用道具 举报

9

主题

50

帖子

0

精华

初级会员

Rank: 2

积分
148
金钱
148
注册时间
2014-5-10
在线时间
12 小时
发表于 2015-2-7 21:15:26 | 显示全部楼层
进入延时函数出不来?

你的延时函数怎么做的?如果是用timer计时就要看中断有没有触发;如果是纯粹的CPU wait就有可能是时钟没有初始化成功,CPU时钟太慢;

如果是断点设置不了
一般是被优化掉了,建议在编译选项里面将优化选项设置为0或NONE
回复

使用道具 举报

38

主题

93

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
267
金钱
267
注册时间
2014-12-21
在线时间
1 小时
 楼主| 发表于 2015-2-7 21:25:08 | 显示全部楼层
延时程序自己试过原子哥,和自己用for循环延时都会进入死循环
回复

使用道具 举报

9

主题

50

帖子

0

精华

初级会员

Rank: 2

积分
148
金钱
148
注册时间
2014-5-10
在线时间
12 小时
发表于 2015-2-7 21:28:47 | 显示全部楼层
回复【3楼】我的未来:
---------------------------------
这句话对分析问题没什么帮助
回复

使用道具 举报

38

主题

93

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
267
金钱
267
注册时间
2014-12-21
在线时间
1 小时
 楼主| 发表于 2015-2-7 21:42:05 | 显示全部楼层
void delay1_ms(u32 t)
{
   int i,j;
   for(j=0; j<t; j++)
     for(i=0; i >< 120; i++  )
  ; 




}

这是延时程序
回复

使用道具 举报

9

主题

50

帖子

0

精华

初级会员

Rank: 2

积分
148
金钱
148
注册时间
2014-5-10
在线时间
12 小时
发表于 2015-2-7 21:57:31 | 显示全部楼层
回复【6楼】我的未来:
---------------------------------
延时函数里面就执行一次 i++ 看看呢?
回复

使用道具 举报

14

主题

1592

帖子

0

精华

资深版主

Rank: 8Rank: 8

积分
2622
金钱
2622
注册时间
2014-7-17
在线时间
350 小时
发表于 2015-2-8 00:31:52 | 显示全部楼层
回复【5楼】我的未来:
---------------------------------
沟这个的话有什么不同之处???
回复

使用道具 举报

14

主题

1592

帖子

0

精华

资深版主

Rank: 8Rank: 8

积分
2622
金钱
2622
注册时间
2014-7-17
在线时间
350 小时
发表于 2015-2-8 00:36:04 | 显示全部楼层
回复【8楼】我的未来:
---------------------------------
这么奇怪的问题!!
回复

使用道具 举报

38

主题

93

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
267
金钱
267
注册时间
2014-12-21
在线时间
1 小时
 楼主| 发表于 2015-2-8 08:43:25 | 显示全部楼层
是不是波特率的原因
回复

使用道具 举报

14

主题

338

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
464
金钱
464
注册时间
2013-6-15
在线时间
15 小时
发表于 2015-2-8 10:40:00 | 显示全部楼层
循环被优化掉的问题,楼主该看看volatile这个关键字
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-6-26 00:42

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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