Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/154.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ ';加速计';和';液晶显示器';未在此范围内声明_C++_Scope_Handler_Interrupt_Declare - Fatal编程技术网

C++ ';加速计';和';液晶显示器';未在此范围内声明

C++ ';加速计';和';液晶显示器';未在此范围内声明,c++,scope,handler,interrupt,declare,C++,Scope,Handler,Interrupt,Declare,它告诉我,在PIT0_IRQHandler中使用“加速计”和“lcd”时,它们并没有在这个范围内声明。到目前为止,我在网上找到的解决方案都还没有奏效,所以我想我还是把它贴上去吧。我对这一点也很陌生,所以请随时指出其中的任何错误 #include <stdio.h> #include "system.h" #include "derivative.h" #include "hardware.h" #include "delay.h" #i

它告诉我,在PIT0_IRQHandler中使用“加速计”和“lcd”时,它们并没有在这个范围内声明。到目前为止,我在网上找到的解决方案都还没有奏效,所以我想我还是把它贴上去吧。我对这一点也很陌生,所以请随时指出其中的任何错误

    #include <stdio.h>
    #include "system.h"
    #include "derivative.h"
    #include "hardware.h"
    #include "delay.h"
    #include "lcd.h"
    #include "i2c.h"
    #include "level.h"
    #include "mma845x.h"
    #include "tone.h"
    #include "accel.h"

    /// LCD dimensions and centerpoint
    #define LCD_WIDTH  (LCD_X_MAX-LCD_X_MIN)
    #define LCD_HEIGHT (LCD_Y_MAX-LCD_Y_MIN)
    #define CENTRE_X   ((LCD_X_MAX-LCD_X_MIN)/2)
    #define CENTRE_Y   ((LCD_Y_MAX-LCD_Y_MIN)/2)

    #define BACKGROUND_COLOUR (RED)
    #define FOREGROUND_COLOUR (WHITE)
    #define CIRCLE_RADIUS (20)

    using namespace USBDM;

    void initialisePIT(int channel, uint32_t interval) {
        // Enable clock to PIT
        SIM->SCGC6  |= SIM_SCGC6_PIT_MASK;
        // Enable PIT module
        PIT->MCR     = PIT_MCR_FRZ_MASK;
        // Set reload value
        PIT->CHANNEL[channel].LDVAL  = interval-1;
        // Enable this channel with interrupts
        PIT->CHANNEL[channel].TCTRL = PIT_TCTRL_TEN_MASK|PIT_TCTRL_TIE_MASK;
        // Enable PITn interrupts in NVIC
        NVIC_EnableIRQ((IRQn_Type)(PIT0_IRQn+channel));
        // Set arbitrary priority level
        NVIC_SetPriority((IRQn_Type)(PIT0_IRQn+channel), 8);
    }

    void initialiseLCD(){
        // Instantiate SPI interface class
        Spi *spi = new Spi0();
        // Instantiate LCD interface class
        Lcd *lcd = new Lcd(spi);
        // Clear Background and set to a preset (Set above) colour
        lcd->clear(BACKGROUND_COLOUR);
        // Draw crosshairs and initial circle on the screen
        lcd->drawLine(LCD_WIDTH/2,LCD_WIDTH/2,0,LCD_HEIGHT,BLACK);
        lcd->drawLine(0,LCD_WIDTH,LCD_HEIGHT/2,LCD_HEIGHT/2,BLACK);
        lcd->drawCircle(CENTRE_X, CENTRE_Y, 20, WHITE);
    }

    void initialiseAccel()
    {
        I2c *i2c = new I2c0();
        MMA845x *accelerometer = new MMA845x(i2c, MMA845x::ACCEL_2Gmode);
    }

    void PIT0_IRQHandler(void) {
        int accelStatus;
        int16_t accelX,accelY,accelZ;
        accelerometer->readAccelerometerXYZ(&accelStatus, &accelX, &accelY, &accelZ);

        lcd->clear(BACKGROUND_COLOUR);
        lcd->drawCircle(accelX,accelY,20,WHITE);

        // Clear the interrupt request from PIT
        PIT->CHANNEL[0].TFLG = PIT_TFLG_TIF_MASK;
    }
#包括
#包括“system.h”
#包括“衍生工具.h”
#包括“hardware.h”
#包括“delay.h”
#包括“lcd.h”
#包括“i2c.h”
#包括“h级”
#包括“mma845x.h”
#包括“tone.h”
#包括“加速h”
///LCD尺寸和中心点
#定义LCD_宽度(LCD_X_最大值-LCD_X_最小值)
#定义LCD_高度(LCD_Y_最大值-LCD_Y_最小值)
#定义中心X((LCD X X X X X X X最大值-LCD X X X X X最小值)/2)
#定义中心((LCD_Y_最大值-LCD_Y_最小值)/2)
#定义背景颜色(红色)
#定义前景色(白色)
#定义圆的半径(20)
使用名称空间USBDM;
void initialisePIT(内部通道,uint32\u t间隔){
//启用时钟到坑
SIM->SCGC6 |=SIM_SCGC6_PIT_掩码;
//启用PIT模块
PIT->MCR=PIT\U MCR\U FRZ\U掩模;
//设置重新加载值
PIT->CHANNEL[CHANNEL].LDVAL=interval-1;
//使用中断启用此通道
PIT->CHANNEL[CHANNEL].TCTRL=PIT_TCTRL_TEN_MASK | PIT_TCTRL_TIE_MASK;
//在NVIC中启用PITn中断
NVIC_启用IRQ((IRQn_类型)(PIT0_IRQn+通道));
//设置任意优先级
NVIC_设置优先级((IRQn_类型)(PIT0_IRQn+通道),8);
}
void initialiseLCD(){
//实例化SPI接口类
Spi*Spi=新的Spi0();
//实例化LCD接口类
Lcd*Lcd=新Lcd(spi);
//清除背景并设置为预设(设置在上方)颜色
lcd->清晰(背景颜色);
//在屏幕上绘制十字光标和初始圆
lcd->抽绳(lcd_宽度/2,lcd_宽度/2,0,lcd_高度,黑色);
lcd->绘图线(0,lcd\U宽度,lcd\U高度/2,lcd\U高度/2,黑色);
lcd->画圈(中心X,中心Y,20,白色);
}
void initialiseAccel()
{
I2c*I2c=新的I2c0();
MMA845x*加速计=新的MMA845x(i2c,MMA845x::加速度模式);
}
void PIT0_IRQHandler(void){
国际地位;
int16_t accelX,accelY,accelZ;
加速计->读取加速计XYZ(&accelStatus,&accelX,&accelY,&accelZ);
lcd->清晰(背景颜色);
lcd->drawCircle(accelX,accelY,20,白色);
//从PIT清除中断请求
PIT->通道[0]。TFLG=PIT\U TFLG\U TIF\U掩码;
}

加速度计
初始加速度计
中声明。它将在该函数结束时超出范围,并且在
PIT0\u IRQHandler
中不是已知名称。您可能应该创建一个类来保存这些变量和函数,或者您必须使用全局变量(可能在名称空间中)来保存这些值。

关于如何编写这样的名称空间有什么建议吗?就我所写的内容而言,据我判断,在头文件中包含一个名称空间是最好的解决方案,但我一直在尝试将它编译为一个名称空间,其中包含您的变量(如
lcd
accelerator
)。最好是有一个包含所有这些变量的类,并且可能有一个全局(变量或指针)指向它,
PIT0\u IRQHandler
可以访问它。