STM8 Standard Peripheral Library mit ST Visual Develop benutzen - Linker error

OP #4578172
Hallo,

ich versuche aktuell, die Standard Peripheral Library von STM mit ST 
Visual Develop und dem Cosmic C Compiler zu benutzen.

Insbesondere bin ich gerade dabei, die SPI Schnittstelle zu 
initialisieren. Dafür hab ich die Header-Dateien der Lib in den Ordner 
'Include Files' und auch die aktuelle .c - Datei unter 'Source Files' 
hinzugefügt (siehe Bild)
Das hier hab ich auch gemacht:
1
#include <stm8s_spi.h>

Trotzdem bekomme ich beim Aufrufen der Funktion SPI_DeInit diesen 
Linker-Error:
1
Running Linker
2
clnk -m Debug\adxl345_spi.map -l"C:\Program Files (x86)\COSMIC\FSE_Compilers\Lib"  -o Debug\adxl345_spi.sm8 Debug\adxl345_spi.lkf 
3
#error clnk Debug\adxl345_spi.lkf:1 symbol _assert_failed not defined (Debug\stm8s_spi.o )
4
 The command: "clnk -m Debug\adxl345_spi.map -l"C:\Program Files (x86)\COSMIC\FSE_Compilers\Lib"  -o Debug\adxl345_spi.sm8 Debug\adxl345_spi.lkf " has failed, the returned value is: 1
5
exit code=1.

Wisst ihr, woran das liegt? Im Internet gibt es allgemein sehr wenig 
Dokus über ST Visual Develop.
Angehängte Dateien:
Gast #4578205
Ich schätze das assert_param das Problem ist.
Beim STM32 wird das in der jeweiligen *.h so definiert:
1
/* Exported macro ------------------------------------------------------------*/
2
#ifdef  USE_FULL_ASSERT
3
/**
4
  * @brief  The assert_param macro is used for function's parameters check.
5
  * @param  expr: If expr is false, it calls assert_failed function
6
  *         which reports the name of the source file and the source
7
  *         line number of the call that failed. 
8
  *         If expr is true, it returns no value.
9
  * @retval None
10
  */
11
  #define assert_param(expr) ((expr) ? (void)0 : assert_failed((uint8_t *)__FILE__, __LINE__))
12
/* Exported functions ------------------------------------------------------- */
13
  void assert_failed(uint8_t* file, uint32_t line);
14
#else
15
  #define assert_param(expr) ((void)0)
16
#endif /* USE_FULL_ASSERT */

Gibt es ähnliches beim STM8?
OP #4578240
In der *stm8s_conf.h* hab ich Full_assert gefunden (datei angehängt).
1
#define USE_FULL_ASSERT    (1) 
2

3
/* Exported macro ------------------------------------------------------------*/
4
#ifdef  USE_FULL_ASSERT
5

6
/**
7
  * @brief  The assert_param macro is used for function's parameters check.
8
  * @param expr: If expr is false, it calls assert_failed function
9
  *   which reports the name of the source file and the source
10
  *   line number of the call that failed.
11
  *   If expr is true, it returns no value.
12
  * @retval : None
13
  */
14
#define assert_param(expr) ((expr) ? (void)0 : assert_failed((uint8_t *)__FILE__, __LINE__))
15
/* Exported functions ------------------------------------------------------- */
16
void assert_failed(uint8_t* file, uint32_t line);
17
#else
18
#define assert_param(expr) ((void)0)
19
#endif /* USE_FULL_ASSERT */
20

21
#endif /* __STM8S_CONF_H */

Die wird durch die *stm8s.h* hinzugefügt:
1
#ifdef USE_STDPERIPH_DRIVER
2
 #include "stm8s_conf.h"
3
#endif
Angehängte Dateien:
Gast #4578266
Müsste man also sehen was _assert_failed sein soll und von wo das 
aufgerufen wird.
Gibt es in meinen aktuellen STM32 Projekt übrigens auch nicht, nur die 
assert_failed Funktion aus der *conf.h wie bei deiner.
OP #4578324
Danke, das auskommentieren hat geholfen!
Allerdings hab ich nun eine Frage wegen SPI:
Beim Senden von Daten überprüfe ich vorher, ob das *TXE*-Flag gesetzt 
ist:
1
  while(SPI_GetFlagStatus(SPI_FLAG_TXE) == RESET){
2
    nop(); //wait until transmit buffer is empty
3
  }

Das müsste doch so passen da ich eben solange warte, bis das Register 
leer ist dafür muss das der Wert von SPI_GetFlagStatus ja falsch, also 
RESET sein, oder? Leider bleibt mein Program auf ewig darin hängen.

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 10 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.