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

#4578172
Lesenswert?

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
Lesenswert?

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?
#4578240
Lesenswert?

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:
#4578324
Lesenswert?

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

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