Chumanista 225 Październik 14, 2015 Właściwie co robi mikrokontroler jak dojdzie do końca programu? Resetuje się? Wchodzi w ekwiwalent while(1)? EDIT: Znalazłem częściową odpowiedź: http://www.avrfreaks.net/forum/what-happens-when-main-function-returns W gcc wyłączają się przerwania i wchodzi w nieskończoną pętlę. Tutaj: http://electronics.stackexchange.com/questions/55767/who-receives-the-value-returned-by-main jest więcej: On a microcontroller, main() is not really expected to ever exit, and the behavior if it does is not defined — so it's up to whoever wrote the C runtime for the microcontroller. I've seen systems that: Have an implicit loop around main(), so that if it exits, it simply gets called again. Have a simple "jump-to-self" loop that gets executed if main() ever exits. Simply execute the rest of code memory that follows the call to main(). This is called "running off into the weeds". I've never seen one that actually does anything at all with the value returned by main(). If this is something you actually care about, then you should take a look at — and possibly modify — the source code for your system's C runtime library. Cytuj Udostępnij ten post Link to post Share on other sites
Elvis 981 Październik 14, 2015 Chumanista, napisałem wszystko dokładnie kilka postów wcześniej. Wszystko jest w pliku startup_stm32f10x_md.S. W przypadku OpenSTM32 w tym pliku jest błąd i mikrokontroler robi skok do ostatniej procedury wywoływanej przez main, a później wchodzi w kod który akurat jest dalej w pamięci. Można zmienić plik w asemblerze i dodać tam np. pętlę nieskończoną. Ale ogólnie na mikrokontrolerach zakończenie funkcji main to błąd - nie należy tak robić. Cytuj Udostępnij ten post Link to post Share on other sites
Chumanista 225 Październik 14, 2015 Elvis, Chodziło mi o bardziej ogólną odpowiedź, nie związaną z platformą STM32. Tą odpowiedź otrzymałem w cytacie w moim poście powyżej. Cytuj Udostępnij ten post Link to post Share on other sites
Elvis 981 Październik 14, 2015 Wbrew pozorom to co napisałem też jest ogólne - większość kompilatorów dostarcza podobny plik, z kodem w asemblerze - oczywiście zależnym od użytego mikrokontrolera. I właśnie tam jest ustalone co kod robi przed, a co po funkcji main(). Wystarczy sprawdzić gdzie ten plik jest i trochę poczytać o asemblerze wykorzystywanego układu. Cytuj Udostępnij ten post Link to post Share on other sites
Polecacz 101 Zarejestruj się lub zaloguj, aby ukryć tę reklamę. Szukasz producenta PCB?Sprawdź przetestowaną firmę JLCPCB. Dlaczego warto? • Prototypy PCB za 2$ (gotowe w 24 godziny) • Kody zniżkowe dla nowych klientów (po rejestracji) • Produkcja w profesjonalnej fabryce (zobacz film) Sprawdź też » Jak powstaje PCB? Wycieczka po fabryce
Grievous1990 4 Październik 14, 2015 Witam. Zakupiłem na Botlandzie pakiet przeznaczony do niniejszego kursu, jednak mam problem. Po uruchomieniu programów proponowanych w tej lekcji program w mikrokontrolerze się wyłącza. Wklejam zawartość z konsoli konsoli środowiska: Open On-Chip Debugger 0.9.0-dev-00415-g2d4ae3f-dirty (2015-06-12-17:54) Licensed under GNU GPL v2 For bug reports, read http://openocd.org/doc/doxygen/bugs.html Info : auto-selecting first available session transport "hla_swd". To override use 'transport select <transport>'. Info : The selected transport took over low-level target control. The results might differ compared to plain JTAG/SWD adapter speed: 1000 kHz adapter_nsrst_delay: 100 none separate srst_only separate srst_nogate srst_open_drain connect_deassert_srst Info : Unable to match requested speed 1000 kHz, using 950 kHz Info : Unable to match requested speed 1000 kHz, using 950 kHz Info : clock speed 950 kHz Info : STLINK v2 JTAG v24 API v2 SWIM v11 VID 0x0483 PID 0x374B Info : using stlink api v2 Info : Target voltage: 3.230347 Info : stm32f1x.cpu: hardware has 6 breakpoints, 4 watchpoints target state: halted target halted due to debug-request, current mode: Thread xPSR: 0x01000000 pc: 0x08000168 msp: 0x20005000 ** Programming Started ** auto erase enabled Info : device id = 0x20036410 Info : flash size = 128kbytes target state: halted target halted due to breakpoint, current mode: Thread xPSR: 0x61000000 pc: 0x2000003a msp: 0x20005000 wrote 3072 bytes from file Debug/uno.elf in 0.421200s (7.123 KiB/s) ** Programming Finished ** ** Verify Started ** target state: halted target halted due to breakpoint, current mode: Thread xPSR: 0x61000000 pc: 0x2000002e msp: 0x20005000 target state: halted target halted due to breakpoint, current mode: Thread xPSR: 0x61000000 pc: 0x2000002e msp: 0x20005000 verified 2160 bytes in 0.202801s (10.401 KiB/s) ** Verified OK ** ** Resetting Target ** shutdown command invoked Uprzejmie proszę o pomoc Cytuj Udostępnij ten post Link to post Share on other sites
Treker 1735 Październik 14, 2015 Grievous1990, co to znaczy, że się wyłącza? Jakie są objawy w praktyce? Zaktualizowałeś programator i zainstalowałeś sterowniki, tak jak opisano to w kursie? Cytuj Udostępnij ten post Link to post Share on other sites
Sebastian_code 0 Październik 14, 2015 Dzięki bardzo chłopaki, teraz rozumiem o co chodzi i dlaczego tak a nie inaczej. Skoro musi być int a return 0; jest dodawany domyślnie to nie mam więcej pytań i wszystko jest jasne. Poprostu nie wiedziałem o tym obowiązkowym typie funkcji main() jakim jest int. Sądziłem że tak jak w C++ można zmienić na dowolny. Cytuj Udostępnij ten post Link to post Share on other sites
Grievous1990 4 Październik 14, 2015 Wszystko mi działa, problemy miałem przez własne gapiostwo i niezrozumienie tematu. Polecam usunąć moje posty żeby nie zaśmiecały tematu. Cytuj Udostępnij ten post Link to post Share on other sites
Treker 1735 Październik 14, 2015 Grievous1990, napisz co konkretnie zrobiłeś źle. Pewnie pomoże to innym osobom, które popełnią taki błąd. Cytuj Udostępnij ten post Link to post Share on other sites
Grievous1990 4 Październik 15, 2015 Właśnie w tym rzecz, że sam nie wiem co źle zrobiłem, najprawdopodobniej źle przekopiowałem kod programu. Główny problem dotyczył pierwszego programu z części kursu o GPIO- kompilował się i uruchomienie nie wywoływało błędów, ale dioda nie migała. Błąd pojawiał się przy uruchomieniu debuggera. Zasugerowałem się informacją z konsoli "shutdown command invoked" (pojawiająca się po run, a nie debug) i uznałem, że coś mam nie tak ze środowiskiem. Niestety usunąłem cały tamten projekt, więc nie mam możliwości sprawdzić co spartaczyłem. Tak jak napisałem, moje gapiostwo i ogólnie jestem nowy w tych tematach. Wcześniej programowałem tylko 8051 na laboratoriach na studiach i to w assemblerze bez zaawansowanych środowisk programistycznych. EDIT: Przestroga dla innych nowych: jak coś nie działa, to na 99% macie błąd w kodzie. Ja zrobiłem błąd przy zwykłym ctrl-c ctrl-v Cytuj Udostępnij ten post Link to post Share on other sites
nox 0 Październik 17, 2015 A ja jestem na początku konfiguracji. Usunąłem katalog utilities i usunąłem wpis: #include "stm32f1xx_nucleo.h" z main.c Po skompilowaniu kodu wyrzuca mi informację: Chciałbym poprosić o pomoc. Cytuj Udostępnij ten post Link to post Share on other sites
Grievous1990 4 Październik 17, 2015 nox, Chyba natrafiłem na taki sam problem. Zapisz zmiany w pliku main.c i spróbuj jeszcze raz skompilować Cytuj Udostępnij ten post Link to post Share on other sites
nox 0 Październik 17, 2015 Faktycznie pomogło - dzięki Kompilacja przechodzi ale zwraca mi jeszcze jeden warning Może wiecie jak się tego pozbyć? Cytuj Udostępnij ten post Link to post Share on other sites
Treker 1735 Październik 18, 2015 nox, w jakim katalogu masz zapisany projekt? Cytuj Udostępnij ten post Link to post Share on other sites
nox 0 Październik 20, 2015 nox, w jakim katalogu masz zapisany projekt? Mój katalog to: c:\Users\Nox\workspace\proba3 Cytuj Udostępnij ten post Link to post Share on other sites
Polecacz 101 Zarejestruj się lub zaloguj, aby ukryć tę reklamę. Produkcja i montaż PCB - wybierz sprawdzone PCBWay! • Darmowe płytki dla studentów i projektów non-profit • Tylko 5$ za 10 prototypów PCB w 24 godziny • Usługa projektowania PCB na zlecenie • Montaż PCB od 30$ + bezpłatna dostawa i szablony • Darmowe narzędzie do podglądu plików Gerber Zobacz również » Film z fabryki PCBWay