Nie, odczytywać możesz dowolną ilość razy. Co do pamięci SPI to są one niezwykle proste w obsłudze, sam interfejs SPI jest prosty, o wiele łatwiejszy w obsłudze niż I2C. Jaką pamięć wybierzesz, będzie dobrze. Zacznij od TME, mają niezły wybór.
Dokładnie jak napisał przedpiśca. :) Składnia w IAR to np: unsigned int __flash zmienna = 123; //(2 x "_" przed flash) Dokładny opis znajduje się w Help -> C/EC++ Compiler Reference Guide, strona 37.
No dobrze to ja powiem inaczej. Jeżeli zmienna w RAM to jedna procedura natomiast jeżeli we FLASH to druga procedura. Ja potrzebuje "coś" co rozróżnia gdzie zapisana jest "zmienna". Jeśli jedną książkę kładziesz na półce ściennej, a drugą w szafie, to Tylko Ty wiesz gdzie je położyłeś. Powtórzę wiec: To Ty decydujesz, gdzie ma być zapisana. Nie może...
le jeżeli utworzę tablicę globalną jak poniżej: static const uint8_t tablica Nie. Co zrobi kompilator tego nie wiesz, bo modyfikatory static i const nie służą określaniu położenia zmiennych, czy tablic w pamięci. const ci jedynie daje tyle, że próba modyfikacji takiej tablicy powinna zakończyć się błędem podczas kompilacji. Oczywiście w praktyce, na...
EEPROM jest zapisywany przy programowaniu, gdy użyjesz dyrektywy $EEPROM. Polecenie DIM zmienna as ERAM Byte jest instrukcją dla µC (jest zapisywane w pamięci Flash) która tworzy zmienną w EEPROM.
unsigned int value[128] __attribute__ ((section("moja_sekcja&... = {1,2,3,4,5,6,7,8,9}; Tak zadeklarowana zmienna wyląduje w pamięci RAM (brak atrybutu PROGMEM). Dziwne wartości biorą się z tego, że zmienna ta nie znajduje się w sekcji data ani bss (wkońcu została wymuszona inna sekcja), a więc taka...
Nie mozna tak zrobic, bo nie masz gwarancji gdzie linker umiesci zmienna - zwykle robi to w kolejnosci deklaracji, ale wcale nie musi. Zreszta to moze sie popsuc nawet i bez ingerencji linkera - wystarczy, ze ktorys naglowek stworzy zmienna w EEPROM. Sekcje pamieci EEPROM mozna przesunac przekazujac linkerowi polecenie --section-start (pamietaj o tym,...
Witam Pomocy panowie bo juz tydzien sie z tym mecze. Prubuje napisac zapis do Flash. Odczyt mi dziala ok Natomiast cos niebardzo chce zapisac . Pisze w keilu procedura wyglada tak : void AT91F_Flash_Write( unsigned int Flash_Address ,int size ,unsigned int * buff) { unsigned int i,status; unsigned int * Flash; AT91C_BASE_MC->MC_FMR =...
Okej ale dlaczego nawet gdy zdefiniuje tablice: int zmienna[20]; to pamieci flash nie ubywa po tym procesie wyświetla cały czas 118bytes tak jak na zrzucie powyżej zaciekawiło mnie to ponieważ zdefiniowałem tą instukcją miejsce 40 bajtów dla 20 zmiennych typu int w pamieci flash . zapisywałem nawet jakimiś wartościami te miejsce: int zmienna[20]={30000};...
(at)michalko:"Dokładnie, wystarczy zmieniać tylko adres bazowy głównego programu w skrypcie linkera. " No właśnie nie. Zmienna FLASH_BASE w tym wyrażeniu, to nie adres bazowy programu, ale adres bazowy całej pamięci FLASH 0x80000... (sprawdziłem). Najmniej inwazyjna zmiana, to właśnie podmiana w tym wyrażeniu FLASH_BASE na jakiś PROGRAM_BASE (celniej...
Oczywiście powinieneś dać long zamiast int ale to tylko jedna rzecz. Pozatym 0xffffffff nie zmieści sie do longa. Zmieści się za to do unsigned longa. A teraz dlaczego nie działa: wskaźnik musisz zadeklarować tak jak zmienna na która ma wskazywać. W Code vision są rozdzielone przestrznie adresowe i musisz dodać do deklaracji wskaźnika flash jeżeli ma...
hmm czyli kompilator tłumaczy to na asembler pózniej rozdziela to co będzie w pamieci ram a co w flash nie jest tak że linijka po linijce trafia do flash kompilator rozdziela co trafia do ram a co do flash??? Dodano po 16 int zmienna=5; po kompilacji postać jest zapisywana w pamięci flash i to samo w pamieci ram na stosie dobrze pojmuje?
Witam! Chciałem sobie zrobić prosty Counter zliczający ilość wciśnięć przycisku podpiętego do wejścia PA0. Skorzystałem z przykładu który zamieszczam poniżej. Niestety mój prosty Counter nie zlicza naciśnięć i zmienna cnt cały czas wynosi 0. Mam takie podejrzenie że przycisk nie jest programowo połączony z TIM2 tzn w funkcja TIM_TIxExternalClockConfig(TIM2,...
Cześć p.kaczmarek2! Fragment kodu, którego użyłem do zapisania zmiennej generującej, służy celom programistycznym. Użyję Twojego kodu, gdy już skończysz. Na razie po prostu upewniłem się, że użyto właściwych pozycji pamięci, więc jest on wstecznie kompatybilny z ostatecznym kodem. Mogę potrzebować pomocy w zsynchronizowaniu Twojego repozytorium z moim...
a tu przesyłam zawartość pliku który mi działa (i to musi być w oddzielnym pliku zapisane właśnie): /***** RAM FUNCTIONS ****/ #include <stdio.h> /* I/O Functions */ #include <AT91SAM7S256.H> /* AT91SAM7S256 definitions */ #include <lib_AT91SAM7S256.H> /* AT91SAM7S256 definitions */ #include <inttypes.h> #include "Board.h"...
To jest urządzenie TuyaMCU. Moduł WiFi steruje MCU poprzez UART, poprzez protokół TuyaMCU. Musisz wyciąć ślady RX/TX między modułem WiFI a TuyaMCU, aby flashować, ponieważ port UART do flashowania jest również używany przez TuyaMCU. Mamy dobre wsparcie TuyaMCU w OpenBeken. Powinien być łatwy w prowadzeniu. Najpierw możesz również rozważyć przechwytywanie...
Długość jest zmienna, z tego co widzę. Ale istnieje bajt długości ładunku, więc jeśli odebrana długość < 5 (nagłówek + polecenie), następnie odczekaj 1 ms, a następnie przeanalizuj bajt długości itp.
1 Chcę, żeby zmienna była w RAM (nie może być we flash, bo przy każdym wywołaniu ma inną wartość) 2. Chcę, żeby była const ( aby kompilator pilnował, aby ktoś modyfikując funkcję nie zmienił jej wartości) A możesz wstawić kod ilustrujący takie działanie? Bo nie widzę w jaki sposób zmienna const mogłaby być modyfikowana pomiędzy wywołaniami funkcji.
Skoro skonwertował ci nazwę w pierwszym przejściu, to w drugim już jest skonwertowana. Wtedy traktuje ją bez rozszerzenia. Wpisuj nazwę (strcpy_p) z ROM-flash do RAM. Zadeklaruj sobie bufor na nazwe (8 znaków +kropka+3 rozszerzenia+znak końca (\n). Dokladnie to jest tak, ze w pierwszym przejsciu masz "TEXT TXT" a w drugim "TEXT "
Z tym rzutowaniem to wolę jednak "ręcznie" to robić....jakoś tak wydaje mi się bezpieczniej. U mnie akurat sizeof zawsze będzie mniejsze niż 256 gdyż jest to po prostu ilość bajtów do zapisania jednej zmiennej/tablicy/struktury i nie zamierzam robić większych :wink:. Biblioteki z ST są zakręcone..niestety. Zaletą mojego pomysłu jest to że struktura...
Czyli, generalnie zmienna lokalna zadeklarowana w przerwaniu , też będzie odłożona przez kompilator do rejestru i potem wszystkie operacje będą wykonywane na tym rejestrze? Dokładnie tak będzie. A jak wygląda sprawa z zmienną lokalną z specyfikatorem "static" ? Taka zmienna, jest niby tworzona w pamięci RAM, tam gdzie zmienne globalne, ale jej dostęp...
Dodatkowo sam piszesz bzdury: "Tylko-const jako "lokalne w funkcji" nie będzie nigdy we flash" Jest to bzdura, gdyż taka zmienna const może zostać potraktowana jako literal pool i umieszczona w sekcji kodu, która jest najczęściej w flash https://godbolt.org/z/ZD3V5G No to którą gwiazdką do tych prostych/prostackich reguł byłby ten przypadek? https://godbolt.org/z/ibYs4K...
podzielić odczyt na dwie części, zamiast upychać w jednej linii? Upchnąłem w jednej :wink: Powstało coś takiego: [syntax=c] value = pgm_read_byte(pgm_read_word(&arrays[iter... I rzeczywiście działa. Chyba zrozumiałem mój błąd na początku - jeśli była stała to pewnie kompilator podstawiał wyliczony adres. Ale gdy była zmienna,...
Przepraszam , że nie dokończyłem wczoraj ale przysnołem. Nie poszło tak prosto bo nie otrzymuje zapisu na kartę , cały program kompiluje się mi w porządku tzn otrzymuje hex -a, zadaniem poniżej przedstawionego programu jest tylko odczyt jednej wartości z wejścia adc1 oraz zapisanie jej na karcie do pliku o nazwie plik, poniżej przedstawiam listing z...
AVRDUDESS i masz graficzne środowisko oparte o AVRDUDE gdzie możesz sobie z .hex zaprogramować flash, a z .eep zaprogramować eeprom (jeśli masz w ustawieniach projektu zaznaczone "Generate .eep" - AVR GNU/Common, output files. Łatwo i przyjemnie. Albo jak tmf rekomenduje elf który za jednym zamachem załatwi sprawę flash, eeprom jak i fusebits.
Wszystko stanie się jasne, jak poznasz sposób na "czytanie" typów zmiennych. 1. Zaczynasz od nazwy 2. Idziesz do "końca" w prawo 3. Następnie do "końca" w lewo 4. Nawiasy mogą wyznaczać "lokalne końce". Tak więc Twoja zmienna const uint8_t *Tab[3] to trzyelementowa tablica wskaźników na stałe uint8_t Jak sam widzisz nie da się wyczytać, że sama tablica...
Witam, Jako że jestem początkujący w dziedzinie STM32 napotkałem problem nie do przejścia. Moim zadaniem jest wysyłanie inkrementowanej zmiennej "Dane" która jest wysyłana przez USART i odczytanie jej przez terminal. W konsekwencji wyrysowując otrzymane wartości powinienem uzyskać coś podobnego do piły o amplitudzie od 0 do 255. Bez DMA wszystko pracuje...
Witam! Chciałem umieścić stałe w pamięci flash ale coś mi nie wychodzi. [syntax=c] // Funkcja wykorzystująca stałe uint8_t Search(const char data[]); [/syntax] Przy wywołaniu funkcji w kilkunastu miejscach w programie w taki sposób: [syntax=c] Search("OK\r\n"); [/syntax] Zajętość flash=47428 i ram=10760 Po zmianach: [syntax=c] const char(* const AT_OK)[]...
Szanowni koledzy, chciałbym zrobić projekt, w którym mikrokontroler będzie generował pewne określone wartości napięcia analogowego za pomocą DACa (16 bit, podłączony przez SPI). Rozdzielczość czasowa jednego okresu sygnału wynosiłaby 2^12 (czyli 4096) próbek na okres. W sumie, na jeden okres spróbkowanego sygnału potrzeba 8kB pamięci. Mikrokontroler...
Wydaje mi się, że nieprawidłowo liczysz adresy. Zauważ, że rekordy 02-05 zawierają różnie zapisany adres, który powinieneś odczytywać, a nie zakładać, że przestrzeń adresowana jest liniowo. To ma znaczenie w kodzie, gdzie przesuwasz segmenty, albo tworzysz własne segmenty w pamięci (w BASCOMie tego chyba nie ma, więc możesz się z tym problemem nie spotkać)....
Nie wiem jak masz inicjalizowana strukture menu_state, ale przyjrzyj sie zmiennej statetext. Jest to statyczna zmienna bedaca wskaznikiem na char*. Funkcja lcd_puts_p spodziewa sie, ze bedzie to lancuch znakow zakonczonych zerem (null). Natomiast: statetext = pgm_read_byte(&menu_state[i].pText); powoduje, ze, czytasz tylko jeden bajt, a najstarszy bajt...
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...
Binary: (Z nie za komentowaną zmienna) avrdude: verifying ... avrdude: 1 bytes of efuse verified avrdude: reading input file "main.hex" avrdude: input file main.hex auto detected as raw binary avrdude: writing flash (18 bytes): Wsad do procka miał ~130bajtów Writing | ########################################... | 100% 0.02s Binary: (Z za komentowaną...
Użyj znaczników syntax. Ciut chaotycznie opisałeś metodę. Nie ma za co. Mam nadzieje, że nie tylko tobie się przyda. Powtórzę należy pamiętać by nie dopuścić do sytuacji gdy zmienna i stalą część kodu znajdzie się w jednej stronie pamięci flash.
Witam Czy ma ktos moze pomysł w jaki sposob wykorzysac pamiec programu w Atmedze128 do zaladowania danych. Chodzi o uzycie okolo 60k pamieci program flash do zaladowania plikow z danymi uzywanumi w programie i najlepiej aby odwolanie bylo poprzez jakas zmienna. Czy ktos wie jak lub robil cos takiego w srodowisku AVRStudio i WinGCC? Dzieki badzo za wszelkie...
Ze zmiennymi trzymanymi we flashu nie ma tak łatwo, do ich odczytu musisz korzystać z odpowiednich funkcji. Tak jak w pokazanym kodzie dajesz funkcji uart_write_txt ciąg znaków teraz musisz podejść do tego inaczej. Musisz zadeklarować zmienne prezentujące ciągi znaków w sposób: char temp[3] PROGMEM = {'a','b','c'}; , PROGMEM spowoduje iż zmienna będzie...
Ta tablica nie jest potrzebna - ona jest tylko do celów demonstracji (jak zwykle w przypadku ST bardzo głupiej). Nieprawda. Tablica ta jest kluczowym elementem przy przepisywaniu zmiennych z jednej strony FLASH do drugiej, gdy pierwsza z nich jest już pełna. Procedura EE_PageTransfer() musi wiedzieć apriori ile najbardziej aktualnych wartości zmiennych...
W mikrokontrolerach AVR wystarczyło tylko dodać słówko "PROGMEM" przed tablicą, a potem odczytywać za pomocą funkcji pgm_read_byte(). Do programowania używam środowiska System Workbench i wiem że czegoś takiego tam niema W STM jest to jeszcze prostsze. Wystarczy dodać kwalifikator "const" np: [syntax=c] const uint32_t table[5] = {1,2,3,4,5}; uint32_t...
A czy atrybut nie wskazuje na to iż dana zmienna ma zostać utworzona w pamięci programu. Tzn czy taka deklaracje nie mówi o tym że musi to zostać utworzone w pamięci Flash a nie RAM? Właśnie tego nie rozumiem.
Wolałbym zapis: Dobry wniosek (tak sądzę). Skąd kompilator ma wiedzieć jaką wartość ma zmienna i ?
Efekt ten sam tablica ma większy wymiar w czasie działania... Tablica nie jest zmienna globalną.. A czy tablica uwzględnia znak zakończenia łańcucha '\0'? Bo jak nie, to może mieć bardzo dużą długość ten string ;)
Możesz sobie napisać taką funkcję proforma: [syntax=c] void UnusedVar (uint32_t var) { var = 0; } [/syntax] W ten sposób zmienna będzie jakkolwiek używana, więc nie ulegnie redukcji. Możesz też użyć dyrektywy volatile.
Witam, poczytałem sporo informacji nt. skryptów linkera, ale niestety jednej rzeczy nie mogę zrozumieć. Mam przykładowy zapis (sam napisałem): [syntax=c] .text : { . = ALIGN(4); __text_start__ = .; /* zmienna zawierająca początek sekcji text */ *(.text) /* kod wykonywalny aplikacji */ *(.text.*) *(.rodata) /* dane tylko do odczytu przechowujemy we flashu...
(at)ryszta Const nie jest tylko dodatkiem. Jest dobrą praktyką, którą wiele osób po prostu ignoruje. Ponadto const nie determinuje gdzie dana zmienna zostanie umieszczona (np w pamięci FLASH). Oznacza tylko to, że danej zmiennej/obiektu nie można modyfikować. Ponadto const w parametrach funkcji oznacza mnie więcej tyle, że funkcja obiecuje nie zmieniać...
twoja teoria jest zla - bin bedzie zajmowal tyle ile bedzie mial potrzebe zajmowac. jesli dasz na koncu pamieci zmienna (a w zasadzie stala), to bedzie on obejmowal caly obszar pamieci flash. jesli nie, to po co ma zajmowac wiecej? wartosci 0xFF (zreszta niezawsze takie) w pamieci znajda sie same, dzieki operacji kasowania ukladu - nie ma potrzeby (a...
Pierwsza sprawa jest taka, że zmienna odczytywana/zapisywana przez przerwanie i kod główny powinna być volatile. Druga zaś - 1ms delay w przerwaniu to nie jest szczególnie dobry pomysł... 4\/3!!
Hmm ;) Wykonuje sie te polecenia dokladnie tak samo jak np "Otworz w IE" czy inne tego typu :) Ja osobiscie Flash Geta nie uzywam, ale sporo programow mam w taki sposob podlaczonych do Operki, i nie zmienia tutaj niczego fakt, ze pracuje w linuksie :) Owszem, troszke trzeba poczytac, zeby poznac skladnie plikow konfiguracyjnych Opery oraz mozliwe do...
Doszedł kolejny element, przez który język C traci w moich oczach. Bardzo dziwne to jest, przecież na poziomie kompilacji wiadomo, że te tablice (w moim przypadku) nie będą wykorzystane i nie ma możliwości żeby do nich się odwołać nawet w runtime. Brak możliwości tworzenia zmiennych dynamicznych... ehhh. Chyba jednak zrezygnuje z pisania uniwersalnej...
Jak masz jakieś pojęcie o programowaniu to nie powinno być problemu. Najlepiej zrobić to na timerze i przerwaniach. Sam program byłby dosyć prosty w działaniu. Ja zrobiłbym tak. Przerwanie z timera przychodzi jakieś 100 000 razy na sekundę. Robisz 1 zmienną na liczenie przerwań i porównujesz z 2 zmienną która określa jasność świecenia. Przez wszystkie...
Witam, Mam proste pytanie. Zastanawia mnie, w jaki sposób obsługiwane są przez kompilator i następnie w procesorze, zmienne, którym podczas pisania programu przypisuje się konkretną wartość. Istnieje spory zasób informacji o procedurach czytania wartości z obszaru pamięci programu, jednakże przecież przy zwykłym [syntax=c]unsigned char zmienna[2][2]...
Walczę już kilka dni próbując różnych podejść i niestety się nie udaje, więc postanowiłem spytać, może ktoś miał coś podobnego. Mikrokontroler stm32F407VGT6, potrzebuję zapisać bajt w pamięci flash pod określonym adresem. Mam 2 funkcje do zapisu i odczytu jednego bajtu w sektorze 2 pamięci flash: void flash_init(void) { FLASH_PrefetchBufferCmd(ENABLE);...
Co to będą za próbki? Jak często będą zapisywane i odczytywane? Jeżeli dość często będzie zapis - zajeździsz pamięć... ma tylko 10.000 cykli. Zewnętrzna pamięć jest chyba nieunikniona. Dodano po 2 Albo "większy" procesor. Dodano po 1 Co do Twojego pytania - nie wiem, PIC-ki to nie moja specjalność. Może taka porada będzie pomocna - poszukaj w helpie...
Witam, zgodnie ze specyfikacją PIC16F1459 posiada on: "High Endurance Flash Memory (HEF) 128 B of Non-volatile Data Storage" komórki te znajdują się zgodnie z datasheetem od adresu 0x1F80 do adresu 0x1FFF. Ponadto zgodnie z przykładem dotyczącym zapisu do Flash z "Help'a" mikroC PRO for PIC v7.1.0 i używaniu poniższej funkcji http://obrazki.elektroda.pl/2832708000_1...
Znalazłem specjalnie dla Ciebie jeszcze kilka bajtów :D ahahahahaha Bascom stara się być "ignorantoodpornym" czyli jak ktoś może czegoś nie wiedzieć to on to, na wszelki wypadek, robi za niego. W języku C każdą zadeklarowaną zmienną najczęściej inicjuje się jakąś wartością ponieważ po reset nie można być pewnym, że w niej znajduje sie zero lub potrzebna...
Założenia projektu. Wyświetlacz LCD 240x128 mono, niestety wyświetlacz bez sterownika (nie mam innej opcji) do tego pomiar DS18B20 i czas rzeczywisty (ale to pryszcz) takze mozna pominąc Na pewno potrzebna bedzie pamiec szeregowa flash. Komunikac z PC od 480 do 115200 zmienna Na wyswietlaczu możliwosc otwarcia 8 oddzielny okien w ramach LCD i operowania...
I gdzie jest Twoja zmienna? : O to Ci chodziło? U mnie pod SW4STM32 identycznie debuger pokazuje takiego rodzaju śmieci. Ale jak się przypatrzeć to widać wyraźnie że błędnie lokalizuje tą zmienną w obszarze RAM (np. 0x20000070). Bierze adres stąd (output.map): .mySection 0x20000070 0x3b load address 0x08002634 .mySection 0x20000070 0x3b Src/main.o...
Nie zapominajmy o HWK - jednak doradzam Adaptery z wysjciem usb i zmienna rezystancja - tx2 przynajmniej dla bb5... phoenix tez swietna sprawa, mt-box wymaga dwu katalogow z softem dla nokii dzis - kwestja sterownikow dla flash po usb dla bb5....
Czy wystarczy utworzyć sekcję w taki sposób, powtarzając ten wpis dla każdej sekcji, czyli d1sramdata, d2sramdata, d3sramdata? Nie. Albo inaczej. Sekcje zostaną utworzone i jeśli przypiszesz do nich jakieś zmienne, to one tam wylądują, ale aby dane zostały zainicjalizowane domyślnymi wartościami (a'la sekcja .data) lub wyzerowane (a'la sekcja .bss),...
Dzięki wielkie! W końcu coś zadziałało, po tak długim czasie! Nie rozumiem tylko dlaczego zerujesz ostatni element bufora?: [syntax=c]__buff[BUFFLEN -1 ] = 0;[/syntax] Nie da się tego zrobić bez bufora? Niestety z RAM jestem na bakier i każda zmienna na wagę złota. Najwyżej podzielę komunikaty na krótsze o wiele. I tak jest już dobrze, w końcu coś ruszyło!
Witam, Czy ktoś się spotkał z takim zagadnieniem: Debugowanie działa poprawnie w przypadku wartości we FLASH zawartość pokazywana jest poprawnie a w przypadku zmiennych w RAM pokazuje zwykle wartości 0 jak dam komendę "info mem" w konsoli debugera to wg mnie nie pokazuje poprawnych danych: info mem Using memory regions provided by the target. Num Enb...
Witam moje pytanie jest proste ale efektywnej odpowiedzi nie znalazłem, programuje procesor atmega8 w jezyku C w kompilatorze avrstudio, napisałem sobie podprogram generujacy znaki na wyswietlaczu LCD, problem w tym że musze wywoływać "piszznak(tu numer znaku)"dla każdej literki co przy komunikatach długosci 10 literek gmatwa strasznie program...mógłbym...
Nie, odczyt z FLASH nie ma żadnego wpływu. Nie, static uint8_t licznikAnowy = 1 znaczy, że ta zmienna jest inicjowana tylko raz, przy starcie aplikacji, a jej wartość jest zachowywana pomiędzy kolejnymi wywołaniami, niezależnie czy jest to zmienna globalna, czy lokalna. Co do skakania odczytów - trzeba uśrednić kilka wyników i problem zniknie. Dioda...
1. Bascom jest bardzo dobrym językiem, znacznie lepszym niż Arduino. 2. "a:10.0" "a:10.0 " ":10" "10 " Ten temat jest zamknięty, dostałeś 2 przykłady. Pierwszy napisałem do składni ramki jaką podałeś w pierwszym poście, później zmieniłeś konstrukcję rami to napisałem kolejny przykład, można jak dobrze naliczyłem jeszcze 9 innych metod zastosować by...
Jeżeli soft został wgrany poprawnie, to zmienna w EEPROM przyjmuje np. wartość 0x00 i Sama, czy ustawia ją aplikacja, czy bootloader? Jeśli bootloader, to równie dobrze a moim zdaniem lepiej może być we flash. Jeśli aplikacja to patrz mój poprzedni post. Albert
hasło mozna zrobic w prosty sposob: na poczatku danego filmu, ktory ma byc zabezpieczony wstawiasz pole tekstowe i przycisk.a w klatce ustawiasz akcje stop. action script przycisku: po kliknieciu na przycisk pobiera tekst z pola do zmiennej, sprawadza czy tekst ze zmiennej jest taki sam jak z gory ustalone (if zmienna==haslo), jesli tak to przenosi...
Nie lepiej uzyc sprintf? W tym kodzie wiele było by "użyć lepiej" ale.... ;) Mając na względzie początki ( trudne ) autora, chcę by choć trochę rozumiał co robi ( on i jego kod ). Małymi kroczkami. I tak i nie. Jak uC ma mało FLASH, potrzeba prostych operacji, mozna robic na piechotę, jak pamięci jest dużo (taki sprintf to ok 1kB) operacje są skomplikowane...
...Twoja wersja mi nie działa...z powodu "gwiazdki" ;) nastomiast działa mi takie coś... umieszczam dwie stałe w pamięci flash: flash char tak[]="TAK "; flash char nie[]="NIE "; teraz deklaruję tablicę wskaźników (o dziwo też musi być we flash! ): flash char *wyborptr Dodano po 2 ...prosze o pomoc bo nie wiem jak...
Domyślnie masz 9.6 MHz dzielone przez 8, czyli 1.2 MHz. Wszystko się zgadza. Po co używasz operatora |= przy inicjowaniu peryferiali? Wstaw jakieś usypianie do pętli w main(). Zmienna timer_overflow_ nie powinna mieć atrybutu volatile. Zamiast tego, podobnie jak indeks, powinna być zadeklarowana wewnątrz procedury obsługi przerwania jako static. tab[]...
witam dane: kompilator CV na AVR. prosze o pomoc bo nie wiem jak to rozwiazac a mianowicie... mam zadeklarowane dwie stale tablice znakow: flash char tak[]="TAK"; flash char nie[]="NIE "; zadeklarowana tablice wskaźników do tych stalych: flash char *wyborptr[2]={tak,nie}; mam nastepne stringi we flashu: flash char jeden[]="JEDEN "; flash char dwa[]="DWA";...
Kod z ARM - przerób sobie :) Mam nadzieję, że się przyda. Pamiętaj, że zmienna może mieścić się w kodzie -czyli w pamięci Flash (PROGMEM) lub w pamięci RAM. [syntax=c]void xprintf (const char* str, ...) { va_list arp; int d, r, w, s, l; va_start(arp, str); while ((d = *str++) != 0) { if (d != '%') { xputc(d); continue; } d = *str++; w = r = s = l =...
1. SE T610 2. Komenda AT+CNMI=2,3,0,0,0 ustawia przesłanie sms bezpośrednio do telefonu w formacie +CMT: <TEKST>, <DŁUGOŚĆ> <CR><LF> <TRYB PRACY> .Po wykryciu komendy na buforze odczytuje konkretne informacje i wykonuje dane działanie. 3. Patrz punkt 2. 4. Napisz na PW. Kod będzie przepisywany na C więc aktualnego nie...
ATmega644p (64kB Flash!) i brak pamięci programu ???? A rozważał kolega tak na poważnie przejście na język C ? w którym taką obsługę i to większej ilości czujników można byłoby zmieścić w ATmega16. (Bo to na 100% będzie jeden ze sposobów żeby napisać dużo krótszy program i mieć obsługę nawet 30 czujników) Jeśli zaś zamierzasz dalej męczyć się w Bascomie...
Nie przeczytałeś noty aplikacyjnej i dalej marudzisz. Po pierwsze zauważ więc, że nie ma obowiązku używania ARMów, Cortexów, STM32 czy ogólnie emulowania EEPROMu - jeśli masz przy tym cierpieć takie katusze, to przecież nie ma sensu męczyć siebie i nas. To jest ten najważniejszy punkt. Jeśli nie sprawia Ci to przyjemności, a wręcz sprawia "egzystencjalny...
Wiekszosc zmiennych, to zmienne globalne. [syntax=delphi] var Form1: TForm1; usb:dword; pbDriverInstalled :integer = 0; lpguid:tguid; bufer: array[0..255] of byte; buferin: array[0..255] of byte; ib,dl,odczyt:word; poz:TstringList; ini:tinifile; rf:TRodzajflasha; [/syntax] W pierwszej wersji poz bylo tworzone w oncreate formy i mialo byc wykorzystywane...
(at)Piotrus_999 Popraw mnie jeśli się mylę. Mając proca w architekturze Princeton gdy użyjesz kwalifikatora "const" zmienne z automatu wpadną do pamięci flash (jeśli mnie pamięć nie myli tak się stanie choćby w przypadku avr32 i arm). Zmienna taka nie musi być statyczna i kompilator sobie z tym radzi. Oczywiście próba dobrania się do takiego obszaru...
Wywal to "FAR" !! Te tablice zapewne tworzone są zaraz na początku pamięci flash. Tak było u mnie. Kompilator sam dopierze długość adresu. Po co go męczyć arytmetyka na 4 bajtach skoro równie dobrze możne to zrobić na 2?? A dla poprawności politycznej zmień zmienna wysyłaj na bez znaku, tak samo argument funkcji wysyłania przez SPI. Teraz kod wygląda...
No masz, ale co jest przed tym warunkiem? Inkrementacja zmiennej i odczytanie bajtu z pamięci flash. Dopiero po tym sprawdzasz warunek i jeśli jest większa niż 10, to ją zerujesz. Przeanalizuj ten kod krok po kroku. Weź pod uwagę to, że gdy m=1, zmienna te może zmieniać się aż do 15. Gdy zmienisz m na 2, to może się zdarzyć sytuacja, że t będzie większe...
Nie brakuje, przecież nie wklejam tu fragmentów rzeczywistego kodu. Czyli tablice fontów masz w RAM, a nie we flash? A, czasem mam np. takie: warning: 'sizclr' may be used uninitialized in this function i nie wiem jak się pozbyć tego ostrzeżenia, bo zmienna sizclr jest użyta tak jak ma być i nie ma potrzeby jej inicjalizacji. A jednak (; Kompilator...
Wyłączyłem optymalizacje. Wprowadziłem zmiany w startup. http://obrazki.elektroda.pl/7964964200_1... Main wygląda tak: [syntax=c]int main(int argc, char* argv[]) { // At this stage the system clock should have already been configured // at high speed. int x=0; x+=10; // Infinite loop while (1) { ++x;// Add your code here. } }[/syntax]...
Kłócicie się trochę niepotrzebnie, każdy z was ma tylko TROCHĘ racji ;-) Zbych_: Dość dziwnie jak dla mnie to podzieliłeś - jaki to ma sens? Przy podziale jak ja proponuję (example.* - biblioteka, test.* - program) generuje mi coś takiego: PORTB = example.get(); 5e: 80 e6 ldi r24, 0x60 ; 96 60: 90 e0 ldi r25, 0x00 ; 0 62: 04 d0 rcall...
Przecież .DB i .DW to deklaracje stałych umieszczonych w pamięci flash (pamięci programu). Co do deklaracji zmiennych umieszczonych w wewnętrznym RAM to można zrobić to w ten sposób: .dseg ;deklaracja zmiennych Zmienna1: .byte 1 Zmienna2: .byte 1 Zmienna2bajty: .byte 2 .cseg ;tu piszemy program Nie musimy się wtedy martwić o adresy zmiennych, kompilator...
Kompilator przyporządkowuje zmienne do grup: "zmienne zainicjalizowane" (.data) lub "zmienne niezainicjalizowane" (.bss). Według standardu te pierwsze mają zostać zainicjalizowane konkretnymi wartościami, te drugie mają zostać wyzerowane. Jednakże sam "akt" inicjalizowania / zerowania jest przeprowadzany w startupie (kod który wykonywany jest przed...
Ten adres nie jest prawidłowy w STM32. Flash zaczyna się od 0x8000000 Flash jest widoczny zarówno od 0 jak i od 0x8000000. W "dolnym" zakresie może być widoczne coś innego - np. RAM - zależnie od konfiguracji pinów BOOTx. To samo dotyczy nie zainicjalizowanego statica w funkcji. Niezainicjalizowana zmienna statyczna ma zawsze wartość 0. ZAWSZE. Jeśli...
Cześć Co do tego co napisałem wcześniej( będą strony z data sheet do Twojego procka): Jak program odwoła się do obszaru pamięci UNDEFINED(ABORT)str.18,19 to generowany jest wyjątek "data abort", procesor wchodzi w tryb "ABORT MODE" i skacze pod adres 0x00000010 a adres powrotny zostaje zapisyna w rejestrze R14_ABORT,str41. Adres niezdefiniowanej pamięci...
Mówiłem, że działa tylko na AVRach, przypadkiem. Powodem jest to, że AVRy mają Hardwardzki model pamięci i tam uzyskanie stałej w pamięci flash jest mozliwe jedynie poprzez makra PGM. Uwierz - bufor to wskaźnik zainicjalizowany na STAŁĄ. Wrzuć ten kod na MSP430, PICa, ARMa to się przekonasz. Poprawnym rozwiązaniem jest napisanie: char bufor char *bufor...
Zniechęcił mnie brak eepromu. Kompletnie nie jest dla mnie zrozumiałe, aby w takich nowoczesnych procesorach robić takie ograniczenia. Po prostu coś takiego przydaje się wbrew pozorom nie tak często, a jak już jest potrzebne, to łatwo zastąpić czymś innym: - pamięcią zewnętrzną (chip, karta SD, ...) jeśli i tak jest na płytce, - pamięć podtrzymywana...
dziękuje za odpowiedź, ale mam kolejne pytanie: deklaruje sekcje eeprom, tak by zajmowała mi ostatnie 100B pamięci flash (taki miałem zamiar): MEMORY { FLASH (rx) : ORIGIN = 0x00100000, LENGTH = 0x00020000 eeprom (rx) : ORIGIN = 0x00120000-100, LENGTH = 100 DATA (rw) : ORIGIN = 0x00200000, LENGTH = 0x00008000...
Cześć, mam zadanie do rozwiązanie a nie wiem czy się da. Mianowicie mam w programie jakąś zmienną np. : int cena =0; ... Program się wykonuje "coś się dzieje" - przychodzi komenda zmiany cena =100; po czym zasilanie jest odłączone i płytka nie jest zasilana w żaden możliwy sposób. Po uruchomieniu układu oczekuję, że zmienna "cena" będzie równa 100 a...
Potrzebuje przechwytywać do tablicy nazwy plików wydobytych z FAT32 na karcie SD :) Tak więc FLASH nie wchodzi w grę :( Wygląda to tak: w pętli program odczytuje dane z sektorów -> funkcja wyodrębnia istotne informacje i zapisuje do zmiennej (która z każdym powtórzeniem pętli zmienia swoja zawartosć)-> zmienna(z nazwą) ma zostać zmagazynowana w tabeli...
Używam IAR-a i zdarzyło mi się umieszczać stałe we flashu. Używa się do tego słów __flash lub __farflash. To pierwsze słowo umieszcza stałą w obszarze pierwszych 64kB flash-a (adres <= 0xFFFF), to drugie dalej (adres > 0xFFFF). Różnica jest taka, że dostęp do zmiennej __flash jest nieco szybszy niż __farflash. Aha, w mojej wersji IAR-a (2.28A)...
Chodzi mi o to, że zmienna też mogłaby być int16_t i nie trzeba się wtedy zastanawiać czy aby na pewno ma 16-bitów. A z option bytes chodzi mi o to, ze ja u siebie mogę zapisać jedną zmienną jak i sto - nie muszę robić żadnych dziwnych kroków, ponieważ nigdy nie włączałem zabezpieczeń w option bytes czy gdziekolwiek indziej - po prostu flash jest albo...
Witam Wydaje się, że najprościej to wykorzystać poniższą strukturę przechowującą parametry danej tablicy ze znakami w pamięci Flash [syntax=c] struct sFont{ unsigned char height; // ilosc linii unsigned char width; // szerokosc char const *font; // tablica znaków }; [/syntax] W przypadku chęci wykorzystania kilku tablic z różnymi rozmiarami, to do funkcji...
Już zgłupiałem. Niemniej jednak fizyczny zapis dokonywany jest po 4 bajty na raz jeśli ustawiłeś zapis 32-bitowy. Więc: mam w buforze daną o wartości 0xAB <- 1 bajt. Zapisuje ją pod adres = 0, więc komórki od 0 do 3 zawierają 0x000000AB tak? Następna zmienna powiedzmy 0xCD zostaje zapisana pod adres 4. I komórki od 4 do 7 zawierają 0x000000CD. Więc...
Dzień dobry, Napisałem sobie program (korzystam z: STM32CubeMX oraz Atolli TrueStudio, mam BluePill STM32F103C8, port szeregowy podłączony za pomocą UART2 oraz konwertera FT232RL (ustawionego na 3,3V - bo w dokumentacji wyczytałem że te wejścia nie tolerują 5V) do portu USB, gdzie łączę się za pomocą BrayTerminal). Na BluePill mam wbudowaną jedną diodę,...
Obecnie korzystam z STM32F030F4P6. No to nie masz dużego wyboru. Jeśli masz tych zmiennych nie więcej niż kilkadziesiąt, to wystarczy jeśli zajmiesz na eeprom dwa obszary 1k. Czyli stronę 14 i 15 a PAGE_NB_PVP ustawisz na 1. Jeżeli chciałbym, by EEPROM zapisywał mi od strony załóżmy 15, to wtedy ta linijka kodu przyjmie taką postać?: #define EEPROM_START_ADDRESS...
Zmienna przy debugowaniu się aktualizuje po zapauzowaniu (chyba) programu. Przy jtagu wiem że mam na bieżąco. Algorytm wgrywania jest w opcjach projektu, wybierasz debug, wybierasz debuger (st-link) i opcje. Następnie przechodzisz do zakładki flash download. Ale właśnie doczytałem że już debugujesz/wgrywasz więc mój post wcześniejszy jest nieważny....
Hmmm. Wgrałem oryginalny program z Stm32 MassStorage. vectors.c startup.S i .ld o kolegi Freddie Chopin. Mam obecnie dwa przerwania z Usb: USB_HP_CAN1_TX_IRQHandler i USB_LP_CAN1_RX0_IRQHandler ( w vectors.c było bez jedynek kolo CAN ). Zrobiłem takie coś, orginalny program void USB_HP_CAN1_TX_IRQHandler(void) { CTR_HP(); }...
const uint32_t data = (uint32_t)(&RCC->APB2... int main(void) { ... Gdzie RCC to wskaźnik na strukturę, a APB2ENR to jeden z jej elementów. #define RCC ((RCC_TypeDef *) RCC_BASE) -> ((RCC_TypeDef *) ((((uint32_t)0x40000... + 0x20000) + 0x1000))...
[syntax=c] //Załączenie pliku nagłówkowego #include"LCD.h" //Funkcja ustawiająca linie danych LCD jako wyjścia void output_LCD(void) { DDR(D4_PORT)|=(1<<D4); DDR(D5_PORT)|=(1<<D5); DDR(D6_PORT)|=(1<<D6); DDR(D7_PORT)|=(1<<D7); } #if RW_M==1 //Funkcja ustawiająca linie danych LCD jako wejścia void input_LCD(void) { DDR(D4_PORT)&=~(1<<D4);...
1. Schematu jak powiedziałem nie będzie 2. Nie wykorzystałem miejsca, bo na wszystko by i tak nie starczyło i wtedy poza tym na samej płytce byłaby plątanina kabli - a tego nie chciałem. 3. Program po malutkiej modyfikacji może obsłużyć matryce o rozmiarach do 56*8 (buforem jest tu zmienna 64-bitowa). Po dalszej modyfikacji (trochę większej) można sterować...
flash zmienna zapis zmienna flash zmienna pamięci flash
wytrzyma kondensator marshall footswitch amplituner przygasa
Schemat ładowarki Bosch AL1860CV - analiza i diagnostyka Przypadkowe załączanie sprzęgła K2 w DSG DQ250