【问题标题】:How can I transform a Variable from main.c to another file ( interrupt handler)如何将变量从 main.c 转换为另一个文件(中断处理程序)
【发布时间】:2014-08-15 09:34:09
【问题描述】:

我正在开发一个新项目,我想编写自己的协议。因此,我必须将一个变量(从 main.c)转换为一个中断处理程序文件。

这是我的 IRQHandler.h 文件:

#include <stdlib.h>
#include <stdio.h>
#include <string.h>

#ifndef stm32f4xx_EXTI0_IRQHAndler_H 
#define stm32f4xx_EXTI0_IRQHAndler_H 
void EXTI0_IRQHandler(void);
#endif

这是我的 IRQHandler.C 文件:

    void EXTI0_IRQHandler(void)
{
  if(GPIOA->IDR & 0x0001){

        USART_SendData(USART1, ConvertedValue);

              // GPIO_ToggleBits(GPIOD, GPIO_Pin_12);

    EXTI_ClearFlag(EXTI_Line0);
    // EXTI_ClearITPendingBit(EXTI_Line0);
  }

  EXTI_ClearITPendingBit(EXTI_Line0);
}

必要的变量是转换值,主文件中的内容..我无法转换...我知道这是一个非常简单的问题...但我现在无法解决..

感谢您的帮助! :)

【问题讨论】:

  • 发布您在 main.c 中的代码会有所帮助 - 或者至少是 ConvertedValue 的声明。 “转变”不是正确的词。您需要做的就是使变量可访问/可见的跨模块。不需要“转换”。
  • 使用 .c 而不是 .C 作为文件扩展名。一些编译器(例如 GCC)会将 .C 文件编译为 C++。
  • 我认为您的意思是“转移”或“访问”,而不是“转换”。

标签: c variables embedded global


【解决方案1】:

在 IRQHandler.c 中

#include "IRQHandler.h"

volatile uint8_t ConvertedValue ;

void EXTI0_IRQHandler(void)
{
    ...
}

然后使用以下命令创建 IRQHandler.h:

#if !defined IRQHandler_INCLUDE
#define IRQHandler_INCLUDE

extern volatile uint8_t ConvertedValue ;

#endif

然后在main.c中

#include "IRQHandler.h"

int main()
{
    ConvertedValue = getValue() ; // or whatever - Converted value is visible/accessible here.
}

当然,您也可以在 main.c 中定义 ConveretedValue 并在 IRQHandler.c 中将其声明为外部(无论是直接还是通过头文件都是您的选择 - 我使用的头文件更可取,因为它允许编译器执行类型检查。

【讨论】:

  • 你应该在头文件变量声明中也有volatile
  • @user694733 :谢谢 - 编译器会发现这一点。
猜你喜欢
  • 1970-01-01
  • 2018-01-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多