2016-09-24 2 views
-1

Es sagt mir, dass "accelerometer" und "lcd" in diesem Bereich nicht deklariert wurden, wenn sie in PIT0_IRQHandler verwendet werden. Keine der Lösungen, die ich online gefunden habe, hat bis jetzt funktioniert, also dachte ich, ich würde es einfach posten. Ich bin ziemlich neu in diesem und so fühlen sich frei, jede darauf hinzuweisen, und jeder Fehler enthalten'accelerometer' und 'lcd' nicht in diesem Bereich angegeben

#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; 
    } 

Antwort

2

accelerometer in initialiseAccel deklariert wird. Es wird am Ende dieser Funktion den Gültigkeitsbereich verlassen und ist in PIT0_IRQHandler kein bekannter Name. Sie sollten wahrscheinlich eine Klasse erstellen, die diese Variablen und Funktionen enthält, oder Sie müssen globale Variablen (möglicherweise in einem Namespace) verwenden, um diese Werte zu speichern.

+0

Irgendwelche Vorschläge, wie man einen solchen Namespace schreibt? Für das, was ich schreibe, und soweit ich beurteilen kann, ist die Verwendung eines Namespace in der Header-Datei die beste Lösung, aber ich habe versucht und es nicht zu kompilieren – Davies

+0

Deklarieren Sie einen Namespace mit Ihren Variablen (wie 'lcd' und' accelerometer') drin. Besser wäre es, eine Klasse mit all diesen Variablen zu haben und möglicherweise eine globale Variable (Variable oder Zeiger) darauf, auf die 'PIT0_IRQHandler' zugreifen würde. – 1201ProgramAlarm

Verwandte Themen