| Author |
Message
|
Freddie Chopin Poziom 25

Joined: 12 Dec 2005 Posts: 7300 Location: Zawiercie
|
#31
04 Feb 2012 21:33 Re: [STM32][C/Codesourcery] Inicjalizacja uC. Port GPIO B |
|
|
|
No ale jak chcesz testować miganie diodki to mam nadzieję, że plik config.h sobie modyfikujesz "pod swoją płytkę"?
Na którym pinie masz diodę, na jakim porcie i jaki masz tam kwarc?
4\/3!!
|
|
| Back to top |
|
 |
Google

|
#
04 Feb 2012 21:33 |
|
|
|
|
|
| Back to top |
|
 |
tyrreus Poziom 9

Joined: 10 Oct 2009 Posts: 33
|
#32
05 Feb 2012 00:04 Re: [STM32][C/Codesourcery] Inicjalizacja uC. Port GPIO B |
|
|
|
Hmmmm, pliku config.h nie zmieniałem, ledy mam na porcie od PB8 - PB15, więc mieści się w zakresie.
Widzę, że w config.h zdefioniowane jest ze mrugać ma pin 1, ja mam ledy na 8 - 15, ale teraz pytanie ...
Po uruchomieniu świeci się u mnie drugi led (licząc od zera to config wskazuje na właśnie na drugi) który się nie świeci. Spróbuję za chwile przestawić na 9 i zobaczę, czy ruszy ale teraz mam reinstall systemu więc dłuższą chwilę.
Rezonator 8MHz
Tak w miarę wgryzania się doszedłem do tego, że zakładając temat chodziło mi w sumie w dużej mierze o plik startup.s i to co się w nim dzieje wiec zaczynam rozumieć dlaczego mi program (ten mój pierwszy) nie chciał w ogóle działać.
Znalazłem taki oto opis:
| Quote: |
| Cortex-M3 zaraz po uruchomieniu ładuje do rejestru MSP (Main Stack Pointer) wartość spod adresu 0×00000000. Kolejna niezbędna informacja to adres funkcji inicjalizującej – Reset_Handler pochodzącej z naszego startup’u. Adres ten musi znaleźć się pod adresem 0×00000004. |
(zaczerpnięte ze strony: tutro.net)
Dalej; doczytałem ze ten plik startup jest doklejany do naszego pliku podczas linkowania - bo problem jest umieścić coś przed funkcją main od której program się zaczyna więc nie da się (chyba) zainicjalizować procesora bezpośrednio z "C".
(Swoją drogą, masz może gdzieś jakiś artykuł opisujący co i jak się dzieje w pliku startup.s?)
Co ja chciałem zrobić - mając jedynie plik main.c zaszyć w nim wszystko bez żadnych dodatkowych plików - łącznie z ustawianiem stosu, napisaniu funkcji inicjalizującej.
|
|
| Back to top |
|
 |
Freddie Chopin Poziom 25

Joined: 12 Dec 2005 Posts: 7300 Location: Zawiercie
|
#33
05 Feb 2012 00:40 Re: [STM32][C/Codesourcery] Inicjalizacja uC. Port GPIO B |
|
|
|
| tyrreus wrote: |
| Dalej; doczytałem ze ten plik startup jest doklejany do naszego pliku podczas linkowania - bo problem jest umieścić coś przed funkcją main od której program się zaczyna więc nie da się (chyba) zainicjalizować procesora bezpośrednio z "C". |
1. Nie przesadzajmy - przy użyciu skryptu linkera i tablicy wektorów możesz sobie tak poskładać program, że zacznie się od dowolnego miejsca które sobie zażyczysz...
2. Da się zrobić startup w C - jak najbardziej. Nawet jakieś stare wersje przykładów tak właśnie miały zrobione, ale wycofałem się z tego. Startup to jest plik w którym generalnie w 99% przypadków nie ma potrzeby niczego zmieniać (zwłaszcza gdy masz low_level_init_0 i ..._1), a w pozostałym 1% przypadków już raczej trzeba wiedzieć po co i jak, więc pewnie i assembler nie jest problemem. A że przy okazji assemblerowy startup jest troszkę krótszy i szybszy to tylko zaleta
| tyrreus wrote: |
| eus"](Swoją drogą, masz może gdzieś jakiś artykuł opisujący co i jak się dzieje w pliku startup.s?) |
Chcesz się nauczyć assemblera, to po prostu przejrzyj ten plik <; Jest naprawdę prosty, wszystko tam jest skomentowane, więc nawet nie trzeba kumać tych instrukcji żeby wiedzieć po co są. Możesz zignorować kawałki odpowiedzialne za low_level_init_0 oraz ..._1.
| tyrreus wrote: |
| Co ja chciałem zrobić - mając jedynie plik main.c zaszyć w nim wszystko bez żadnych dodatkowych plików - łącznie z ustawianiem stosu, napisaniu funkcji inicjalizującej. |
Ponownie - po co? Jak piszesz program na PC to też kombinujesz jak zrobić go tylko w main, linkować bez bibliotek i nie korzystać z funkcji systemu operacyjnego? Czemu nie zrobić tego porządnie, czyli w startupie?
4\/3!!
|
|
| Back to top |
|
 |
