Forum: Mikrocontroller und Digitale Elektronik STM32 Chan Fat mit Keil Standart Library?


von Florian G. (Firma: Student) (flogo)


Lesenswert?

Hallo zusammen,

habe inzwischen soweit mein Projekt fertig,
und wollte nun Chan FatFs System implentieren.

Da gibt es einige Probleme,
da ich auf die von Keil mitinstallierte Standart Library (v2.0.1)
zurückgreife...

Auch das Einfügen des alten Programmes in
von Thomas Projekt Umgebung bringt nur Chaos -_-

Nun wollte ich fragen ob jemand den Programmcode
auf die von Keil  zur Verfügung gestellt Standart Library
umgeschrieben hat?

Grüße
von Florian G. (Firma: Student) (flogo)


Lesenswert?

Gibt es überhaupt sowas?
von holger (Gast)


Lesenswert?

>Gibt es überhaupt sowas?

Schon möglich, aber eine Portierung ist ja nun
für einen erfahrenen Programmierer auch nicht sooo schwer.

Wart halt noch ein paar Tage. Vieleicht meldet sich noch
jemand.
von SNR (Gast)


Lesenswert?

Florian G. schrieb:
> Gibt es überhaupt sowas?

Ist ja nur die unterste Schicht die man anpassen muss:
1
The FatFs is written in compliance with ANSI C and completely separated
2
from the disk I/O layer.

Und wenn Du unten auf der Seite bei den Beispielimplementierungen 
kuckst...was steht da:
http://elm-chan.org/fsw/ff/00index_e.html

Ich war mal so frei es zu übersetzen :-D

http://translate.google.de/translate?sl=ja&tl=de&js=n&prev=_t&hl=de&ie=UTF-8&layout=2&eotf=1&u=http%3A%2F%2Fnemuisan.blog.bai.ne.jp%2F&act=url
von Florian G. (Firma: Student) (flogo)


Lesenswert?

ok danke snr

nun ja ich versuchs gerade zu portieren

ich habe in einer c datei folgende fehlermeldung
ff\mmc_stm32vl.c(48): error:  #20: identifier "DMA_InitTypeDef" is 
undefined
was muss ich includen, damit diese fehlermeldung (und anhängsel) 
weggehen?

include stm32f10x_dma ist es schonmal nicht -_-
von holger (Gast)


Lesenswert?

>was muss ich includen, damit diese fehlermeldung (und anhängsel)
>weggehen?

Naja, du holst dir von ST die Peripheral Library
für den STM32 und bindest die in dein Projekt ein.
von Florian G. (Firma: Student) (flogo)


Lesenswert?

sehe ich es richtig, das die bisher einzige vernünftige lösung was sd 
karte + fatsystem angeht nur das chan's fatfs ist?
das wiederrum heißt das man auf die standart firmware verzichten muss?
von Florian G. (Firma: Student) (flogo)


Lesenswert?

holger ich hab ja eigentlich drin

also wenn ich die entsprechenden heade include,
bekomme ich so schöne fehlermeldungen wie diese

C:\Keil\ARM\INC\ST\STM32F10x\stm32f10x_type.h(23): error:  #256: invalid 
redeclaration of type name "s32" (declared at line 470 of 
"C:\Keil\ARM\INC\ST\STM32F10x\stm32f10x.h")
von holger (Gast)


Lesenswert?

>also wenn ich die entsprechenden heade include,
>bekomme ich so schöne fehlermeldungen wie diese
>
>C:\Keil\ARM\INC\ST\STM32F10x\stm32f10x_type.h(23): error:  #256: invalid
>redeclaration of type name "s32" (declared at line 470 of
>"C:\Keil\ARM\INC\ST\STM32F10x\stm32f10x.h")

Da wirst du wohl eine von den beiden Deklarationen löschen müssen.
von hhnnjbh (Gast)


Lesenswert?

Stm und Keil bringen doch eine lib mit für sd+fat

