Porting von IAR zu GCC

Gast #5001214
Lesenswert?

Ich habe vor einiger Zeit AVR449 auf C++ portiert.

  typedef struct PMSMflags {
//*************************************************
    uint8_t motorStopped     : 1;                //
    uint8_t motorSynchronized: 1;                //
    uint8_t actualDirection  : 2;                //
    uint8_t desiredDirection : 1;                //
    uint8_t driveWaveform    : 2;                //
    uint8_t unused           : 1;                //
//*************************************************
 } PMSMflags_t;

// GPIOR0 BitFlag
//*************************************************
// iotn861a.h
//*************************************************
//#define GPIOR0 _SFR_IO8(0x0A)
//*************************************************
  #define fastFlags (*(PMSMflags_t*) &GPIOR0)    //

//         (*(volatile PMSMflags_t*) &GPIOR0)    // !! IS NoGo with C++
(Firma: matzetronics) #5002037
Lesenswert?

Johann L. schrieb:
> Ist aber nur ne Frage der Zeit bis das Probleme bereitet, und dann
> suchst du dir nen Wolf.

Ich habe das auch nur mit wenigen ausgesuchten Registern gemacht (R9, 
R2,R4 und R8, wimre). Im Grunde ist selbst das bei AVR447 unnötig, da 
der MC auch mit normalen Variablen für den Algorithmus schnell genug 
ist.
Hast du denn einen Lösung für den TE? Es geht um die Benutzung von 
GPIOR0-GPIOR2 als bitadressierbaren schnellen Speicher.
Für einfache uint8_t Variablen geht ja sowas hier
1
#define amplitude GPIOR1
2
#define sineTableNextSectorStart GPIOR2
Aber eben nicht für diese struct:
1
typedef struct PMSMflags
2
{
3
  uint8_t motorStopped : 1;     //! Is motor stopped?
4
  uint8_t motorSynchronized: 1; //! Is motor synchronized? Does not have any meaning when motorStopped is TRUE.
5
  uint8_t actualDirection : 2;  //! The actual direction of rotation.
6
  uint8_t desiredDirection : 1; //! The desired direction of rotation.
7
  uint8_t driveWaveform : 2;    //! The current waveform that should be produced.
8
} PMSMflags_t;

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren