C trzyma stringi w postaci nullz, terminatorem stringa jest 0, tak samo w twojej funkcji wyświetlającej. Problem w tym, że w 2 bajtach masz dane i brak miejsca na 0. C nie zgłasza w takiej sytuacji błędu, gdyż semantycznie taki zapis jest poprawny. Więc tak jak kolega powyżej możesz zwiększyć wymiar tablicy lub wiedząc, że każdy string ma tylko 2 litery...
Hmm. Naprawdę nie wiesz po co jest PSTR? Czasami deklaruje stringi ze specyfikatorem PROGMEM tam, gdzie jest to wygodne lub elementy się powtarzają. Czasami korzystam z PSTR. Kompilator nie widzi żadnego problemu tylko nie wiem czemu Eclipse się czepia i to tylko w jednym miejscu, podczas gdy w innych nie widzi problemu... robiw
(at)akrasuski1 stringi z napisami były umieszczone w pamięci ram, czy w progmem? IDA mi się strasznie gubiła jak analizowałem kod.
Gdzie byś chciał te Stringi trzymać w ATTiny85, które ma "całe" 512 bajtów RAMu? Skoro to jest stała, to spróbuj ją trzymać we Flashu, ale i tak nie wiem czy zrobi konkatenację stringów. Nie marnuj pamięci na zmienne, które zmiennymi nie są. Poczytaj o PROGMEM i makrze F(): https://www.arduino.cc/reference/en/lang...
Przy załączeniu napięcia atmedze na wyświetlaczu zamiast oczekiwanego napisu pojawiają się randomowe śmieci. Przy zwyczajnym resecie wszystko jest ok. Z resztą najlepie to widać na filmiku: //MAIN--MAIN--MAIN--MAIN--MAIN--MAIN--MA... portSHORT main(void) { //Inicjalizacja...
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};
Zobacz jak są zrobione języki tutaj: http://www.avrfreaks.net/index.php?name=... Kontkretnie post "glitch PostPosted: Aug 10, 2008 - 11:32 PM" Jak to za skomplikowane to zrób prościej, tak jak umiesz, a później jak trochę opanujesz C - weź się za optymalizację i pakowanie stringów w PROGMEM .
Panowie, Panowie... za głupi jestem, żeby się zniechęcić :D. Jeśli mam być szczery to właśnie takich odpowiedzi oczekiwałem. :arrow: Andrzej__S Miałeś rację! problem tkwił w w rozmiarze struktury. zmiana deklaracji z: [syntax=c]typedef struct stringg { uint8_t screen_cnt; // ilość ekranów koniecznych do wyświetlania całego tekstu char napis[]; // tekst...
(at)michalek002a Tak, jak wspomniano wyżej, możesz umieścić stringi we flash. W ten sposób zaoszczędzisz całkiem sporo pamięci RAM. Dla przykładu, zamiast[syntax=c] display.print("Custom battery");[/syntax]lepiej użyć:[syntax=c] display.print(F("Custom battery"));[/syntax][url=https://www.ard...
jedyna zaleta jaką widzę to płaska przestrzeń adresowa, co wyeliminuje obsys związany z avr-g++, To jeden z wielu powodów, dla których zrezygnowałem z AVR na rzecz ARM. Te "PROGMEM" i "PSTR" czy tam "F" w Arduino, może doprowadzić do rozpaczy. Nie ma możliwości aby w np "sprintf" ("sprintf_P") mieszać stringi z FLASH i RAM. jedynym istotnym ograniczeniem...
Jak w temacie. Mam zdefiniowaną tablicę: extern unsigned char Fonts [92] [5] PROGMEM = { costam } Jak dokopać się do danych w niej zawartych? W dokumentacji avr-libc jest jakiś przykładowy program na stringach, ale używa funkcji operujących właśnie na ciągach znaków. Po przeniesieniu do RAM-u wszystko działa poprawnie, problemy zaczynają się dopiero...
Nie wiem, jak Ci to może w ogóle działać... masz dużo szczęścia. W 90s2313 jest 128 bajtów ramu. A dla Twojego programu: kokr(at)copper:/tmp/avr$ avr-gcc -Os -mmcu=at90s2313 -Wall -std=c99 -pedantic -DF_CPU=12000000UL modem.c -o modem.elf modem.c: In function ‘main’: modem.c:136: warning: unused variable ‘temp’...
Sorki nie zauwazylem ze to progmem. Pointery w progmem nie istnieja w sposób tak rozumiany jak w normalnej pamieci - tak ze tak łatwo nie bedzie. [syntax=c]#define BUFFLEN 18 char __buff[BUFFLEN]; strncpy_P(__buff, (const char *)pgm_read_word(&(ptr_to_text[0])), BUFFLEN - 1); __buff[BUFFLEN -1 ] = 0;[/syntax] i dopiero mozesz wolac swoja funkcje cos...
Widać nie rozumiesz o co chodzi. Ani ja ani Dr.Vee nie mówimy o przeniesieniu komunikatów do ramu, tylko tablicy wskaźników na komunikaty. Najpierw musisz pobrać wskaźnik z tablicy (ponieważ napisów jest więcej), potem dopiero wykorzystując wskaźnik odczytujesz ciąg z pamięci programu. Jeśli nie chcesz przenosić tablicy wskaźników, to niestety musisz...
(at)dasej Jest jakiś techniczny argument za tym aby uprawiać tego typu archeologię?
Dziękuję za odpowiedź. Wiem że można stworzyć stałą która będzie zapisana w pamięci programu. Niemniej jednak w mojej ocenie jest to rozwiązanie co najmniej nieeleganckie, ponieważ kod będzie mało czytelny. Skoro funkcja uart_puts() działa bez tworzenia stałych w pamięci flash, a jedynie z przekazaniem stringa jako parametr funkcji, To najwyraźniej...
Autorze, dałem Ci gotowe rozwiązanie, ale nie czytałeś mojego postu uważnie. Nie czytałeś też dokumentacji ( MojaPolskieZnaki18_Bitmaps . Aby wyświetlić tekst funkcją MojaPolskieZnaki18_Glyphs 90(*) wiersz, gdyż tam znajdują się informacje o tym, gdzie w pliku MojaPolskieZnaki18_Bitmaps znajduje się obraz literki "Z". * - 90 wiersz, a właściwie, to...
A moze tak send(PSTR("Falomierz V2.0")); a gdzies tam deklaracja send void send(u08 *pBuff) { while(PRG_RDB(pBuff)) putc(PRG_RDB(pBuff++)); } ewentualnie typ prog_char prog_char a[]="Ala ma kota"; i chyba PROGMEM powoduje umnieszczenie tablicy sekcji .text...
Jeszcze tylko potrzebowałbym jeżeli ktoś wie, jak mogę to co wpisze w Textbox-ie wrzucić do zmiennej typu string na arduino. Mam taki kod: https://obrazki.elektroda.pl/2190746000_... Jeżeli dobrze rozumiem to nazwą tego textboxa jest textbox5: https://obrazki.elektroda.pl/2892608800_... https://obrazki.elektroda.pl/2535134500_...
In order to put the strings in Program Space, you have to have explicit declarations for each string, and put each string in Program Space: char string_1 Czyli deklaracja: const prog_char nazwa_ciagu[] PROGMEM = "Ciag znakow"; jest poprawna. A funkcja strcpy_P to nie strcpy . Funkcja strcpy_P właśnie służy do kopiowania ciągów z FLASH...
Jakikolwiek zdefiniowany w kodzie ciąg tekstowy zajmuje RAM. Unikaj tego za wszelką cenę. Jeśli potrafisz, w ogóle najlepiej nie używać stringów tylko właśnie char[]. F() jest makrem, podobnie działa PROGMEM. Jeśli z jakiś względów nie możesz korzystać z tych konstrukcji, pozostaje static const char[]. Tu masz przykładową funkcję zapisu do pliku wartości...
http://obrazki.elektroda.pl/4815644800_1... Witam. Dziś zaprezentuję Wszystkim urządzenie, służące w praktyce w mieszkaniu i jako model dydaktyczny podczas nauki programowania. Tajemniczym pudełkiem nie jest kolejny zasilacz laboratoryjny. ;) Jest to... "Elektroniczny zawór" . (Hmm chyba powinienem wyświetlić "Elektroniczna głowica"...
Witam! Mam następujący problem do rozwiązania... Stworzyłem strukturę napisaną w C, która jest szablonem menu wielopoziomowego pewnego programu. Początkowo projektowana była jako klasa w C++ na PCcie, teraz przenoszę ją jako strukturę do C pod AVR. Klasa była prosta, taka żeby łatwo na C przerobić. Problem polega na tym, że składniki struktury menu...
Cały program jest do napisania od nowa. Ulżę Ci w Twej niedoli :). Napisałem program - jeszcze nie do końca sfinalizowany - ale czyta temperaturę z DS-a poprawnie. Funkcje przyjmują port i pin na którym jest DS. [syntax=c] /* ****************************************... Filename - onewire.h Author - Marcin Szumlański Date...
Witam. Właśnie staram się zrobić mysz komputerową na atmedze 32 za pomocą biblioteki V-USB. Program testowałem na płytce rozwojowej z kwarcem 16MHz, atmegą 32 i wszystko działało. Po przeniesieniu się na moją płytkę z kwarcem 12MHz i przekopiowaniu kodu, na wyjściach D+ i D- mikrokontrolera nic się nie pojawia, D- stan wysoki, D+ niski. Oczywiście zmieniłem...
progmem arduino progmem extern tablica progmem
kondensator bypass pomiar iskra urządzenie amica wymiana pompy
philips senseo sterownik ładowarki akumulatora
Błąd P0406 w Citroenie - jak naprawić EGR? Integracja SmartESS z Home Assistant: Modbus, API, MQTT