Alternativ einfach laut Anwendung das chan portieren.
Wenn man die stmlibs nutzen will,  muss man sichvdamit mal auseinander 
setzen.

Ist aber eigentlich kein Thema...

Ein timer 100ms

Dann die write und read Funktionen in die discio.c
Das wars auch schon.
von Alex E. (tecnologic) Benutzerseite


Lesenswert?

Moin,

Warum nimmst du so eine alte Standart Lib? Lad dir bei ST die 
STDPeriphLib 3.5 Da sind auch templates für Keil drin. 2. sind da auch 
Beispiele für Sd Karte und STM mit Chans Fatfs drin, leider nur V0.8 
aber das kann man ja auf 0.9b updaten.

MfG

Tec
von nur malso (Gast)


Lesenswert?

Hm ich hatte auch vor mich mal mit STM32 und SD+FAT zu beschäftigen, 
allerdings auf IAR, die StdLib 3.5 benutze ich eh, wo finde ich denn 
dort die Beispiele mit ChanFat? habe nur irgendwo mal ein ST Bsp. mit 
DOSFS gefunden. Vielen Dank
von Flo (Gast)


Lesenswert?

guten morgen

@Tec Nologic
weil ich zum ersten mal mit Mikrocontroller zu tun habe.
da war ich froh das es ich überhaupt damit arbeiten konnte,
das war gar nicht so einfach

da sich zwischenzeitlich die librarys geändert haben,
ist es ja nicht eben das einsetzen seines codes in die neue
Lib -_-
von Alex E. (tecnologic) Benutzerseite


Lesenswert?

Ok,

Mit FatFs in der StdLib habe ich mich geirrt es war die USBDeviceLib von 
St
in dem MSC beispiel wird Fatfs benutzt.

@Flo
Wenn man anfängt will man es so einfach wie möglich habe das kann ich 
verstehen. Welches Board benutzt du?

Wenn du FatFs und St lib nehmen willst dann muss der DiskIo layer von 
Fatfs angepasst werden.

Welche Fehler hast du denn wenn du das BSP von Martin Thomas in Keil 
compilierst?


http://www.siwawi.arubi.uni-kl.de/avr_projects/arm_projects/arm_memcards/index.html#chanfat_stm32

mfg

Tec
von Florian G. (Firma: Student) (flogo)


Lesenswert?

Hi Tec

also folgende Fehlermeldung

das Problem was dazukommt ist,
wenn ich meinen "Krahm" da rein schiebe,
kommen mehr Fehlermeldungen...

Problematisch wirds noch, das dieses Projekt keine Interrupt freigegeben 
hat,
bzw. wüßte ich mal zu gerne wo.
1
User command #1: proj_objdump.cmd ...\Desktop\stm32_chan_fat\project\obj\stm32_chanfat.elf ...\stm32_chan_fat\project\obj\stm32_chanfat.lss
2
...\Desktop\stm32_chan_fat\project>arm-none-eabi-objdump -h -S --section=.text --section=.data C:\Dokumente  1>und 
3
arm-none-eabi-objdump: 'C:\Dokumente': No such file
4
arm-none-eabi-objdump: Section '.data' mentioned in a -j option, but not found in any input file
5
arm-none-eabi-objdump: Section '.text' mentioned in a -j option, but not found in any input file
6
".\obj\stm32_chanfat.elf" - 0 Error(s), 0 Warning(s).

"Wenn du FatFs und St lib nehmen willst dann muss der DiskIo layer von
Fatfs angepasst werden."

Wenn ich wüßte wie das geht,
wäre das für mich die sauberste Lösung.
Das Problem ist das ich zuwenig Kenntnisse zur Layerprogrammierung habe 
-_-

Das Board ist ein Selfmadeboard,
mit wenig Schnickschnack und fast allen verfügbaren GPIOs.
Besetzt mit einem STM32F103VC

Edit: Sehe gerade DAS ist noch keine Fehlermeldung ;)
von holger (Gast)


