野火电子论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 10709|回复: 10

中断,定义全局变量方面的问题

[复制链接]
发表于 2016-9-18 10:04:48 | 显示全部楼层 |阅读模式
我的中断服务函数:
void DEBUG_USART_IRQHandler(void)
{
         if(USART_GetITStatus(DEBUG_USARTx,USART_IT_RXNE)!=RESET)
         {
                 ucTemp=1;
         }         
}
主函数
        while(1)
           {       
                 if(ucTemp)
                {
                        switch(ucTemp)
                        {
                                case 1:
                                        LED_RED;
                                break;
                                case 2:
                                        LED_GREEN;
                                break;
                                case 3:
                                        LED_BLUE;
                                break;
                                case 4:
                                        LED_YELLOW;
                                break;
                                case 5:
                                        LED_PURPLE;
                                break;
                                case 6:
                                        LED_CYAN;
                                break;
                                case 7:
                                        LED_WHITE;
                                break;
                                case 8:
                                        LED_RGBOFF;
                                break;
                                default:
                                        Show_Message();
                                        break;      
                                }  
                 ucTemp=0;
                }
        }       
问题描述:在上位机上输入1无法触发中断,也就是ucTemp的值无法改写为1,程序是参照火哥的程序改的,请大家指点下


回复

使用道具 举报

发表于 2016-9-18 10:20:03 | 显示全部楼层
定义的时候加个__IO 前缀
回复 支持 反对

使用道具 举报

 楼主| 发表于 2016-9-18 10:28:37 | 显示全部楼层
随风 发表于 2016-9-18 10:20
定义的时候加个__IO 前缀

可以给个类似的例子说的详细点吗?不太清楚怎么操作
回复 支持 反对

使用道具 举报

发表于 2016-9-18 10:53:19 | 显示全部楼层
yamazakee 发表于 2016-9-18 10:28
可以给个类似的例子说的详细点吗?不太清楚怎么操作

你可以先查一下__IO的作用, 你就明白了。
回复 支持 反对

使用道具 举报

发表于 2016-9-18 11:46:10 | 显示全部楼层
首先,你问出这个问题应该是没有开编译器优化的,所以不存在楼上说的_IO问题,依我判断,如果程序没错,是你的上位机发送的1是字符1,而你的程序是数字1,验证方法,你可以把你的case 1改成 case‘1’试试,如果不行,看下编译器优化 是否开启,如果没开启,程序有误。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2016-9-19 17:39:07 | 显示全部楼层
Yang_Guang 发表于 2016-9-18 11:46
首先,你问出这个问题应该是没有开编译器优化的,所以不存在楼上说的_IO问题,依我判断,如果程序没错,是 ...

我的主程序是这样写的:
int main(void)
{
   ucTemp=0;
  while(1)
  {
    if(ucTemp)
    {
      switch(ucTemp)
     {
}
    }
  }

return 0;
}
回复 支持 反对

使用道具 举报

 楼主| 发表于 2016-9-19 17:46:54 | 显示全部楼层
Yang_Guang 发表于 2016-9-18 11:46
首先,你问出这个问题应该是没有开编译器优化的,所以不存在楼上说的_IO问题,依我判断,如果程序没错,是 ...

我的主程序是这样写的:
int main(void)
{
   ucTemp=0;
  while(1)
  {
    if(ucTemp)
    {
      switch(ucTemp)
     {
       case 1: LED_RED;
       break;
       case 2ED_GREEN;
       break;
       ...
       default:
       break;
     }
    ucTemp=0;
    }
  }

return 0;
}

在中断服务函数中这样写的:
#include "bsp_usart.h"
void DEBUG_USART_IRQHandler(void)
{
  if(USART_GetITStatus(DEBUG_USARTx,USART_IT_RXNE)!=RESET)
  {
    ucTemp=1;
  }
}

在bsp_usart.h中声明变量
...
extern volatile uint8_t ucTemp;
...
我的问题出在哪,希望可以较详细的告诉我解决方案,大神!
回复 支持 反对

使用道具 举报

发表于 2016-9-19 18:19:31 | 显示全部楼层
yamazakee 发表于 2016-9-19 17:46
我的主程序是这样写的:
int main(void)
{

DEBUG_USART_IRQHandle用define成USART1_IRQHandler没?
回复 支持 反对

使用道具 举报

 楼主| 发表于 2016-9-19 18:22:19 | 显示全部楼层
Yang_Guang 发表于 2016-9-19 18:19
DEBUG_USART_IRQHandle用define成USART1_IRQHandler没?

定义了,恩恩
回复 支持 反对

使用道具 举报

发表于 2016-9-19 18:27:37 | 显示全部楼层

你的main函数只有贴出来那部分?基本的初始化,使能中断那些呢?你的情况应该是没进入中断了,你先把你的代码放在火哥的历程里面改,保留他的初始化配置部分,只改动他的发送中断内容就可以达到效果了,你再看看哪里你没配置或者哪里配置错了。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2016-9-19 18:39:05 | 显示全部楼层
Yang_Guang 发表于 2016-9-19 18:27
你的main函数只有贴出来那部分?基本的初始化,使能中断那些呢?你的情况应该是没进入中断了,你先把你的 ...

前面三行:
LED_GPIO_Config();
USART_Config();   //中断使能在这里配置了
Show_Message();

我就是在火哥的程序上改的
回复 支持 反对

使用道具 举报

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

本版积分规则

联系站长|手机版|野火电子官网|野火淘宝店铺|野火电子论坛 ( 粤ICP备14069197号 ) 大学生ARM嵌入式2群

GMT+8, 2024-11-24 00:25 , Processed in 0.032431 second(s), 23 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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