tyrreus Poziom 9

Joined: 10 Oct 2009 Posts: 33
|
#34
05 Feb 2012 01:00 Re: [STM32][C/Codesourcery] Inicjalizacja uC. Port GPIO B |
|
|
|
| Quote: |
| Ponownie - po co? Jak piszesz program na PC to też kombinujesz jak zrobić go tylko w main, linkować bez bibliotek i nie korzystać z funkcji systemu operacyjnego? Czemu nie zrobić tego porządnie, czyli w startupie? |
Nie no jasne, że tak. Osobna funkcja tylko chodziło o kwestię odpalenia czegoś zanim się zacznie main - no można w takim razie w mainie pierwsze co to zawołać funkcję inicjalizującą i po wgraniu na uC od razu zacznie sie wykonywanie tego co jest w mainie w której ustawiona zostanie tablica wektorów. Nie trzeba żadnego loadera.
A masz gdzieś może te stare wersje przykładów i chciał byś je udostępnić? Nawet jako jakieś deprecated, mający dodatkowe walory edukacyjne?
|
|
| Back to top |
|
 |
gaskoin Poziom 22

Joined: 02 Jun 2010 Posts: 2194 Location: Bytom
|
#35
05 Feb 2012 01:58 Re: [STM32][C/Codesourcery] Inicjalizacja uC. Port GPIO B |
|
|
|
Uczenie się czegoś co jest bez sensu nie ma walorów edukacyjnych. Często te pliki C składały się z funkcji w których był i tak gdzieś używany asm więc było to przerostem formy nad treścią.
|
|
| Back to top |
|
 |
tyrreus Poziom 9

Joined: 10 Oct 2009 Posts: 33
|
#36
05 Feb 2012 02:07 Re: [STM32][C/Codesourcery] Inicjalizacja uC. Port GPIO B |
|
|
|
Nie no jeżeli to były wstawki assemblerowe to fakt, ale jeżeli były to jakieś funkcje piszczące po pamięci to chętnie bym je zobaczył.
Nie widziałem ich i nie wiem czy były przekombinowane.
|
|
| Back to top |
|
 |
Freddie Chopin Poziom 25

Joined: 12 Dec 2005 Posts: 7300 Location: Zawiercie
|
#37
05 Feb 2012 10:06 Re: [STM32][C/Codesourcery] Inicjalizacja uC. Port GPIO B |
|
|
|
Startupy w C są w paczce z biblioteką ST Standard Peripheral Library - gdzieś tam są schowane. Zobacz ten startup w asm, poczytaj co tam jest zrobione i zrób to samo w C. Generalnie inicjalizację .data i .bss da się zrobić w pętli, inicjalizację dodatkowego stosu czy modyfikację rejestru kontrolnego trzeba robić przez funkcje-wstawki-assemblerowe które są w bibliotece CMSIS.
Ciężko to zrobić w main, bo C zakłada, że stos jest ustawiony poprawnie. Może na Cortex-M3 jeszcze najłatwiej, bo tam jeden stos ustawia się automatycznie na podstawie tablicy wektorów, więc w teorii jest nadzieja... Niemniej jednak - bezsensu [; Tablica wektorów nie może być "zrobiona" w main - bez poprawnego wektora do funkcji wywoływanej po resecie i poprawnego wskaźnika na stos nic Ci się nie uruchomi (no dobra, "uruchomi" się Hard_Fault [; ).
4\/3!!
|
|
| Back to top |
|
 |
gaskoin Poziom 22

Joined: 02 Jun 2010 Posts: 2194 Location: Bytom
|
#38
05 Feb 2012 11:53 Re: [STM32][C/Codesourcery] Inicjalizacja uC. Port GPIO B |
|
|
|
No właśnie. Main de facto jest wywoływany ze startupu. Dokładniej z Reset Handlera. Żeby go mieć musisz mieć tablicę wektorów... błędne koło :) Wbrew pozorom main nigdy nie jest punktem startowym całego programu.
|
|
| Back to top |
|
 |