Lesenswert?

arm-none-eabi-objdump: 'C:\Dokumente': No such file

Das sollte wohl "Dokumente und Einstellungen" heissen.
Es gibt also immer noch Programme die mit Leerzeichen
im Pfad nicht umgehen können.
von Florian G. (Firma: Student) (flogo)


Lesenswert?

ich glaube ich habe es fast geschafft,
nur was heißt das bitte?

[code]
linking...
./obj/misc_test_term.o: In function `TIM2_IRQHandler':
C:\Dokumente und 
Einstellungen\Florian\Desktop\stm32_chan_fat\project/misc_test_term.c:92 
:  multiple definition of `TIM2_IRQHandler'
./obj/main.o:C:\Dokumente und 
Einstellungen\Florian\Desktop\stm32_chan_fat\project/main.c:811: first 
defined here
./obj/main.o: In function `EXTI0_IRQHandler':
main.c:(.text.EXTI0_IRQHandler+0x84): undefined reference to 
`EXTI_GetITStatus'
main.c:(.text.EXTI0_IRQHandler+0xb4): undefined reference to 
`EXTI_ClearITPendingBit'
./obj/main.o: In function `Bahn_Configuration':
main.c:(.text.Bahn_Configuration+0x48): undefined reference to 
`EXTI_Init'
./obj/main.o: In function `main':
main.c:(.text.main+0x1f0): undefined reference to `RCC_Configuration'
collect2: ld returned 1 exit status
Target not created[(code]
von Alex E. (tecnologic) Benutzerseite


Lesenswert?

Moin Florian

Der DiskIO Layer ist eine .c Datei in FATFS in der die Basis Funktionen 
für Block schreiben lesen usw. drin sind. Wie die gerade heißt ist nicht 
vorgegeben deshalb kann ich dir gerade nicht sagen, wie die bei dir 
heißt.

Die Fehler die du jetzt hast das sind Linkerfehler.

>./obj/misc_test_term.o: In function `TIM2_IRQHandler':
>C:\Dokumente und
>Einstellungen\Florian\Desktop\stm32_chan_fat\project/misc_test_term.c:9 2:
>multiple definition of `TIM2_IRQHandler'

Der Interrupthandler vom Timer 2 "TIM2_IRQHandler" ist zwei mal 
definiert worden in deinem Code, die Funktion steht in 2 verschiedenen 
Dateien.

>C:\Dokumente und
>Einstellungen\Florian\Desktop\stm32_chan_fat\project/misc_test_term.c:9 2:  >und
>C:\Dokumente und
>Einstellungen\Florian\Desktop\stm32_chan_fat\project/main.c:811:
da gibts die Funktion einmal musst du löschen, ich tippe mal, die in der 
Main ist von dir.


>./obj/main.o: In function `EXTI0_IRQHandler':
>main.c:(.text.EXTI0_IRQHandler+0x84): undefined reference to
>`EXTI_GetITStatus'
>main.c:(.text.EXTI0_IRQHandler+0xb4): undefined reference to
>`EXTI_ClearITPendingBit'
>./obj/main.o: In function `Bahn_Configuration':
>main.c:(.text.Bahn_Configuration+0x48): undefined reference to
>`EXTI_Init'
>./obj/main.o: In function `main':
>main.c:(.text.main+0x1f0): undefined reference to `RCC_Configuration'
du hast das ST Lib nicht richtig dazu gelinkt, den die Funktionen werden 
nicht compiliert. denn der Linker findet den Objektcode der Funktionen
nicht.


MfG

Tec
von W.S. (Gast)


Lesenswert?

SNR schrieb:
> Ist ja nur die unterste Schicht die man anpassen muss:

Das war wohl nix. Wenn man nicht mit beleidigten Warnings vom Compiler 
leben will, dann muß einiges in ChaN's Quellen von genial auf bieder 
umgestellt werden, insbesondere Ausdrücke wie 
if(result=funktion(a,...z))

