Forum: Mikrocontroller und Digitale Elektronik Porting von IAR zu GCC


von Daniel B. (yzdani)


Lesenswert?

Servus,

übersetze gerade das AVR449 IAR Projekt auf GCC
was ersetzt unter GCC "ioavr.h" ?

#include <avr/io.h> richtig?
1
 volatile __io PMSMflags_t fastFlags                         @0x0a;
wie wird sowas geported?

Schöne Grüße
Daniel

von MitLeserin (Gast)


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++

von Daniel B. (yzdani)


Lesenswert?

MitLeserin schrieb:
> Ich habe vor einiger Zeit AVR449 auf C++ portiert

Existiert das Projekt noch?
Wenn ja wären die Files verkäuflich?

Schöne Grüße
Daniel

von Matthias S. (Firma: matzetronics) (mschoeldgen)


Lesenswert?

Daniel B. schrieb:
> volatile __io PMSMflags_t fastFlags                         @0x0a;

Ist mit AVR-GCC so einfacher:
1
register volatile PMSMflags_t fastFlags asm ("r9"); //   @0x1e; r9
So läuft bei mir AVR447 ohne Probleme.

von Johann L. (gjlayde) Benutzerseite


Lesenswert?

Matthias S. schrieb:
> Ist mit AVR-GCC so einfacher:
>
1
register volatile PMSMflags_t fastFlags asm ("r9"); //   @0x1e; r9
> So läuft bei mir AVR447 ohne Probleme.

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

Hinzu kommt das Register nicht volatile sein können, zumindest nicht in 
GCC.

von Matthias S. (Firma: matzetronics) (mschoeldgen)


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;

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.