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.
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.
Czyli nie ma żadnej przeszkody, żeby w tablicach globalnych oznaczonych jako const przechowywać duże zawartości danych ? chciałbym w takich tablicach trzymać rysunki do wyświetlacza LCD. Skoro zostaną one umieszczone w flashu to nic nie stoi na przeszkodzie, żeby zajmowały nawet z 200 kB? (o ile nie przekroczę wolnej pamięci flash oraz pewnie zadeklarowanej...
Jeśli to zmienna i była by zapisana w pamięci FLASH to jak byś zmieniał jej wartość :?:
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?
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...
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.
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,...
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...
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,...
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};...
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...
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.
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 "
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...
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...
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.
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.
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...
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...
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...
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,...
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)[]...
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...
(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...
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...
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 =...
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...
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...
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ą...
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ć)....
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.
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"...
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.
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...
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 ;)
Wolałbym zapis: Dobry wniosek (tak sądzę). Skąd kompilator ma wiedzieć jaką wartość ma zmienna i ?
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.
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...
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...
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...
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...
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...
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...
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);...
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...
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...
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]...
(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ć...
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...
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...
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...
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),...
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...
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...
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....
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...
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!
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...
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...
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...
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...
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...
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";...
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 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...
(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...
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[]...
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...
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
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...
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...
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...
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 =...
komplet z eeprom ,bo raczej w nim problem sam flash jest nie ulotny i nie zmienny.
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]...
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...
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...
Witam! Może tak: prog_char stala = {1}; //stalej przypisana jest wartosc 1 char zmienna = pgm_read_byte(&stala); //spod adresu stala czytana jest wartość i zapamiętana w zmiennej inne typy stałych: -8 bitowy: prog_char -16 bitowy: prog_int -32 bitowy: prog_long -64 bitowy: prog_long_long Pozdrawiam EDIT: sorry, nie doczytałem tematu...
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...
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...
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...
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)...
Z tych czterech tylko punkt D jest niekiedy prawdziwy. A. dotyczy Flash i EEPROM. B - odczyt z Flash dużo łatwiejszy niż z szeregowego EEPROMu, np. przez bezpośredni dostęp do danej/struktury. C. "Oddzielna przestrzeń adresowa" - to ewidentna wada rozwiązania. Jednolity dostęp do wszystkich danych jest znacznie wygodniejszy. D - przeszukiwanie Flash...
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...
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...
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(); }...
[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);...
zmienna flash zapis zmienna flash zmienna pamięci flash
schemat prasa hydrauliczna kosztorysy elektryczne iskrownik ustawić
falownik danfoss akumulator easun lifepo4
Adaptacja silnika i przekładni Ford Transit: porady i procedury Czy piła taśmowa traka może uszkodzić szrank?