Florian G. schrieb:
> da ich auf die von Keil mitinstallierte Standart Library (v2.0.1)

Du meinst vermutlich diese unsägliche ST-Lib, ja? Da ist wohl jeder 
ernsthafte Programmierer aufgerufen, dieses aufgeblasene Zeugs erstmal 
auf ein benutzbares Maß herunterzustutzen. Nun ja, sowas übt, hihi. Ich 
hab's auch nur zur Hälfte geschafft.

W.S.
von Flo (Gast)


Lesenswert?

Abend zusammen,

W.S. ja die meine ich :)
Kam bis dato auch wunderbar mit Ihr zurecht,
ich würde mich auch nicht als Programmierer bezeichnen,
aber wer weiß, vielleicht hats mich gerade gepackt ;)

Mit den nächsten Projekten werde ich das nun auch ändern,
man wird ja mit der Erfahrung schlau ;)

Das ist grausig, korregiere ich irgendwo was,
kommt woanders eie Fehlermeldung...so ein ganz leeres Proect wäre toll,
das schlimme ist bloß, ich weiß garnicht was ich löschen darf, damit ich 
nicht, die Funktionalität störe

Nunja, ich werd mal weiter korregieren -_-
von Peter (Gast)


Lesenswert?

Einige Stolpersteine gibts schon bei der Elm Chan Library. Ich hab sie 
für die LPC23xx SD-Card und USB Stick angepasst.
Muss man halt Stück für STück durchgehen und anpassen.
Läuft stabil und ohne Probleme.
von Flo (Gast)


Lesenswert?

nunja, geschickt wärs gewesen das leere Projekt zu veröffentlichen,
aber man soll nicht meckern,
schließlich ist das gute Arbeit, wovon viele profentieren

ich glaube ich habe eher das Problem,
dass du durch die komplette Umstrukturierung der Lib mit der Zeit,
Einstellungen ungültig werden.

Es gibt keine stm32f10x_it.h mehr,
die eine einfache Einstellung von EXTI Interrupt
erlauben. So hänge ich immernoch an diesem Problem
1
>./obj/main.o: In function `EXTI0_IRQHandler':
2
>main.c:(.text.EXTI0_IRQHandler+0x84): undefined reference to
3
>`EXTI_GetITStatus'
4
>main.c:(.text.EXTI0_IRQHandler+0xb4): undefined reference to
5
>`EXTI_ClearITPendingBit'
6
>./obj/main.o: In function `Bahn_Configuration':
7
>main.c:(.text.Bahn_Configuration+0x48): undefined reference to
8
>`EXTI_Init'

Frage mich wieso Keil nicht die aktuellste STD Lib
in Ihrem Programm unterbringt?
von TEc (Gast)


Lesenswert?

Hi Florian,

Wenn du ein leeres Projekt willst brauchst du nur beiKkeil eins 
erstellen.
Dann brauchst du noch die stm32F1xx.h oder ähnlich je nach MCU und das 
Referencemanual zu der MCU. Den Code von StdPeriphlib würde ich mir 
trozdem laden da kann man gucken wies geht. wenn man mal ein Register 
vergessen hat.

MfG

Tec
von W.S. (Gast)


Lesenswert?

Flo schrieb:
> ich weiß garnicht was ich löschen darf, damit ich
> nicht, die Funktionalität störe

Ich sehe das anders: Fang am besten damit an, dir Gedanken über die 
Struktur zu machen, die du haben willst und füll die dann mit dem Zeugs 
auf, was du aus den diversen Quellen (ST-Lib etc.) wirklich brauchst.

W.S.
von Thomas B. (escamoteur)


Lesenswert?

Hi,

auf der Rowleys Webseite hatte ich komplette Sourcen für den STM32 
(SDIO) + FAT gefunden. Siehe

Beitrag "Re: Fat auf SD ansteuern über STM32"


Gruß
Thomas
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.