Skocz do zawartości

Elvis

Użytkownicy
  • Zawartość

    2283
  • Rejestracja

  • Ostatnio

  • Wygrane dni

    157

Wszystko napisane przez Elvis

  1. Elvis

    Program magazynowy Arduino

    Chyba błąd jest tutaj: INKL(); Numer = kod; Numer = 0; Miało być raczej: kod = Numer To samo jest dalej: INKL(); Numer = szt;
  2. W niniejszym artykule chciałbym opisać krótko jak za pomocą zestawu ElbertV2 uzyskać obraz na monitorze VGA. Moje rozwiązanie nie jest idealne, pojawiają się problemy z pierwszą linią i kolumną, o czym pisałem w wątku: https://www.forbot.pl/forum/topics51/przesuniety-obraz-na-monitorze-vga-vt14911.htm, więc jeśli ktoś ma pomysł na rozwinięcie, udoskonalenie, czy zwykłe poprawienie kodu, proszę śmiało pisać Warto przy okazji zwrócić uwagę, że ten projekt pokazuje zalety FPGA w porównaniu z mikrokontrolerami. Przykładowy sterownik zrealizujemy za pomocą niewielkiej części zasobów naszego i tak niewielkiego układu. Wygenerowanie obrazu za pomocą mikrokontrolera, o ile w ogóle możliwe zajmowałoby ogromną ilość jego zasobów. Projekt początkowo bazował na blogu, którego link podaje producent płytki (Numato): https://langster1980.blogspot.co.uk/2015/08/driving-vga-port-using-elbert-v2-and_7.html Zachęcam do porównania obu rozwiązań. Interfejs VGA Standard VGA używa sygnału analogowego do sterowania wyświetlaniem obrazu (w odróżnieniu od np. HDMI). Aby wyświetlić obraz musimy odpowiednio wysterować linie: • hsync - synchronizacja pozioma • vsync - synchronizacja pionowa • red, green, blue - kolor aktualnego piksela Podłączenie do zestawu ElbertV2 znajdziemy w jego dokumentacji: Rezystory na liniach kolorów realizują prosty przetwornik cyfrowo-analogowy. Obraz na monitorze VGA Tradycyjne monitory używały kineskopów, gdzie obraz był generowany na warstwie luminoforu za pomocą wiązki elektronow. W danej chwili wiązka elektronów była z ogniskowana w jednym punkcie ekranu tworzącym piksel. Elekromagnesy pozwalały na odchylenie tej wiązki i skierowanie w konkretny punkt na ekranie. Cykliczne "przemiatanie" obrazu sprawiało, że użytkownik widział stailny obraz. Obecnie monitory LCD właściwie wyparły tradycyjne CRT, jednak sposób sterowania pozostał niezmieniony. Obraz składa się z poziomych linii, każda linia z jednakowej liczby pikseli. Po wyświetleniu linii generowane są odpowiednie sygnały synchronizacji poziomej (hsync), a po narysowaniu ostatniej linii, sygnał synchronizacji pionowej (vsync). Aby uzyskać obraz na monitorze musimy więc wygenerować odpowiednie sygnały na liniach hsync, vsync oraz sam obraz za pomocą linii koloru. Dokładniejszy opis sterowania liniami znajdziemy na stronie: https://eewiki.net/pages/viewpage.action?pageId=15925278. Poniżej widzimy obrazek pobrany właśnie stamtąd: Sygnał synchronizacji ma ujemną polaryzację, czyli aktywny stan to logiczne "0". Jak widzimy podczas rysowania linii najpierw generowane są piksele obrazu, następnie mała przerwa (Front Porch), sygnał synchronizacji (Sync Pulse) oraz kolejna przerwa (Back Porch). Po niej rysowana jest kolejna linia. Synchronizacja pionowa przebiega podobnie, chociaż czasy są znacznie dłuższe. Rozdzielczość obrazu Obraz na ekranie może być generowany w różnych trybach - z różną częstotliwością odświerzania oraz rozdzielczością. Jako przykład wykorzystamy tryb o rozdzielczości 640 x 480 pikseli, z odświerzaniem 60Hz. Parametry dla tego trybu znajdziemy w tabeli na stronie podlinkowanej wyżej oraz w bardzo wielu miejscach w sieci. W każdym razie chcielibyśmy uzyskać następujące parametry: • Pixel clock: 25.175 MHz Synchronizacja pozioma: • Front Porch: 16 • Sync Pulse: 96 • Back Porch: 48 Synchronizacja pionowa: • Front Porch: 10 • Sync Pulse: 2 • Back Porch: 33 Pętla PLL W dokumentacji zestawu ElbertV2 znajdziemy informację o częstotliwości zegara taktującego, wynosi ona 12 MHz. Jak widzimy jest to za mało, ponieważ do wyświetlania potrzebny jest nam zegar o wyższej częstotliwości. Na szczęście Spartan3A, w który nasz zestaw jest wyposażony w moduły pętli PLL, dzięki której możemy zwiększyć częstotliwość pracy układu. Tworzymy nowe projekt, a następnie dodajemy nowy plik źródłowy (New Source). Jako typ projektu wybieramy "IP (CORE Generator & Architecture Wizard)". Następnie odnajdujemy komponent "Single DCM_SP". Przechodzimy przez kolejne opcja generatora. Następnie otworzy się nowe okno, tym razem z opcjami konfiguracji modułu. W pierwszym oknie wprowadzamy częstotliwość zegara, czyli 12MHz. Wybieramy również sygnał CLKFX: Opcje w kolejnych oknach możemy zostawić niezmienione, aż dojdziemy do ustawień generowanego zegara. Tutaj wprowadzamy docelową częstotliwość, czyli 25.175 MHz. Teraz możemy zakończyć konfigurację komponentu, powinniśmy zobaczyć nowy plik dodany do projektu. Jeśli będziemy chcieli, zawsze możemy zmienić konfigurację dwukrotnie klikając na tym pliku. Konfiguracja pinów Każdy projekt zawiera definicję używanych pinów. Do sterowania VGA musimy zdefinować podłączenia linii synchornizacji, kolorów oraz zegara dla samego układu Spartan. Plik ma postać: NET "clk" LOC = P129 | IOSTANDARD = LVCMOS33 | PERIOD = 12MHz; NET "hsync" LOC = P93 | IOSTANDARD = LVCMOS33 | SLEW = SLOW | DRIVE = 12; NET "vsync" LOC = P92 | IOSTANDARD = LVCMOS33 | SLEW = SLOW | DRIVE = 12; NET "blue[2]" LOC = P98 | IOSTANDARD = LVCMOS33 | SLEW = SLOW | DRIVE = 12; NET "blue[1]" LOC = P96 | IOSTANDARD = LVCMOS33 | SLEW = SLOW | DRIVE = 12; NET "green[2]" LOC = P102 | IOSTANDARD = LVCMOS33 | SLEW = SLOW | DRIVE = 12; NET "green[1]" LOC = P101 | IOSTANDARD = LVCMOS33 | SLEW = SLOW | DRIVE = 12; NET "green[0]" LOC = P99 | IOSTANDARD = LVCMOS33 | SLEW = SLOW | DRIVE = 12; NET "red[2]" LOC = P105 | IOSTANDARD = LVCMOS33 | SLEW = SLOW | DRIVE = 12; NET "red[1]" LOC = P104 | IOSTANDARD = LVCMOS33 | SLEW = SLOW | DRIVE = 12; NET "red[0]" LOC = P103 | IOSTANDARD = LVCMOS33 | SLEW = SLOW | DRIVE = 12; Generowanie obrazu Zacznijmy niejako od końca, czyli od generowania danych obrazu. Moduł, który potrzebujemy będzie dostawał współrzęne piksela i zwracał jego kolor: library IEEE; use IEEE.STD_LOGIC_1164.ALL; use IEEE.NUMERIC_STD.ALL; entity display is port( clk : in std_logic; x : in integer range 0 to 1023; y : in integer range 0 to 1023; color : out std_logic_vector(7 downto 0)); end display; architecture Behavioral of display is begin process (clk) is begin if rising_edge(clk) then if (x < 640) and (y < 480) then if (x = 0) or (x = 639) or (y = 0) or (y = 479) then -- biala ramka color <= x"ff"; else if (y < 160) then -- czerwony pasek na gorze color <= x"e0"; elsif (y < 320) then -- zielony w srodku color <= x"1c"; else -- niebieski na dole color <= x"03"; end if; end if; else color <= x"00"; end if; end if; end process; end Behavioral; Aktualny kod to pierwszy i prosty test. W przyszłości należałoby go zastąpić czymś bardziej użytecznym, np. wyświetlaniem stanu gry (jeśli np. napiszemy grę w pong-a), albo użyć pamięci blokowej i wyświetlać zgromadzone w niej dane. Na razie na sztywno zapisany "obraz kontrolny" musi nam wystarczyć. Sygnały synchronizacji Kolejny krok to napisanie modułu generującego sygnały synchronizacji oraz zliczającego pozycję aktualnego piksela. Na ekranie rysowane są 640 piksele w linii, ale zliczanie współrzędnej x odbywa się od 0 do 799 - nadmiarowe wartości są używane do stwerowania sygnałem synchronizacji. Podobnie jest w przypadku synchronizacji pionowej: zmienna y obejmuje wartości od 0 do 525, ale tylko 480 linii jest widocznych. Warto zwrócić uwagę na "sztuczkę" ze zmiennymi next_x oraz next_y. Moduł odpowiedzialny za określanie kolorów pikseli musi ustawić dane niejako kolejnego piksela, podczas gdy wyświetlany jest poprzedni. Stąd użycie dwóch par zmiennych (z next_ i bez). library IEEE; use IEEE.STD_LOGIC_1164.ALL; use IEEE.NUMERIC_STD.ALL; entity timings is port( clk : in std_logic; hsync : out std_logic; vsync : out std_logic; red : out std_logic_vector(2 downto 0); green : out std_logic_vector(2 downto 0); blue : out std_logic_vector(2 downto 1) ); end timings; architecture Behavioral of timings is signal x : integer range 0 to 1023; signal y : integer range 0 to 1023; signal next_x : integer range 0 to 1023; signal next_y : integer range 0 to 1023; signal rgb : std_logic_vector(7 downto 0); begin timings: process (clk) is begin if rising_edge(clk) then if (next_x = 799) then next_x <= 0; if (next_y = 525) then next_y <= 0; else next_y <= next_y + 1; end if; else next_x <= next_x + 1; end if; if (y >= 490) and (y < 492) then vsync <= '0'; else vsync <= '1'; end if; if (x >= 656) and (x < 752) then hsync <= '0'; else hsync <= '1'; end if; x <= next_x; y <= next_y; end if; end process; fb: entity display port map (clk => clk, x => next_x, y => next_y, color => rgb); red <= rgb(7 downto 5); green <= rgb(4 downto 2); blue <= rgb(1 downto 0); end Behavioral; Główny moduł Teraz gdy mamy już wszystkie elementy układanki przygotowane pozostaje połączyć je w moduł główny. Musimy w nim utorzyć instancje komponentu zegara (pll) oraz sterownika obrazu (timinig). Kod jest krótki i chyba nie wymaga komentarza: library IEEE; use IEEE.STD_LOGIC_1164.ALL; entity vga_disp is port( clk : in std_logic; hsync : out std_logic; vsync : out std_logic; red : out std_logic_vector(2 downto 0); green : out std_logic_vector(2 downto 0); blue : out std_logic_vector(2 downto 1)); end vga_disp; architecture Behavioral of vga_disp is component pll is port ( CLKIN_IN : in std_logic; CLKFX_OUT : out std_logic); end component; signal clk_pll : std_logic; begin pixel_clock : pll port map (CLKIN_IN => clk, CLKFX_OUT => clk_pll); display : entity timings port map (clk => clk_pll, hsync => hsync, vsync => vsync, red => red, green => green, blue => blue); end Behavioral; Teraz pozostaje zsyntetyzować projekt, wgrać i cieszyć się obrazem na monitorze VGA. Dalsze plany Opisany projekt można dalej rozbudowywać. Użycie zasobów Elbert-a jest na poziomie 2%, więc jeszcze sporo można byłoby dodać, np. wbudowany mikrokontroler, obsługę UART-a, pamięć obrazu itd.
  3. Jeśli faktycznie generowane jest _estack = 0x20009FFF; to straszna bieda. Cały stos jest źle wyrównywany, aż dziwne że cokolwiek wtedy działa.
  4. Elvis

    Projekt terrarium Raspberry Pi

    A ja bym proponował Autorowi wątku dwa razy się zastanowić, czy na pewno ma wiedzę i umiejętności niezbędne do wykonania takiego projektu. Niezależnie od przyczyny, awaria zarówno sprzętu, jak i oprogramowania może prowadzić zarówno do pożaru, jak i śmierci zwierząt (nawet jeśli to gadziny). A to jest w dzisiejszych czasach bywa nielegalne https://www.tvp.info/41702756/gilotynowal-karpie-bez-ogluszania-jest-wyrok
  5. Z tego co pamiętam założyłem że skoro projekt jest sprawdzony to wszystko powinno działać Na płytce DE1-SoC pamięć DDR działa na pewno, używałem jej jako pamięci dla wbudowanego Cortex-A9 do uruchamiania linuksa i problemów nie było. Miałem za to mnóstwo problemów z jtag-iem i kiedy się w końcu połączyłem właściwie odechciało mi się tym bawić.
  6. Na stronie Briey-a (https://github.com/SpinalHDL/VexRiscv#briey-soc) jest link do gotowych projektów dla Terasic DE0-Nano i DE1-SoC: https://drive.google.com/drive/folders/0B-CqLXDTaMbKZGdJZlZ5THAxRTQ Testowałem na obu, chociaż więcej na DE0-Nano: https://www.terasic.com.tw/cgi-bin/page/archive.pl?No=593 DE1-SoC: https://www.terasic.com.tw/cgi-bin/page/archive.pl?Language=English&amp;CategoryNo=165&amp;No=836 Udało mi się uruchomić projekt i połączyć używając JTAG-a. Było to trochę czasu temu, więc nie pamiętam szczegółów, chyba był problem z wgraniem programu, albo jego uruchomieniem. W każdym razie na tym skończyłem i uznałem, że do RISC-V lepiej użyć gotowego układu, np. K210.
  7. @sergiuszf zupełnie nie rozumiem dlaczego jesteś tak nerwowy na punkcie krytyki. Na tym polega działanie internetu, a forum w szczególności, że to co prezentujesz jednym się podoba, a innym nie - i dzięki dyskusji można wymieniać poglądy. Więc masz takie samo prawo pisać że bardzo fajnie jest przerabiać butelki na cokolwiek, jak i ja pisać że jest to zupełnie bez sensu. Natomiast co do tego całego urządzenia, to nie myślałeś o ogłoszeniu kampanii na kickstarterze, czy innym portalu start-up owym? Mógłbyś wtedy dokładniej zbadać rynek, zdobyć fundusze na zaprojektowanie, przebadanie oraz wyprodukowanie urządzenia zgodnie z przyjętymi zasadami. Może nawet na porządną reklamę by wystarczyło.
  8. Elvis

    Jak pisać biblioteki na Arduino?

    I tutaj dochodzimy do tego czym różnią się biblioteki od zwykłych progamów. Każdy sposób będzie poprawny - jeśli jako kryterium przyjmiemy po prostu działanie programu, to ten z 144x kopiuj-wklej też. Ale niektóre sposoby są lepsze, niż inne. W przypadku małego, krótkiego programu wybór sposobu implementacji często nie ma znaczenia. Natomiast w przypadku biblioteki podjęte decyzje mogą mieć długofalowe konsekwencje - jak chodziażby interfejs funkcji printf, który od początku był zły, ale teraz jego zmiana jest właściwie niemożliwa.
  9. Elvis

    Jak pisać biblioteki na Arduino?

    To jest straszne, używanie kopiuj-wklej powinno być zakazane, a zakaz wpisany do konstytucji. Mam taśmę 144 led-ów, czyli powinienem tyle razy skopiować funkcję start... A może dałoby się ten kod poprawić i uniknąć kopiowania kodu? To takie małe zadanie domowe.
  10. Skoro ten wątek dotyczy różnych płytek związanych z RISC-V, to może podam link do interesującego projektu lowRISC: https://www.lowrisc.org/ Autorzy postanowili być nieco ambitniejsi, niż projektanci K210 i lowRISC ma za cel przygotowanie SoC-a zdolnego do uruchomienia Linux-a. Prototypową wersję lowRISC możemy uruchomić sami, jeśli mamy pod ręką płytkę NEXYS 4 DDR https://reference.digilentinc.com/reference/programmable-logic/nexys-4-ddr/start Pełny opis instalacji jest tutaj: https://www.lowrisc.org/docs/getting-started/ Przetestowałem i wygląda na to, że faktycznie na RISC-V może działać linux Prędkość działania nie powala, ale użycie RISC-V może być interesującą alternatywą dla Microblaze.
  11. @BainThru podałem linka do gotowej płytki, ale przecież nie musisz jej używać w swoim robocie - możesz za to "podpatrzeć", jak takie rozwiązanie zostało zrobione. Na stronie ReSpeaker-a znajdziesz nawet opis gotowej biblioteki, która pozwala na lokalizację źródła dźwięku.
  12. Może coś takiego: http://wiki.seeedstudio.com/ReSpeaker_4_Mic_Array_for_Raspberry_Pi/
  13. Elvis

    Mój układ optoizolacji

    Masz jak najbardziej rację, że układ nie jest piękny - na pewno też nie pasuje do sztuki, albo chociaż do sztuki uczonej na początku studiów. Z drugiej strony takie układy niektórzy popełniają w produkcyjnych urządzeniach - i to nie tylko chińczycy, ostatnio było kilka razy na forum o podłączaniu led-ów bezpośrednio do mikrokontrolera, czy zasilania. W tym układzie nie wiem, czy było to zbieg okoliczności, czy właśnie dokładne obliczenia - w każdym razie prąd w fototranzystorze duży nie popłynie, a BD911 wytrzyma znacznie więcej. Więc oczywiście układ należałoby zaprojektować inaczej, ale nadal nie jest to aż tak strasznie złe jak się na pierwszy rzut oka wydaje.
  14. Elvis

    Mój układ optoizolacji

    A moim zdaniem ten układ będzie tak samo dobrze działał przy naładowanej baterii powiedzmy do 1,6V - a nawet 2V. Proponuję na początek popatrzeć na charakterystykę zastosowanego fototranzystora - on po prostu większego prądu niż powiedzmy 30mA z siebie nie wypuści. Natomiast tranzystor BD911 nawet dziesięciokrotnie większy prąd na bazę przyjmie bez problemu. Jest to więc bardzo niezgrabny układ, ale w tym fragmencie raczej nie całkiem niepoprawny. Jak dla mnie błąd jest po drugiej stronie - transoptor ma diodę podłączoną bezpośrednio do Arduino. A to działa tylko dlatego że wydajność prądowa mikroprocesora jest niewielka - inaczej popsułby się i procek i dioda.
  15. Trochę się pogubiłem. Miało być urządzenie DIY, w tym dziale jest wpis. Okazało się że jednak produkuje je firma, a właściwie to nie produkuje, bo to prototyp (a firma nadal nieznana). Trochę mnie dziwią i niepokoją te oferty sprzedaży, ale skoro to legalne, to pozostaje mi uwierzyć. Ja też wiem ile trwa i kosztuje opracowanie wyrobu zgodnie z wymaganiami dyrektyw unijnych - i tym bardziej mnie martwi, gdy widzę że inni starają się chodzić na skróty i likwidować "bezsensowne koszty". Nie wiem dlaczego ten wątek wzbudził tyle emocji - jeśli ktoś chce legalnie produkować i sprzedawać urządzenia, to powinien przestrzegać prawa. Sprzedawanie urządzeń, które wymagają CE bez odpowiedniego oznakowania jest przestępstwem o ile się orientuję, ale jeśli tak można to chętnie się o tym dowiem.
  16. Może mi się coś pomyliło, wydawało mi się że z układem Spartan3 są jakieś problemy. Xilinx nawet wydał "aktualizację" do ISE żeby obsługiwać Spartan6: https://www.xilinx.com/support/download/index.html/content/xilinx/en/downloadNav/design-tools.html
  17. A ISE w ogóle działa pod windows 10?
  18. Chciałbym tylko zwrócić uwagę, że wprowadzając wyrób na rynek unijny trzeba postępować zgodnie z wymogami odpowiednich dyrektyw. Z mojej strony było tylko pytanie, czy wyrób je spełnia oraz czy został oznaczony znakiem CE. Nie jest to w żadnym wypadku złośliwość, po prostu pytanie, na które jak na razie nie otrzymałem odpowiedzi. Zapytałem również o producenta, bo to chyba nie tajemnica - natomiast numer telefonu, czy adres email, to nie identyfikacja. Do tego służy regon, pesel, czy nip - albo chociaż nazwa firmy. I znowu to nie złośliwość, po prostu chciałem wiedzieć o jakiej firmie czy osobie rozmawiamy.
  19. Wydaje mi się, że trochę się nie zrozumieliśmy. Nie miałem zamiaru dokuczać Ci, ani wypisywać złośliwości. Chciałem tylko, żebyś był wobec czytleników tego forum szczery. Jeśli urządzenie, które opisujesz jest amatorską konstrukcją z gatunku DIY, to moje gratulacje - super urządzenie. Chociaż jak dla mnie bez sensu, ale taki jest urok DIY - to co budujemy dla większości osób sensu nie ma, czy to line-follower, czy też komputer oparty o 40-letni procesor. Natomiast jeśli opisujesz komercyjny produkt, który wynalazłeś i zaprojektowałeś to też bardzo dobrze. Cieszę się że rozwijasz własny biznes i chcesz nam o tym napisać. Napisz tylko wszystko szczerze i otwarcie - jak się nazywa firma, podaj numer NIP / VAT, potwierdź, że Twoje urządzenie jest bezpieczne, upewnij potencjalnych klientów, że to co produkujesz zostało zaprojektowane i wyprodukowane w sposób legalny. Zakładam, że skoro wprowadzasz na rynek UE swój wyrób, potwierdzenie zgodności z wymogami, czyli deklaracja CE nie jest niczym dziwnym - no chyba że reklamujesz tutaj nielegalnie sprzedawane produkty, ale tego byś chyba nie zrobił, prawda?
  20. Ja próbowałem uruchomić gotowego Briey-a zsyntetyzowanego na płytki Terasic-a, ale nic mi z tego nie wyszło. Stad była moja propozycja zaczęcia od czegoś łatwiejszego A swoją drogą, udało Ci się uruchomić tytułowe Anlogic EG4S20? Ja właśnie dostałem do nich programator, tylko nie mam czasu nawet sprawdzić czy to działa
  21. Wydaje mi się, że Murax to też RISC-V, tylko ma mniej peryferiów. Nie ma wyświetlacza, ani pamięci DDR. Ale można to później dodać - do pierwszego uruchomienia migającej diody na RISC-V Murax powinien wystarczyć.
  22. A może łatwiej zacząć od czegoś łatwiejszego? Z tego co widziałem w tym samym katalogu jest Murax.scala - planowałem się nim pobawić, ale jakoś czasu zabrakło.
  23. Poszperałem trochę w internecie i z tego co widzę opisywane urządzenie nie ma nic wspólnego z DIY. Pod adresem (https://www.youtube.com/watch?v=_qBi3VkmSoU) Wniosek jest taki, że ten cały wątek nie dotyczy DIY, ale jest darmową reklamą komercyjnego produktu, który jest dostępny w sprzedaży: https://www.gumtree.pl/a-elektronika-inne/oborniki/amatorska-maszynka-do-domowej-produkcji-filamentu-do-druku-3d-z-butelek-pet/1004587119460912119401109 Mam więc prośbę do administratorów o oznaczenie wątku jako reklamy oraz pobranie odpowiednich opłat od jej autora. Natomiast producenta proszę o podanie informacji o zgodności z CE (https://pl.wikipedia.org/wiki/Deklaracja_zgodności) - proszę o potwierdzenie, że prezentowane oraz wprowadzane do sprzedaży urządzenie jest zgodne oraz odpowiednio oznakowane. Przy okazji warto byłoby podać kto jest producentem tego urządzenia, bo jak rozumiem sprzedaż odbywa się po wystawieniu odpowiednich dokumentów oraz odprowadzeniu należnych podatków.
  24. @slon nie wiem dlaczego u Ciebie nie działa, ciężko mi jest telepatycznie odgadnąć co np. będzie wyświetlone po kilknięciu na przycisk "Details >>". Spróbowałem postępować tak jak nakazuje kurs, po kilku chwilach okazało się że CubeMX usuwa zawartość skryptu linkera - to tłumaczy dlaczego program ma 8 bajtów i nie działa. Co jeszcze CubeMX psuje tego nie wiem, ja z nim miałem różne przejścia. Od zawieszania po wstawianie \n\t na końcu linijek - nie jako kody, ale dokładnie takie napisy.
  25. Ok, jak dla mnie sytuacja jest już jasna. Utworzyłem projekt zgodnie z kursem, dodałem diody wszystko było pięknie. Później dodałem przycisk i długość programu spadła do 8 bajtów. Błąd pojawia się w losowym momencie, w każdym razie takie podejście: wygenerować kod, pozmieniać, wygenerować znowu po prostu nie działa. Jak wiele razy już pisałem CubeMX jest zupełnie nic nie wart, a używanie go ma w sobie coś z uroku rosyjskiej ruletki. To co się dzieje nie ma związku z kompatybilnością, ani SW4 po prostu programiści CubeMX nie potrafią napisać dobrego programu, więc co chwila są błędy - teraz jest taki, który kasuje zawartość pliku linkera, za chwilę będzie inny. Proponuję poszukać pliku o rozszerzeniu .ld - normalnie ma ok 6k, a jak się kilka razy wygeneruje projekt do jego długość spada do zera. Dlatego i skompilowany program jest krótki... Rozwiązaniem jest użycie starszej wersji CubeMX, poczekanie na następną - może będzie lepsza. Ale najlepiej już teraz wyrzucić CubeMX do kosza i pisać programy samemu. Przy okazji - czy ktoś zwraca uwagę na komentarz w wygenerowanym przez CubeMX pliku? Proponuję dokładnie przeczytać... jest tam coś o prawach autorskich, które ma ST - w tym do naszego programu, jeśli go dopisujemy do wygenerowanego szablonu. Całkiem sprytne posunięcie ze strony tego ST
×