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
>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.
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
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 -_-
>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.
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?
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")
>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.
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.
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
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
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 -_-
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
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 ;)
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.
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]
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
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.
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 -_-
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.
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?
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
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.
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.