FAQ | Points | Add... | Recent posts | Search | Register | Log in


[STM32][C/Codesourcery] Inicjalizacja uC. Port GPIO B


Post new topic  Reply to topic      Main Page -> Forum Index -> Microcontrollers Generally -> ARM Microcontrollers -> [STM32][C/Codesourcery] Inicjalizacja uC. Port GPIO B
Author
Message
Freddie Chopin
Poziom 25
Poziom 25


Joined: 12 Dec 2005
Posts: 7300
Location: Zawiercie

Post#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

Google Adsense


Post# 04 Feb 2012 21:33   





Back to top
   
tyrreus
Poziom 9
Poziom 9


Joined: 10 Oct 2009
Posts: 33

Post#32 Post from the author of the topic 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
Poziom 25


Joined: 12 Dec 2005
Posts: 7300
Location: Zawiercie

Post#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
Poziom 9


Joined: 10 Oct 2009
Posts: 33

Post#34 Post from the author of the topic 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
Poziom 22


Joined: 02 Jun 2010
Posts: 2194
Location: Bytom

Post#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
Poziom 9


Joined: 10 Oct 2009
Posts: 33

Post#36 Post from the author of the topic 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
Poziom 25


Joined: 12 Dec 2005
Posts: 7300
Location: Zawiercie

Post#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
Poziom 22


Joined: 02 Jun 2010
Posts: 2194
Location: Bytom

Post#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
   
Post new topic  Reply to topic      Main Page -> Forum Index -> Microcontrollers Generally -> ARM Microcontrollers -> [STM32][C/Codesourcery] Inicjalizacja uC. Port GPIO B
Page 2 of 2 Go to page Previous  1, 2
Similar topics
[STM32][C/CodeSourcery] realizacja delay (13)
[STM32][C][KEIL] Pytania o GPIO - podstawy. (8)
[STM32] Funkcje alternatywne dla GPIO (4)
[STM32][CodeSourcery] memcpy (6)
[stm32] kanały timerów a GPIO (5)
[stm32][Eclipse/C] Konfiguracja GPIO. (3)
[c][stm32] konfiguracja gpio (7)
[STM32] [C] szybkość GPIO (6)
[STM32][CodeSourcery]Deklaracja struktury w pamięci flash. (21)
[STM32][CodeSourcery]Deklaracja funkcji w pamięci flash (3)

Page generation time: 0.113 seconds


FAQ || Administrator || Moderators || Widgets and banners || Contact
elektroda.pl topic RSS feed