Użyj rozszerzenia gcc dla AVR: __flash [syntax=c] struct record { uint16_t pos; const __flash char *txt; } ; const struct record tab[] = { {940, (const __flash char[]){"txt940"}}, {789, (const __flash char[]){"txt789"}}, {115, (const __flash char[]){"txt115"}} }; [/syntax] PS: oczywiscie sama tablica również może rezydować w pamięci flash: [syntax=c]...
...Zauwałzyłem, że po zadeklarowaniu w ten sposób liczba komórek RAM zmniejsza się:... Pamięci programu również :( Zajrzyj do pliku pgmspace.h , no i oczywiście do dokumentacji , a w lot zrozumiesz ;) #define EEPROM __attribute__ ((section (".eeprom"))) #define FLASH __attribute__ ((section (".progmem.gcc"))&...
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[]...
W nawiązaniu do porad kolegi tmf proponowałbym coś w tym stylu (być może strach przed kwalifikatorem __flash wynika z braku przykładów kodu :?: : [syntax=c] // przykład jak używać kwalifikatora __flash do umieszczania // danych w pamięci programu i jak się do nich odwoływać // kod gotowy do odpalenia w symulatorze Atmel Studio 6 // można zaobserwować...
Witam Niby prosta rzecz a nie wychodzi mi... Chce umieścić łańcuchy znaków w pamięci FLASH przy użycium atrybutu __progmem oraz symboli __flash o __memx. W każdym z przypadków dane nie mogą znaleźć się w pamięci FLASH. Mało tego, podgląd pamięci w Atmel Studio podczas debugowania nie wskazuje nawet że dane te znajdują się w pamięci SRAM. Uzywam płytki...
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";...
Jak deklarujesz tablice to wystarczy słowo kluczowe const i tablica wyląduje we flashu, a używasz jakby była w ramie, jak nie musisz modyfikowac to nie musisz kopiować. [syntax=c]const char tab[] = "tablica we flash";[/syntax] a jak juz musisz kopiować to standardowymi funkcjami memcpy, strcpy... [syntax=c]const char tab_flash[ 50 ] = { ... }; char...
...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...
Aby zoptymalizować program możesz rozważyć poniższe podpunkty: 1)Mozesz dać tablicę do flash-a.wystarczy dołączyć plik nagłówkowy <avr\pgmspace.h> sposób definicji zmiennej ładowanej do flash: np. static unsigned int LCD_SegTable[] PROGMEM = { 0xEAA8, // '*' 0x2A80, // '+' 0x4000, // ',' 0x0A00, // '-' 0x0A51, // '.' Degree sign 0x4008,...
1) Zapomnij, że istnieje coś takiego jak String... przynajmniej na Arduino. Używaj char (niestety z wszystkimi tego konsekwencjami). 2) Do trzymania komunikatów używaj pamięci FLASH, szkoda marnować RAM na każdy String w programie... czyli nie " Serial.print("Inicjowanie karty SD..."); " lecz " Serial.print(F("Inicjowanie karty SD...")); ".
gps79 sorry, ale czy Ty czytasz tylko sam kod w moich postach, czy również tekst ? "Ale ja nigdzie nie deklaruję tablicę stringów niezmiennych const char *. Wydaje mi się, że raczej dokładnie opisałem, co robię. Napisałem, że jeśli utworzę tablice w pamięci flash" JEŚLI....... Natomiast w czasie rzeczywistym w programie docelowym nie tworzę tablic we...
Poprzedni mój przykład działa poprawnie pod warunkiem że cały jego tekst zawarty jest w jednym pliku głównym. Jeśli wywołanie funkcji piszącej do lcd nastąpi w innym pliku, to argument funkcji będący zarazem wskaźnikiem do tekstu flash nie zostanie rozpoznany. Obszedłem to poprzez zdefiniowanie W pliku nagłówkowym powinny być tylko deklaracje, zazwyczaj...
[syntax=c]void LcdText(rom const char *txt);[/syntax] ? Albert
Dzięki za przykład działa dobrze, tylko nadal mnie zastanawia czemu to nie działa, tym bardziej że ten kod powyżej jest o wiele łatwiejszy. Chyba wartość kodu ocenia się w pierwszej kolejności na podstawie jego skuteczności, a nie tego, czy jest łatwiejszy. No bo co z tego, że jest łatwiejszy, jeśli nie działa? Przykład, który podałem nie jest mojego...
witam Mam problem z deklaracją takiej tablicy w AVR Studio 4 (używam WinAVR-20070525 ) - nie rozumie deklaracji flash flash unsigned char unshifted[][2] = { 0x0d,9, 0x0e,’|’, 0x15,’q’, 0x16,’1’, 0x1a,’z’, 0x1b,’s’, 0x1c,’a’ };
Ten procesor ma tylko 128 bajtow RAM, a twoja tablica ma 6*24=144 bajty. Zainteresuj sie atrybutem PROGMEM i umieszczaniem stalych w pamieci FLASH.
Jednakże potrzebowałbym stworzyć takie menu w którym użytkownik wybiera sobie język i myślałem żeby rozwiązać to w taki sposób, aby każdy z tekstów był tablicą dwuwymiarową... A dlaczego to miałoby nie działać? Po prostu jako tekst związany z daną pozycją menu dajesz wskaźnik do tablicy, a w programie masz zmienną globalną określającą nr języka (indeksu...
Musisz uzyc polecenia PROGMEM np const char tablica1[] PROGMEM="cos tam";
Witam; mam sobie taką tablicę wskaźników do tekstów w pamięci flash: [syntax=c]flash char *napis[]={"Start","Stop","Pauza","OK","D... [/syntax] i chciałbym te teksty móc wysłać przez RS232 . Jeśli zastosuje konstrukcję typu : [syntax=c]putsf(napis[1]);[/syntax] to wszystko jest OK. Ale chciałbym wysłać ten tekst poprzez funkcję printf i tu pojawiają...
Tablica w pamięci kodu (z tym, że przykład jest dla char): http://mirekk36.blogspot.com/2013/11/tab... Mając taką tablicę wyszukujesz pomiędzy którymi punktami tablicy leży wartość i liczysz https://pl.m.wikipedia.org/wiki/Interpol...
Możesz przekonwertować plik na tablicę C (jest wiele narzędzi, poza tym to max kilkanaście linii w większości języków). Albo wygenerować od razu plik obiektowy i zlinkować z programem. arm-none-eabi-objcopy -I binary -O elf32-littlearm --set-section-flags .data=alloc,load,data,readonly --rename-section .data=.rodata plik.bin plik.o Dodaj plik plik.o...
Przykład zapisu tablicy w pamięci flash i trzymania jej tylko tam: unsigned char temp[3] PROGMEM = {0,1,2}; aby odczytać dane z takiej zmiennej wykorzystać należy polecenie postaci: data = pgm_read_byte(&temp[j])
(at)tmf: ...ale autor tematu napisał, że print_str(strr też mu nie działa prawidłowo. Myślę, że prawdopodobnie kompilator ma problem z określeniem rozmiaru struktury i - co za tym idzie - obliczeniem wskaźnika do następnego elementu tablicy struktur. Proponuję dodać w strukturze rozmiar ciągu znaków: Musisz to tylko przerobić na swoje potrzeby, czyli...
Niestety nie mam żadnego filmiku. Sprawuje się REWELACYJNIE. Za to podrzucę Ci gotowca bo ten na stronie wymaga sporo poprawek i domysłów co gdzie jest. Jest to wersja pierwotna która przechowuje w tablicy RAM. Funkcje których tutaj nie ma robią: LCDINIT - inicjalizacja wyświetlacza LCD_POS - ustawia pozycję: wiersz, kolumna LCD_CLS - czyści ekran LCD_PSTR...
zawsze musi być na końcu '\0'? czyli w moim przypadku 6 element tablicy zakończenie łańcucha? Tak. W funkcjach, które użyłeś wykonywana jest konwersja char[] do char*, więc to jest jedyny znacznik końca łańcucha tekstowego.
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...
[syntax=c]void CPY_FLASH_RAM (char *TAB)[/syntax] a do [syntax=c]char BUF_LCD[33] = "a"; char TX1[32] PROGMEM = "abcdefghijklmnop1234567890123456"; [/syntax] się nie czepia?
unsigned char tablica definiujesz tak: prog_char unsigned char tablica[] = { 128, 134, 136, 134, 128, 116,….. } i kompilator wstawia ją tylko do flesha
Tzn, że program może działać dalej poprawnie a debuger wskazuje na to, że jesteśmy w np HardFaultHandlerze ? Mógłbyś nieco rozwinąć myśl ? Czasem może być jakiś problem sprzętowy/programowy/systemowy, który może spowodować wywalenie się debuggera, który będzie np. uparcie twierdził, że jesteśmy wciąż w jakiejś linii, choć mikrokontroler sobie wtedy...
Witam, Pomysł dobry ale sypie się najprawdopodobniej z powodu zbyt dużej ilości przerwań. Proponuje projekt sterownika "równoległego", taki wykorzystałem w mojej pracy inżynierskiej. Wprawdzie korzystałem tylko z 8 serw ale 16 też obsłuży po drobnej modyfikacji. Program zabiera większość mocy procesora do obsługi przerwań ale tylko przez czas 2ms potem...
bez "&" - to co masz to nie jest tablica stringów tylko tablica wskazników do tych stringów (a tak naprawdę wskaznikiem do pierwszego wskaznika - tyle ze ułozone sa w pamieci po kolei). W C tablice sa reprezentowane przez wskazniki czyli char ala_ma_kota[] = "dfdsffsf" definiuje wskaznik ala_ma_kota. W C nie ma tablic w rozumieniu np PHP.
Ponieważ odczyt z tablicy w maluczkich uC zajmuje "dużo" flash i czasu też, dlatego nie ma odczytu z żadnych tablic. A w tych gdzie ciąg ląduje w ram, zużywa ją niepotrzebnie. Na szczęście choinka if then else zajmuje zero bajtów i zero instrukcji oraz wykonuje się w ujemnym czasie. Proponuję najpierw sprawdzić obie wersje na min. 2 platformach, a...
(...) .db "Jakis napis",0x0a,0x0d, 13,12, 0 lpm acc, z (lub z+) A co to za potworki? Znak końca linii (i do tego windowsowy :/) też nie jest potrzebny, wystarczy samo zero, chyba że urządzenie komunikuje się z windowsowym terminalem tekstowym przez rs-232. I skąd się wziął akumulator w AVR? W C robisz tak (avr-gcc): #include <avr/pgmspace.h>...
Witam! Natrafilem na dziwny problem i nie bardzo mam pomysl jak go rozwiazac. Otoz w programie zadeklarowalem kilka tablic o lacznej pojemnosci okolo 1.2KB. Wszystkie tablice sa umieszczane w pamieci flash (const), typy to "char" i struktury 4x"char", tablice 1 i 2 wymiarowe. Teraz opis problemu: kiedy mialem nieco mniej tablic i dodalem kolejna (120...
nie wiem, jak to w gcc wygląda, ale nie zadziała czasem 'static' w deklaracji, ewentualnie 'const', ale nie za bardzo wiem, jak działa const w C++ (programuję w C), wiem tylko, że inaczej... :D static char tablica[8] = {1,2,3,4,5,6,7,8};
Atrybut progmem wymusza włożenie do sekcji tylko do odczytu, a tylko do odczytu może być zmienna const. Inną mógłbyś próbować zmienić, a tak się nie da. A w jaki sposób zmienić lang_polish? Nazwa tablicy jest stałym wskaźnikiem do pierwszego jej elementu (o ile pamiętam z książek i studiów). Nie da się w programie zrobić tak, żeby tablica zawierała...
kombinowałem z tablicą struktur, ale kompilacja się wykłada na procedurze wyświetlania z pamięci Flash na LCD , która oczekuje char*, a dostaje strukturę TDzień_tyg (pewnie coś namieszałem z wskaźnikami), więc skorzystałem z pomysłu Raphaw i BlueDraco - rzeczywiście, jakoś to prościej wygląda ;-) Dzięki wszystkim.
Porównaj, komentarz chyba zbędny. #include <avr/pgmspace.h> const char st_w_RAM[]="abcd"; const char st_w_ROM[] PROGMEM ="tekst w pamieci flash"; Nie tylko tablice znaków: const float PI PROGMEM=3.14159; const float PARAMETRY[3] PROGMEM={1.212, 2.4, 3.56};
Hmm, jakoś mi "uciekła" ta informacja o wyrównywanie adresu do 4. Po deklaracji tablicy jako char flashdata[512] __attribute__ ((aligned (4))); IAP w końcu działa poprawnie. Dzięki za pomoc.
1. Funkcję konwersji do hex-a możnaby zrobić w oparciu o LUTa (stablicowane wartości). Poniżej prosty przykład na PC-ta dla testów ale łatwo zaadoptować do arduino: [syntax=cpp]#include <iostream> using namespace std; void tohex(unsigned long val, char* buf) { const char* const lut16 = "0123456789ABCDEF"; // tablicę można przenieś do FLASH for...
Witam, W jaki sposób skopiować zawartość tablicy która jest w pamięci flash do tablicy w pamięci RAM, Czy trzeba odczytywać bajt po bajcie, i później zapisywać do tablicy RAM czy da się to zrobić szybciej jakąś gotową funkcja jak memcpy? Np. mam taki kod; [syntax=c]#include <avr/io.h> #include <avr/eeprom.h> char tablica[22]; EEMEM char...
Nie ma. W języku C nie można przypisywać tablic, trzeba je kopiować. Można (jak tzw tablice wiszą na wskaźnikach) , z małą gwiazdką u dołu. W języku C w ogóle nie ma rasowych tablic, jest obszar pamięci i arytmetyka wskaźników, w tym operator (tak!!!) tablicowy Nie ma sprawdzania zakresu, bo nie ma informacji o zakresie. Tak naprawdę to w ogóle nie...
Cze, W moim programie chciałbym wrzucić pewną tablice stałych (dość dużą, zajęła by ona połowę RAMu w F100RB) do pamięci Flash. Problem polega na tym, że jakoś nie potrafię skłonić linkera do tego aby to uczynił. Testowo deklarowałem trochę mniejszą tablicę w taki sposób: [syntax=cpp]volatile static const char test[2][2][2][10] = {............}[/syntax]...
Dzięki za szybką odpowiedź. Nie wiem czy mnie dobrze podałem przykład, z samą tablicą jedno i dwuwymiarową nie mam problemu, natomiast z tablicą w której elementem jest struktura w skład której wchodzi kilka zmiennych. sr xxl[10]; nie jest prawidłowym zapisem ponieważ "sr" odnosi się tylko do lokalizacji danej struktury. To jest przykład z helpa...
Witam chciałem wyświetlić pojedynczy znak z tablicy i nie wiem jak to zrobić może pokaże na przykładzie : [syntax=c] char PROGMEM tab1[] = {"FLASH"}; char tab2[]={"AVR ATMEL"}; lcd_str_P(tab1[2]); //znak A lcd_str(tab2[2]); //znak R [/syntax] Wyświetlacz LCD to hd44780 biblioteka do obsługi lcd pochodzi z książki od mirekk36 niestety po skompilowaniu...
cześć takie dwie sprawy. 1. Zakładając że mam zadeklarowane dwa takie ciągi znakowe [syntax=c]char *str1 = "string numer 1"; char str2[] = "string nr 2";[/syntax] oraz jakąś funkcję która wysyła przekazany ciąg znaków dla przykładu na RS choc może być to jakiś LCD [syntax=c]void wyslijRS(char * ciag);[/syntax] z tego co rozumiem to str1 jest ZMIENNĄ...
(at)wojlej 1. sizeof char jest zawsze równe 1 więc jest tu zbędne 2. Dwa razy kopjuesz dane. Najpierw do tablicy a później do struktury. Szybciej będzie bezpośrednio odczytywać do struktury tak: [syntax=c] char *tab = (char*)&Struktura_odczytana; for(i = 0; i < size; i++) { tab[i] = Read_EEPROM_BYTE(1+i); //Adres względny - sektor 7 } [/syntax]...
Witam Chciałem umieścić tablice pod stałym adresem w pamieci flash, ale nie na koncu flasha. Do tej pory robiłem to tak: wycinek z pliku linkiera dla GCC [syntax=c] MEMORY { rom (rx): org = 0x08000000, len = 192k var (rx) : org = 0x08030000, len = 64k ram (rwx): org = 0x20000000, len = 64k } .... SECTIONS { .dane : { KEEP(*(.dane)) *(.dane*) } >var...
Witam próbuję zapisać i odczytywać tablice z napisami w pamięci FLASH, niestety nie udaje mi się to, wyświetlacz nie wyświetla nic próbowałem po przez PROGMEM jak i przez __flash co kompletnie nie zadziałało nie chciało utworzyć zmiennej. poniżej kod programu. [syntax=c]const char T1[] PROGMEM = {"DS1307"}; const char T2[] PROGMEM = {"TESTER"}; const...
Faktycznie, jeśli maski zadeklaruję jako tablicę stałych w pamięci flash to "odczyt" maski jest stały i wynosi 8 cykli, czyli prędko :) Kompilator nie wywala błędu, w bibliotece funkcja wygląda tak: [syntax=c] unsigned char sprawdz_bit(unsigned char *_port,unsigned char _bit){ ... } [/syntax] a wywołanie funkcji w kodzie programu: [syntax=c] i=sprawdz_bit(&PORTD,7);...
tablica chara chara tablica chara flash
hyundai falujące obroty medion zasilacz ferguson zmieniać kanał
bateria milwaukee bateria hilti
Jak usunąć konto Google z telefonu Motorola? Sitko we wlewie paliwa w Oplu Vivaro - czy jest obecne?