Czy są jakies wady takiego zapisu w porównaniu do poczciwego eeproma? Kasować można tylko całą stronę, więc jeśli często uaktualniasz małe fragmenty to stosuje się metodę emulacji EEPROMu opisaną choćby w notach aplikacyjnych od ST.
zepsuta pamięć
Żeby był dostęp bez opóźnień z wielu źródeł. (CPU/DMA/...) CPU nie musi czekać na SRAM1 kiedy DMA zajmuje się SRAM2. Do pamięci CCM ma dostęp tylko CPU. Jest to pamięć tylko na dane.
Coś naplątałeś... Aby uzywać malloca bez dziwnych errorów, musisz zadeklarować odpowiednią ilość miejsca na stertę . Co z tego, ze twoje zmienne zajmują niewiele ramu, skoro najpewniej ustawiles sobie parę kB sterty, i gdy przekroczysz te pare kB, program ci sie natychmiast wykrzaczy, bo oczywiście najpewniej nigdy nie sprawdzasz, czy malloc przypadkiem...
Proszę bardzo.
Z kodu wynika pewna ciekawa rzecz... Otóż z tego co widzę stos znajduje się... w środku sekcji .bss - nie wiem czy to normalne, ale nie sądzę... 4\/3!!
To trzeba w linkerze dopisać jeszcze jedną pamięć ?
bez apelacyjne operator extern powinno się tam znaleźć. To zleży jak przebiega proces kompilacji. Jeżeli kompilujemy wszystkie pliki na raz to w sumie ta dyrektywa o której wspominasz działa tak jak oczekujesz i rzeczywiście zmienna jest zadeklarowana tylko raz. Natomiast jak kompilujemy każdy plik źródłowy osobno do postaci pośredniej i później linkujemy...
Widać, że coś się odczytało i jest czysta pamięć. Nowy układ nie będzie zabezpieczony przed odczytem. A jeszcze dopytam, z tego starego STM32 zero szans żeby coś odczytać? Jedyne co o nim wiem że robi zwarcie pomiędzy 3.3V a GND. Jeżeli jakiś np. port jest uszkodzony nie oznacza to, że na 100% rdzeń się uszkodził i interfejs do pamięci flash również....
Nie piszesz o Cortex-M, a o STM32 - popraw temat. U innych producentów uC wygląda to zupełnie inaczej. Pamięć spod adresu 0x08000000 w normalnym trybie pracy STM32 zostaje odwzorowana również pod adresem 0 - jest dostępna do odczytu (tylko) pod dwoma adresami.
//wlaczenie opoznienia FLASH FLASH ->ACR |= (FLASH_ACR_LATENCY_1); Dla częstotliwości 72 MHz, żeby pamięć Flash działała musisz ustawić jej dwa cykle opóźnienia a nie jeden.
Ale... float to przecież bity w pamięci! To co one przedstawiają, powinno cię mało obchodzić, gdy chcesz to zapisać w pamięć nie ulotną... Jeśli float ma 4 bajty (a chyba ma), to wystarczy dobrać się do tych czterech bajtów intem... [syntax=C] float ulamek=54.75701; unsigned int *ple=(unsigned int*)&ulamek; ZapiszZmienną([adres],*ple); //tu wlasnie...
Moim zdaniem nie jest to wina kompilatora. Powinieneś sprawdzić rozmiar sterty, ponieważ funkcja malloc właśnie w tym obszarze rezerwuje pamięć.
Ponieważ systemy są wielozadanione i program nie jest sam. Dodatkowo jest pamięć wirtualna.
Wprawdzie program mojego bootloadera napisałem korzystając z bibliotek ST, ale odblokowanie dowolnych stron FLASH'a do zapisu bardzo ładnie działa i nie mam z nim najmniejszych problemów. Zrobiłem to w następujący sposób (kolejność jest ważna): 1. Odblokowanie FLASH'a: FLASH_Unlock(); 2. Skopiowanie ustawień bitów rejestru USER OPTION BYTES: KopiaOBR...
Tak jak napisałem jeżeli nie implementujesz MSD przez USB to nie ma sensu. Inaczej robisz sobie na około. Pozdrawiam
o super. Jak to teraz podłączyć i uruchomić pod jakiegoś AVRa? Się uparłeś z tymi AVRami :) Naprawdę, jeśli masz wypasionego ARMa, to dodanie AVR niczemu nie służy. Co innego, gdyby projekt dało się całkowicie zrealizować na AVR. Ale konkretnie - wybierz AVR z magistralą pamięci zewnętrznej, z klasycznych AVR to masz jakieś ATMega128 lub nowsze serie....
Connect under reset, reset: hardware, reset after connect, SWD (a nie JTAG), częStotliwość poniżej 1 MHz i musi zadziałać. Możesz jeszcze spróbować nacisnąć guzik reset podczas łączenia. I ZAWSZE zachowuj funkcję SWD na obu nogach (AF0), nie ustawiaj ich jako GPIO ani nic innego. Spróbuj zrobić to pod Keil MDK-ARM (przynajmniej skasować pamięć).
Być może, że twoje opóźnienie wcale nie jest takie jak myślisz (skoro 3ms to typowy czas to 5ms spokojnie powinno wystarczyć). Zauważ, że jeśli zapisujesz pierwszą stronę to kolejną możesz zapisać jeśli wysłanie control byte zwróci ACK jeśli nie to pamięć jest zajęta i należy ponownie wysłać start i control byte. Co jeśli najpierw zapiszesz druga stronę...
Cześć, W wolnym czasie uczę się układów STM32 na płytce STM32_Smart_v2 (https://stm32-base.org/boards/STM32F103... Próbuję uruchomić pamięć eeprom, która jest na tej płytce na podstawie kursu (https://forbot.pl/blog/kurs-stm32-11-i2... Niestety program nie działa - funkcja I2C_EVENT zwraca error....
Witam Rozumiem, że chcesz aby cały kod wynikowy został umieszczony w pamięci RAM. Żeby tego dokonać należy zmienić adres sekcji ROM w skrypcie linkera: "rom (rx): org = 0x08000000, len = 128k" na pamięć RAM(zaczyna się od adresu 0x20000000 dla stm32). Pamięć RAM również należy przesunąć o odpowiedni adres. Jeżeli masz w kodzie przerwania to nie zapomnij...
Ok, to tak działa - po włączeniu zabezpieczenia Read Out Protection - Enable i Apply, procesor staje się niedostępny dla odczytu pamięci flash. Po ponownym odbezpieczeniu - Disable - Apply, procesor się odblokowuje, ale zostaje skasowana cała pamięć flash.
To od razu zapytam, czy przy STM32F103VC można obsłużyć pamięć nand flash?
Witam, podłączyłem kość pamięci 23K256 do SPI3 układu STM32F107. Procedura konfiguracji SPI: void RAM_Config(void) { GPIO_InitTypeDef GPIO_InitStructure; SPI_InitTypeDef SPI_InitStructure; RCC_APB2PeriphClockCmd(RCC_APB2Perip... , ENABLE); GPIO_PinRemapConfig(GPIO_Remap_SPI3, ENABLE); RCC_APB1PeriphClockCmd(RCC_APB1Perip...
Ja w takich przypadkach stosuję metodę którą na swoje potrzeby nazwałem "split objects". Obiekt u mnie składa się po prostu z dwóch części - stałej i zmiennej. Zwykle "główny" obiekt jest stały, a ten "zmienny" fragment jest podrzędny, jednak są sytuacje w których robię to odwrotnie, głównie wynikające z polimorfizmu lub dlatego że łatwiej/lepiej jest...
Zacznijmy od tego, że OpenOCD nie uruchamia się poprawie, wiec warto byłoby dochodzić do sprawy "krok po kroku". Przede wszystkim plik lpc2xxx.cfg NIE JEST przeznaczony do uruchamiania bezpośredniego, należy ZAWSZE użyć któregoś z konkretnych plików. Tymczasowo możesz użyć pliku lpc2148.cfg, ale najlepiej przerób go sobie na lpc2146 - komentarze w środku...
OMG, ale po co ładujesz wciąż plik .bin... Załaduj po prostu plik .hex czy .elf - parametr offset nie ma wtedy żadnego znaczenia (jest ignorowany), bo pliki te zawierają adresy. Co do parametru "unlock" - jeśli masz układ z zablokowaną pamięcią, to ta komenda nie zadziała zawsze - jak widzisz - w niektórych układach po odblokowaniu pamięci konieczny...
Ale chyba Arduino nie ma USB, tylko zainstalowany port szeregowy na USB (może jeszcze kwestia, który model, ale Arduino Nano na pewno) - podłączenie do komputera Arduino przez USB to podłączenie portu szeregowego i komunikacja z Arduino poprzez ten port - komputer nie może "zobaczyć" Arduino jako pendrive-a. Natomiast można to zrobić z STM32F103C8T6...
Chyba nie chcesz powiedzieć, że każdy klawisz powyżej jest osobną bitmapą? [url=http://www.libpng.org/pub/png/pngap... możesz znaleźć użyteczne materiały. Większość jest na PC, ale dostępne źródła można przepisać na ARMa. Przyznam się, że nie sprawdziłem tego dokładnie kiedy szukałem dla siebie algorytmów, ponieważ z lenistwa zdecydowałem...
Jest to płytka STM32F103RB NUCLEO. Podpięcie pinu BOOT0 pod masę nic nie daje nadal program zanika Sprawdziłem pamięć flash poprzez STM32 ST-LINK Utility i jest w niej program aczkolwiek nie działa http://obrazki.elektroda.pl/5116944600_1... Dodam jeszcze, iż kiedy połączę się płytką w STM32 ST-LINK Utility to wciśnięcie przycisku reset...
1. W Debug Configuration zamień DBG (DSF) na Standard DBG (na samym dole). 2. W Startup, w pierwszym okienku, wpisz reset halt (razem!). 3. Wywal komendę exit. 4. Odblokowałeś pamięć FLASH STM32?
Witam. Zaopatrzyłem się niedawno w aplikację zwaną Flash loader demonstrator. Umożliwia ona m.in. zapis i odczyt pamięci programu mikrokontrolera STM32 przez bootloader poprzez RS232. Gdy chciałem odczytać pamięć flash i zapisać obraz pamięci w pliku hex mocno się zdziwiłem, gdyż plik miał rozmiar 319744 bajtów, a flash mojego STM32F103RB ma "tylko"...
pamięć wirtualna Pamięć wirtualna bez MMU? Niezłe wyzwanie.
Witajcie, właśnie się bawię pamięcią Flash w STM32F0DISCOVERY (chcę się nauczyć obsługi). Efekt? Chyba zablokowałem możliwość zapisu... Kod (dopiero się uczę, więc komentarze mogą zawierać błędy): [syntax=c]#include "stm32f0xx.h" #include "stm32f0_discovery.h" int main(void) { RCC -> AHBENR |= RCC_AHBENR_GPIOCEN;//LEDY GPIOC -> MODER |= GPIO_MODER_MODER8_0...
Znalazłem informację, że gwarantowana ilość zapisów to 1000. A nie wiem ile wcześniej była zapisywana ta pamięć. Jakie komendy powinny być ?
Witam. Mikrokontrolery STM32 mają w sobie embedded flash memory. Jest to pamięć EEPROM, NAND Flash czy NOR Flash? Nie znalazłem tego w manualu.
Tadzik85: Wygląda na to, że dziechu zmierzył dokładnie to, o co chodziło, a wyszło mu to, co przewidywałem. Ten sam kod (taka sama sekwencja instrukcji), piszący raz do bitband, drugi raz do tego samego rejestru/komórki ale przez zwykły dostęp - zapis 32-bitowy. Na zdrowy rozsądek - pamięć w mikrokontrolerze nie może mieć dostępu bitowego sama z siebie...
Dziękuję Panowie za pomoc. Opcja z podaniem "1" na Boot0 zadziałała, można wtedy wyczyścić pamięć przy pomocy jtaga.
Może pamięć się "zalock'owała" (ustawiły się przypadkiem flagi "option bytes") ? Mnie się to zdarzyło wielokrotnie. Do unlock'owania procesorów STM32 używam programatora J-Link i oprogramowania z firmy SEGGER a konkretnie "JLinkSTM32.exe". Jest to specjalnie napisany program do takich właśnie sytuacji. W ST-Linku powinien pomóc Masss Erase z programu...
Odkryłem, że zawsze podczas używania wskaźnika do zapisu adresy: [syntax=c]*( volatile uint8_t * )( Bank2 | Address ) = x;[/syntax] np. podczas próby zapisu do pamięci uC się zawiesza. Chciał się zapytać co może być przyczyną tego zjawiska ? A może bym wymienił pamięć na nową ?
To bardzo proste i opisane w DSie. Są rózne tryby. Możesz podłączyć tylko 8 linii danych i wtedy musisz odczytywać po jednym bajcie aby oczytać całe słowo z pamięci (16 bitów). Wtedy używasz trybu 2 Możesz podłączyć tylko 16 linii danych odczytujesz całe słowo z pamięci (16 bitów). Wtedy używasz trybu 1 Analogicznie jest z trybami pisania - których...
Tak, da się. Zgrana pamięć ma niektóre komórki pamięci wykasowane (ustawione 0xFFFFFFFF)...
Wg dokumentacji MINIMALNA wytrzymałość pamięci w STM32 to 10k cykli. Jest taki jeden wyjątek: STM32F030 Można zerknąć np. do datasheeta (DM00088500), tabela 38. Miałem zabawną dyskusję z przedstawicielem producenta: Ja: Czemu ST daje tu gorszą pamięć? PP: Ta pamięć nie jest gorsza, niż w innych STM32, po prostu jest mniej testowana i dlatego producent...
To, że tam jest podłączone 8 MHz, to nie znaczy, że z taką częstotliwością pracuje, tym bardziej że bez podkręcania STM32F405 działa do 168 MHz. Racja, czyli... jeszcze gorzej. Przejrzałem źródła i rzeczywiście STM32 w tym projekcie pracuje z taktowaniem 168MHz. Wiem, że takie emulatory pamięci ROM w 8-bitowcach od biedy dają radę (oczywiście STM32...
1. W jakim formacie jest skompilowany jest twój program? elf, bin, hex ? 2. Pochwal się nam swoim skryptem debuggera - robisz to przez telnet czy jak? Jakich poleceń używasz do programowania i debugowania? Jak używasz pliku gdb.ini to pokaż go nam. Twój program najwidoczniej ma za duże zapotrzebowanie na pamięć.
Ogólnie dobrze kombinujesz. Wyrzuć ustawienie VTOR z aplkikacji - niech ustawia go bootloader. W bootloaderze zawołaj procedurę spod adresu pobranego z adresu 4 aplikacji, czyli o 4 dalej niż wartość VTOR. Jedyna potrzebna zmiana w skrypcie konsolidatora - to adres startowy (no i zmniejszony rozmiar dostępnej pamięci ROM)
gaskoin, ale piszemy o różnych rzeczach. Czym innym jest struktura procesora a czym innym struktura wiedzy czy nabywania wiedzy o nim. Instrukcja obsługi nie musi mieć struktury procesora. Przytoczony fragment: "The timer clock frequencies are automatically fixed by hardware. There are two cases: 1. if the APB prescaler is 1, the timer clock frequencies...
Czas się przesiąść na µC z I²S i do tego jakiś zewnętrzny DAC. SB16 sam pobiera próbki z pamięci poprzez DMA.
Pytanie czy analogowy oscyloskop sie nadaje do takich rzeczy? Sygnał i2c nie jest okresowy, więc na analogowym oscyloskopie wyświetlać się będzie właśnie to, co widzisz. Chyba, że ma pamięć. Możesz ewentualnie użyć zewnętrznej synchronizacji, generując specjalnie w tym celu impuls przed rozpoczęciem transmisji na dodatkowym pinie i korzystając z odpowiednio...
o ile pamięć mnie nie myli to jest tam pole lfname
Biblioteki z ST są zakręcone..niestety. Czy ja wiem? Są po prostu beznadziejne <: A jak się spojrzy na kod, to "OMG" <: Zaletą mojego pomysłu jest to że struktura ze zmiennymi jest jakby zrzutowana na pamięć więc dostęp do niej nie wymaga użycia żadnych dodatkowych funkcji. W istocie, w tej emulacji EEPROMu o której pisałem powyżej dostęp faktycznie...
ARM to zarówno układy z 4kB ramu pracujące na 20MHz jak i wielordzeniowe specjalizowane układy w telefonach komórkowych obsługujące pamięć DDR i taktowane gigahercami. STM32 znajdują się bliżej tych pierwszych niż tych drugich. 4\/3!!
Tak spytam przy okazji poza tematem - w STM32 chyba nie ma sensu dla oszczędności stosować uint8_t czy uint16_t bo chyba i tak zawsze rezerwuje całą komórkę 32 bity Chyba pamięć jest zorganizowana co 8bitow i jest możliwość zapisywania bez data alignment. Jest chyba możliwość zapisu pamięci: word, half-word, byte.
To jest tzw. bluepill i wszystkie opisy, które się go tyczą pasują. Zworki, w dużym uproszczeniu, służą do wyboru bootloatera. Masz wgrany jakiś soft, który emuluje pamięć masową. Ja zawsze używam ST-Link'a, nie korzystam z bootloaderów, ale można wgrywać przez port szeregowy, jak i USB (ale musisz mieć wcześniej wgrany jakiś niestandardowy bootloader,...
Ostatnia rzecz jaka przychodzi mi do głowy, to zabezpieczenie pamięci przed zapisem. Do odbezpieczenia może być konieczne ustawienie pinu WP w stan wysoki, po czym zapisanie do rejestru statusu (instrukcja WRSR) wartości 0x00 (cała pamięć odbezpieczona, brak zabezpieczenia rejestru statusu pinem WP) [zapis musi być poprzedzony przez WREN]. Innych firmwareowych...
W przypadku wciągnięcia śmieci ze zmiennej automatycznej dostajemy przewaznie, kolokwialnie mowiac, syf, nie zero. To samo dotyczy nie zainicjalizowanego statica w funkcji. Już to przerabiałem z powodu 'zapomnienia' zainicjalizować strukturki do liczenia CRC. Problem polega jedynie na pomyleniu adresu zmiennej / rejestru z ich zawartością. Oj polega....
Sin czy Cos zazwyczaj się robi na LookUpTable, czyli tablica w pamięci - STM32 zazwyczaj mają jej dość sporo :)
Jeśli ktoś znałby dokładną przyczynę tego tj. czy to jest wina samej pamięci czy wina architektury to byłbym wdzięczny za odpowiedź i wskazanie źródeł. Reference Manual 2 Memory and bus architecture 2.1 System architecture https://obrazki.elektroda.pl/4956208900_... Skoro poprzednio miałeś stos w rejonie 0x20030000, to wypadał on w...
Jeśli zmiana rozmiaru buforów powoduje że program przestaje działać oznacza to że prawdopodobnie kończy się pamięć na stosie. Kilka rozwiązań jest. 1. zwiększyć stos 2. zdefiniować bufory jako static albo zmienne globalne wtedy nie trafią na stos 3. jeżeli idea projektu na to pozwala podzielić odczyt na mniejsze paczki i zapisywać po trochu(używając...
FFT o długości okna M probek daje M/2 prążków z rozdzielczością Fsampl/M. Dość proste. Czyli np. Fsampl = 22000Hz dł. FFT = 1024 rozdzielczość 21.48Hz pierwszy prążek to składowa stała. ostatni to 10978 Hz Czyli ni jak wpasować te 21.48Hz czy 42.9Hz w potrzebną nam 30Hz, potrzeba więcej prążków i jeszcze jakieś wagi bo przecież prążki zachodzą na siebie...
Mam jeszcze pytanie odnośnie samego działania SWD i programowania... Jeśli BOOT0 = 0 to startuje ten kod który jest we Flash. Jak to się dzieje, że mimo działającego programu OpenOCD potrafi przerwać jego pracę i zacząć wgrywać program ? Jeśli dobrze doczytałem to jest to tylko możliwe jeśli są włączone sygnały SWDIO i SWCLK ? i drugie pytanie: Jeśli...
W skrypcie linkera masz zadeklarowaną zbyt małą pamięć. 4\/3!!
Pytanie 1 - dlaczego uważasz kolego, że jest Ci niezbędny większy RAM Pytanie 2 - dlaczego nie użyjesz mikroprocesora z obsługą zewnętrznej pamięci - czyli od Mega64 wzwyż. Pytanie 3 - dlaczego nie użyjesz mikroprocesora z większą pamięcią wbudowaną na innej architekturze (np. ARMowe LPC, STM32)
Po prostu źle skonfigurowałeś pamięć - pewnie wynika to z niechęci do czytania RM-ów.
Wogóle skąd masz implementacje tych funkcji dynamicznej alokacji pamięci?
Witam. Mam odbiornik SDR Radio "Malachit". Chcę do niego uzyskać pełne autorskie oprogramowanie. Instalacja najnowszego firmware za pomocą STM32CubeProgrammer 2.6.0. przebiegła normalnie. Jednak radio nie do końca działa jak powinno. Muszę wrócić do wersji testowej firmware. Przedtem jednak trzeba "wyczyścić" pamięć FRAM urządzenia dedykowanym oprogramowaniem...
1) Czy dla zmiennych o rozmiarze poniżej 32bity zawsze przydzielane jest 4 bajtowy rozmiar pamięci? To nie ma nic wspólnego z 32 bitami :) Masz wyrównywane adresy do 4 bajtów, dlatego kompilator dodał Ci w środku tablicę 3 bajtową. Jeżeli chcesz żeby taka struktura miała 9 bajtów to musisz jej nadać atrybut packed. 2) Czy stosowanie zmiennej 8 bitowej...
STM32f4 64KB RAM. Właśnie się przekonałem, że wiele zależy od konfiguracji pamięci.
Witam Odbierając dane w stm32 nie udało mi się zgubić żadnej danej nawet jak dam po każdym odebranej ramce 50ms Delay na testy. Max Transmisja jaką miałem to 4Mbit Akurat używam TCP to przesyłania programu wykonywalnego do STM32. Mam telegramy które wysyłam z PC do STM32 a on na nie odpowiada. Zapytania i odwiedź mam na jednym porcie Chciałem teraz...
Może źle wgrywasz swoje programy? Nie znam konkretnie tych procesorów, ale np. w STM32 trzeba ustawić pamięć, do której ma być załadowany program? Próbowałeś modyfikacji przykładu i wgrywanie spod tego samego projektu? Może stale masz wskazany do wgrania stary plik wsadowy?
No ale jakto? Wszędzie piszą, że BOOT0 powinno być podciągnięte do masy podczas startu procesora żeby odpalił się z pamięci flash :/
Problem prawie rozwiązany, tym razem to była pierdółka. Aż dziw bierze, że straciłem na tym kilka godzin. Funkcja obsługi przerwania nie nazywa się: [syntax=c_loadrunner]void USB_LP_CAN_RX0_IRQHandler(void)[/syntax] Tylko [syntax=c_loadrunner]void USB_LP_CAN1_RX0_IRQHandler(void)[/syntax... Ta jedynka była kluczowa. Zauważyłem, że nie wchodzi w przerwanie...
W przypadku adresowania pojedyńczych bitów - było, ale nie na taką skalę. W przypadku BSRR i BRR - jesteś w stanie zmieniać wartość całego portu bez czytania go. Tu masz ten wątek [url=http://www.elektroda.pl/rtvforum/to... W mojej ocenie ciekawie mogłaby wyglądać odpowiedź na pytanie, co pojawi się na porcie w takim przypadku: [syntax=c]GPIO->BSRR...
Tutaj chodzi o sygnał audio, zwyklą muzykę. Chcę z tych 24 bitów zrobić 16 bitów bo taką mam pamięć SRAM. Potem ten sygnał będzie "domiksowany" do sygnału głównego, 24-bitowego. Jak z tą kompresją czy nieliniowością?
Przeczytaj sobie np ten temat: http://www.elektroda.pl/rtvforum/topic17... Od siebie napiszę tylko tyle, że jak porównasz kody bez bilioteki ze źródłem biblioteki to zauważysz jedną rzecz: coś co często można zrobić w dwóch linijkach (konfiguracja) tam jest robione w dwustu. Jest tam mnóstwo niepotrzebnych obliczeń do sprawdzania jaki bit gdzie...
programem dla STM, jest to tylko i wyłącznie definiowanie pinów No... nie tylko :) usbserial zamiast serial do debug przez usb (bo większość arduino ma konwertery bądź atmegi u jako konwertery), mamy z reguły kilka i2c, uart, spi (a do tego alternatywne piny). Nie ma eeprom. I jak dobrze kojarzę tylko PB są 5V tolerant co i tak jest lepsze niż SAMD21...
Inne środowiska są albo płatne i darmowe wykorzystanie ograniczenia do np. 32kB niczego nie rozwiązuje, bo prosty wyświetlacz graficzny na starcie wykorzysta tą pamięć Używam Atollic TrueSTUDIO for ARM Lite. Ma co prawda ograniczenie rozmiaru ale dotyczy ono tylko kodu. Dane takie jak tablice fontów czy grafiki nie są liczone, natomiast funkcjonalnością...
Nie znam HAL ADC, ale znając sam ADC podejrzewam, że Twój kod robi coś zupełnie innego, niż Ci się wydaje. Prawdopodobnie konwertujesz zawsze 4 kanały. Użyj DMA i odsysaj wyniki konwersji do wektora w pamięci.
No i mamy dwie różne opinie. A czy któraś z opcji jest "szybsza"? Albo zajmuje mniej pamięci?
Stos, pamięć, kto to wie? Raczej HAL-a nikt nie będzie debugował. Takie podmianki część plików stąd część nie wiadomo skąd - raczej nigdy nie działają. Zrób sobie projekt z Cube i zaimportuj. Nie sądze abyś miał problemy. Albo napisz sobie to samo na rejestrach i zobacz. Praca na 10 minut.
no ale flash też jest w ROMie (czy aby na pewno jest to pamięć niezapisywalna - wolałbym aby było inaczej ale jak się nie da to trudno)
Ja mam tak: __attribute__ ((section(".bootloader&... int program_page(unsigned short *data, unsigned int adr) {... } i linker: .bootloader 0x08000000+128K-1K : { *(.bootloader) } i działa
Aby wyjaśnić Ci Twój problem, podaję Ci metodę "czytania" typów zmiennych, który wyjaśnia wszystko. Jest kilka zasad: 1. Czytanie zaczynamy od nazwy zmiennej 2. Czytamy w prawo dopóki nie dojdziemy do "końca", po osiągnięciu "końca" czytamy w lewo od nazwy zmiennej 3. Obowiązują nawiasy, które są "lokalnymi końcami" Tak więc: const char * const l_wartosc[]...
Nie da się - STM32 z zewnętrzną magistralą do podłaczenia pamięci dopiero mają wejść do produkcji w tym roku...
mass storage ale możesz zrobić tak że procesor po otrzymaniu pliku jako mass storage go przetwarza i zapisuje gdzies juz w ukrytej pamięci.
Czy to oznacza że nie ma potrzeby uruchamiać bootloadera w RAM, gdy będę kasował/zapisywał na sektorach na których nie ma kodu bootloadera? Uruchomienie kodu w RAM jest konieczne tylko gdy chcesz aktualizować kod samego bootloadera. Jeśli nie masz tego w planie, to nie jest Ci to potrzebne i cały bootloader może być w pamięci flash. 4\/3!!
Ależ jest i to znacznie lepszy mechanizm bo zabezpieczyć procesor można zarówno programatorem jak i z poziomu programu a odbezpieczenie wymaga skasowania całej pamięci i odblokowanie nie nastąpi do momentu kiedy cała pamięć nie będzie wykasowana (algorytm sprawdza wszystkie komórki - zabezpieczenie przed trikiem z wyłączeniem zasilania po rozpoczęciu...
Z nagrywaniem jest kwestia "na co?" - ale to zależy od tego, czego użyjesz. Można programowo wygenerować wzorce sygnałów, jakie są potrzebne, i na jakimś Pi odczytywać z karty SD (czy mikroSD - różne bywają tam gniazda na kartę) odpowiednie wzorce i puszczać je na pin, który będzie połączony z wejściem wzmacniacza. Na każdy sygnał trzeba będzie ze 200kB,...
Stos jest umieszczany zaraz za danymi Nie tak zaraz. Domyślna konfiguracja z Cube'a ustawia wskaźnik na końcu pamięci.
biblioteka STM nie jest ok :P Zainteresuj się bitbandigiem -> można jeszcze prościej grzebać w rejestrach, z dość sporą oszczędnością pamięci
Chcę móc dynamicznie alokować pamięć, której rozmiar jest z góry znany, a nie ograniczony stosem. A mółbyś tę myśl rozwinąć? Czy stos ma wielkosć nieznaną bo nie rozumiem.
A jeśli chciałbym mój program wgrać do RAM to musiałbym w tym Twoim skrypcie linkera dla sekcji np .text zamiast > rom AT > rom wpisać > ram AT > ram czy wewnątrz {} tez trzeba coś zmieniać? Jeśli wystarczy Ci, że program będzie działał jedynie przez debugger, to wystarczy ta pierwsza opcja. Jeśli byś chciał, żeby program normalnie działał z RAM, to...
Też z tego co wiem nie potrafią wyczarować nie istniejących bibliotek. Nie rozumiem dlaczego nie potrafisz zrozumieć że SPL-a dla L0 nie ma, nie było i nigdy nie będzie. przy okazji jak już wspomniałem - proponuję tę nazwę wytrzeć z pamięci.
Najtaniej : STM32 z magistralą zewnętrznej pamięci + podstawka pod pamięć podłączona do tejże magistrali + klon jLinka + oprogramowanie jFlash. Kilka lat w ten sposób programowałem różne pamięci serii S29GL. Teraz przerzuciłem się na BX48 Batronixa, ale to droga zabawka a te tanie nie koniecznie chcą programować S29GL.
W25Nxxx to zwykła pamięć SPI/qSPI kompatybilna z pamięciami 25xx. Możesz zaprogramować dowolnym programatorem który obsługuje pamięci o rozmiarze 1Gbit, wybierasz dowolny numer kostki o takiej pojemności i wyłączasz opcje sprawdzania ID. W miare tani programator do spi-flashy to program flashrom + jakikolwiek adapter, np serprog https://github.com/dword1511/stm32-vserp...
... czy da sie to zrobić jakoś wydajniej? Bo w tym przypadku dla każdej ikony tworzę oddzielna funkcję, która różni się tylko tablicą. Napisz jedną funkcję do wyświetlania z parametrami. Funkcję tę uruchom z RAM'u. Kompilator i tak rozmieści "liniowo" tę dwuwymiarową tablicę więc możesz używać wskaźnika zrzutowanego na "u16". Jakbyś nie zrobił (wskaźniki...
Jeśli skonfigurujesz odpowiednio moduł FSMC to nie widzę przeszkód.
Być może da się pokombinować z wyzwalaniem transferu timerem. Z drugiej strony nie bardzo rozumiem, jaki miałby być z tego pożytek - przesadzenia całego oprogramowania do RAM łatwe nie jest, a na czas zapisu procesor zatrzyma się przy dostępie do Flash, chyba że to model z dwoma bankami.
Tyle to ja wiem, tylko dlaczego programować można dopiero skasowane komórki? Przecież podczas zapisu i tak nadajemy im konkretne wartości. Flash jest wolniejszy od RAM, co ujawnia się przy wyższych częstotliwościach zegara. No tak, ale jak jest z szybkością odczytu do 24MHz gdy porównujemy te pamięci?
Odpowiedź na Twoje pytanie jest dosyć prosta - protokół SWD nie ma rozkazu zapisu do flash i tego się po prostu nie da tak zrobić jak zapisu do RAM. Oprogramowanie na PC, które się komunikuje przez SWD z układem (np. program do ST-Linka, OpenOCD) wgrywa do RAMu specjalną procedurę, która fizycznie realizuje zapis (poprzez odpowiednią sekwencje zapisów...
stm32 pamięć stm32 zewnętrzny pamięć pamięć flash stm32
flexible memory controller satel bateria integra testy akumulatorów
podzielnik techem google weryfikacja
Dokumentacja do ekspresu Siemens S75 TK69009 Objawy uszkodzonego czujnika MAP w Peugeot 1.4 8v