mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik unknown type name 'HAL_StatusTypeDef'


Announcement: there is an English version of this forum on EmbDev.net. Posts you create there will be displayed on Mikrocontroller.net and EmbDev.net.
von STM32 (Gast)


Bewertung
0 lesenswert
nicht lesenswert
Hallo,

ich habe hier ein STM32 Projekt mit Eclipse, Atollic Studio.
Die Datei STM32F4xx_hal_def.h wird eingebunden und besitzt einige
Typendefinitionen. Sie sieht so aus:
#ifndef __STM32F4xx_HAL_DEF
#define __STM32F4xx_HAL_DEF


typedef enum
{
  HAL_OK       = 0x00U,
  HAL_ERROR    = 0x01U,
  HAL_BUSY     = 0x02U,
  HAL_TIMEOUT  = 0x03U
} HAL_StatusTypeDef;

typedef enum
{
  HAL_UNLOCKED = 0x00U,
  HAL_LOCKED   = 0x01U
} HAL_LockTypeDef;

...weiterer Inhalt

#endif /* ___STM32F4xx_HAL_DEF */


Obgleich die Datei: STM32F4xx_hal_def.h überall eingebunden ist, wo sie 
gebraucht wird, erhalte ich beim Kompilieren die Fehler:
> unknown type name 'HAL_StatusTypeDef'

Die Fehler treten dabei in fast allen Dateien des Ordners: 
STM32F4xx_HAL_Driver auf.

Wenn ich nun in der Datei "STM32F4xx_hal_def.h" das "#ifndef" 
auskommentiere dann wird die Datei auch von den anderen Files gefunden, 
aber dann erhalte ich wiederum tausende Fehler der Art "conflicting 
types" bzw. der Art redeclaration of HAL_StatusTypeDef und 
HAL_LockTypeDef.

Irgendwie befinde ich mich da in einer Sackgasse.
Ich arbeite mit Eclipse, Atollic Studio, Controller ist ein STM32.

Was mache ich da gerade falsch?

von W.S. (Gast)


Bewertung
-6 lesenswert
nicht lesenswert
STM32 schrieb im Beitrag #4767071:
> Was mache ich da gerade falsch?

Das was du falsch machst ist, daß du irgendwelches Zeugs verwenden 
willst, ohne daß du es verstehst und ohne daß du es dir genauer 
angeschaut hast.

Warum verschwendest du deine Zeit überhaupt damit, sowas wie diese 
STM-HAL benutzen zu wollen? Das ist doch überhaupt keine HAL, sondern 
lediglich ein zusätzliches Gekruschte, was du nicht im Mindesten 
benötigen würdest, wenn du zum Benutzen deiner Hardware das zugehörige 
RefManual lesen würdest.

In deinem Falle ist offenbar __STM32F4xx_HAL_DEF bereits vorher von 
anderer Seite aus definiert worden und die dortigen Inhalte stehen im 
Konflikt zu dem Zeugs, was du in der genannten Headerdatei siehst. 
Kurzum, all das, was du da zusammenkopiert hast, paßt nicht zusammen.

Mein dringender Rat:
1. pfeif auf all dieses HAL-Gewurschtel,
2. suche dir nen ordentlichen Startupcode in Assembler (Jaja, nicht 
sowas in C, wie hier einige Oberschlaue immer wieder betonen)
3. Stelle dir eine Headerdatei für deinen Controller zusammen, die du 
SELBST verstehst. Und zwar auf Basis des Referenzmanuals!
4. schreibe dir eine ordentliche Konfigurations-Unit
5. schreibe dir für all die Peripherie-Cores, die du benutzen willst und 
für die es einen Sinn macht, einen ordentlichen Treiber, der die HW 
tatsächlich kapselt.

W.S.

von R.I. (Gast)


Bewertung
3 lesenswert
nicht lesenswert
Das sind immer die hilfreichsten Antworten, die verlangen man könnte 
sich ja einfach selbst den Treiber schreiben, programmier am besten 
gleich alles in Assembler! Und dann nicht auf die Frage eingehen, naja.

In meinem Fall war das Problem, dass ich in einer selbst geschriebenen 
Datei einen Header aus stm32f4-hal eingebunden habe, um den Typedef 
einer externen Variable zu benutzen.
Diese Zeile dann mit #include "stm32f4xx.h" ersetzt und siehe da alles 
kompiliert wieder.

von DaLi (Gast)


Bewertung
0 lesenswert
nicht lesenswert
@R.I. Vielen Dank für Deine Antwort. Mir hat sie geholfen und mein 
Problem ist gelöst.

von Johnny B. (johnnyb)


Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
STM32 schrieb im Beitrag #4767071:
> Die Fehler treten dabei in fast allen Dateien des Ordners:
> STM32F4xx_HAL_Driver auf.

Die HAL setzt voraus, dass noch mit der Option -D beim Compileraufruf 
ein paar defines gesetzt werden.
Beispielsweise für einen STM32F302xC:

-DUSE_HAL_DRIVER -DSTM32F302xC

CubeMX setzt das alles automatisch richtig, wenn man damit ein Projekt 
erzeugt.

: Bearbeitet durch User

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.