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...
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...
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...
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
Poczytałem trochę manuala do avr-libc dołączonego do najświeższego WinAVR i jak byk pisze tam, że aby zadeklarować i zainicjować tablicę łańcuchów w pamięci programu trzeba osobno zadeklarować samą tablicę jak i stringi ... Natomiast jeśli chodzi o struktury to powyższa reguła nie znajduje zastosowania! Ależ znajduje: tmf polega na stworzeniu typu...
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...
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 .
(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.
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...
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...
Może kombinuję (nie czuje intuicyjnie tych słów kluczowych) const prog_char* info[] PROGMEM = ... prog_long /*prog_void */ const prog_char* info[] PROGMEM = ... warto sprawdzić odwrocenia kolejności słów, ma to inny sens. Manipulując również kolejnością słow ... musi być rozwiązanie lepsze niż wszystko w RAM 2. Takie coś: char *LINE1 = PSTR("Pierwsza...
(at)rewolt90 Nie jest dokładnie tak jak piszesz. AVR gcc domyślnie umieszcza literały znakowe ("abcd...") w pamięci RAM. W twoim oryginalnym programie te literały były dodatkowo kopiowane na stos przy wywołaniu funkcji main co powodowało przepełnienie stosu. Dodanie static nie wymusza tego, że te zmienne wylądują w pamięci programu. Uniknąłeś w ten...
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};
(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...
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...
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...
Witam, Męczę się z kawałkiem kodu, który wbrew (mojej) logice, działa nie tak jak powinien. Chcę wyświetlić element tablicy stringów z pamięci PGMEM, a w niektórych wypadkach otrzymuję śmieci. 05, Piątek 05, ŔGŔFŔEŔDŔCŔBŔAŔ(at)Ŕ?Ŕ>Ŕ=Ŕ<Ŕ;Ŕ:... 05, ŔGŔFŔEŔDŔCŔBŔAŔ(at)Ŕ?Ŕ>Ŕ=Ŕ<Ŕ;Ŕ:... Zmienne idx i d.WeekDay zawierają tą samą wartość,...
Jeżeli ostrzeżenie, o którym piszesz, jest spowodowane przyczyną, o której myślę, to pomoże zmiana nagłówka funkcji: void uart_putstr_p(prog_char* struart) na postać: void uart_putstr_p(const char* struart) Wiąże się to z dosyć "zakręconym" funkcjonowaniem atrybutu PROGMEM. który wchodzi w skład definicji typów postaci prog_<typ>...
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...
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...
... Moze inaczej sie zapytam: Jak zadeklarowac zmienna do wyswietlenia, aby wstawic ja do funckji pisztekst(PSTR("wyswietl cos")) Zamiast "wyswietl cos" chcialbym wstawic zmienna,ktorej wartosc to "wyswietl cos". W ten sposób sie nie da :( Podejrzewam , że niezbyt dokładnie przeczytałeś manuala.Jest tam napisane: #define PSTR...
(at)dasej Jest jakiś techniczny argument za tym aby uprawiać tego typu archeologię?
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"...
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_...
Przeczytałem wątek z dużym zainteresowaniem, wracam do uP po paru latach natomiast jestem starym programistą C Nie będę redagował jednolinijkowych cytatów, wypowiem się w punktach mam nadzieję każdy wyczyta co pochwalam / czemu się sprzeciwiam 0) nie zmienimy starego albo nie swojego kodu (np AVR czy innego) ale nowy możemy pisać lepiej. a) makra to...
Hmm constexpr, heh do tej pory znałem albo #define albo const, muszę poczytać ;) Szczerze mówiąc do końca nie wiem co może tutaj pożerać pamięć, największe połacie strony są przechowywane jako PROGMEM Poprawić by można było np wysyłanie strony po kawałku niż z jednego dużego Stringa
Zainkluduj bibliotekę avr/pgmspace.h i do każdego stringa dodaj atrybut PROGMEM. Tutaj masz opisy dostępnych funkcji http://www.nongnu.org/avr-libc/user-manu...
Cześć Mądrzy Ludzie, podpowiedzcie jak sprawdzić długość stringa w pamięcie flash atmegi. Myślałem że "sizeof" zadziała, a tu zonk. Kod proszę umeścić w znacznikach. Robak
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, Próbuję korzystać z biblioteki Peter Fleury do obsługi usart-u, której listing znajduje się poniżej: PLIK uart.c /***************************************... Title: Interrupt UART library with receive/transmit circular buffers Author: Peter Fleury <pfleury(at)gmx.ch> http://jump.to/fleury File:...
Witam.. Mam problem z poprawieniem funkcji która będzie odczytywać dane z FLASH, ponieważ zależy mi na pamięci i chce jej troszkę zaoszczędzić. Mianowicie mam tak a funkcje która działa : [syntax=c] void LCD_string(unsigned char *s,unsigned char x,unsigned char y,unsigned char type,unsigned char mode) { unsigned char cx, sx; cx=x; sx=(((unsigned char)type>>4)&0x0f)+1;...
Cześć, Mam problem z kodem na Atmega32u4. Mam dwie PCB z Atmega 32u4 - w jednej z nich podłączony jest silnik DC poprzez driver do pinu PWM. W drugiej jest tylko nadajnik. Używam NRF24l01, do którego zakupiłem biblioteki od firmy Atnel. Wydaje mi się, że musiałem popełnić gdzieś błąd w kodzie, ponieważ nie wszystkie, a nawet mniejszość pakietów dociera...
Witam Mam problem nie do przejścia, znalazłem na internecie kod do obsługi właśnie tego modelu ekranu, standardowo pisany był pod ATmega32, lecz pod ATmega8 również ma działać. Rozpocząłem naukę poruszania się po Eclipse, wcześniej pracowałem na "Programmers Notepad http://obrazki.elektroda.pl/8462891800_1... Konfiguracja pinów w bibliotece...
oto schemat: http://obrazki.elektroda.pl/2569720300_1... [syntax=c]#include <avr/io.h> #include <util/delay.h> #include <avr/pgmspace.h> #include <avr/interrupt.h> #include <string.h> #include <avr/eeprom.h> #include <stdint.h> #include <stdlib.h> #include "MK_RFM70/rfm70.h" #include "MKUART/mkuart.h"...
Witam, Sprawa ma się następująco. Staram się podłączyć wyświetlacz od Nokii 5110 model PCD8544. Używam Atmega8A i zasilam ją 5V. Wyświetlacz zasilam 3V(z hakiem). Staram się wykorzystać sprzętowe SPI przy czym używam ISP do programowania mikrokontrolera dlatego skorzystałem z rady z tego linku: http://mikrokontrolery.blogspot.com/2011...
Ok, spróbujmy na tym kodzie, jednak sam niezbyt dam radę go przeanalizować, może wkleję go i byłbym bardzo wdzięczny za pomoc w rozszyfrowaniu tego kodu. [syntax=cpp]#include <avr\io.h> #include <avr\pgmspace.h> #include <util\delay.h> #include <avr\interrupt.h> #include <string.h> #include <stdlib.h> #define LEDDISPNO4...
Dobrze. Plik 'fonty.h' wygląda następująco http://obrazki.elektroda.pl/9227716000_1... zrobiłem dla każdego wiersza tablicę... [syntax=cpp]uint8_t napis0[]={0x89,0xcf,0x3e,0x88}; uint8_t napis1[]={0xda,0x28,0xa0,0x90}; uint8_t napis2[]={0xaa,0x28,0xa0,0xa0}; uint8_t napis3[]={0x8b,0xef,0x38,0xc0}; uint8_t napis4[]={0x8a,0x2a,0x20,0xa0};...
Chciałbym się odnieść do linku https://www.elektroda.pl/rtvforum/topic3... w którym w skrócie udało się zrobić cos takiego, że w zależniści od bajtu nr 0 w pamięci EEPROM ESP wchodzi albo w tryb konfiguracyjny, gdzie tworzy sieć wifi do wprowadzenia parametrów dla docelowej sieci wifi. Po zapisie ESP32 sie resetuje i wchodzi w tryb normalnej...
Te mieszanie w pliku main.c jest zbędne aby system "zaakceptował" większą ilość osi czy przycisków. http://obrazki.elektroda.pl/4573418200_1... Zobacz że tylko zmieniłem tabele - reszta jest jak z pierwszego postu - no i nazwę (ale to nie ma wpływu). [syntax=c] /* Projekt oparty na przykładzie myszki USB autora: Christiana Starkohanna na licencji:...
AVRStudio 4.18 + WINAVR najnowszy. Reszta kodu i bibliotek to V-USB i tego nie ma sensu zamieszczać. Niezamieszczona część pliku main.c to ustawienia portów, zmiennych itp. Jak tak mocno chcesz to go zamieszczam. Ciekawi mnie czy jest tam coś istotnego co zataiłem. [syntax=c]#include <avr/io.h> #include <avr/wdt.h> #include <string.h>...
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...
Może się komuś przyda, wiem że żadne odkrycie ale gotowe do wgrania i testowania. Działające testowe programiki, płytka NodeMCU v3, moduły działają po I2C W pliku BMP280.h należy ustawić adres modułu, w moim przypadku #define BMP280_ADDRESS (0x76) BMP280 Dodano po 1 Wyświetlam na wyświetlaczu OLED temperaturę, wilgotność i ciśnienie, wielkości wyświetlają...
Nie miałem za bardzo czasu ale wracam do nierozwiązanego problemu. http://obrazki.elektroda.pl/7699775600_1... http://obrazki.elektroda.pl/3826926900_1... Tak wyglądają screeny po wywołaniu programu CRCGEN. Pliki wgrane programatorem działają poprawnie a przez bootloader tylko ten krótki (choć po przemieleniu ma także...
Witam! Mój problem polega na tym, że muszę podłączyć atmege do Internetu. Posiadam gotowy moduł uruchomieniowy EvB 4.3 + Ethernet v2. Sterownik oparty na atmedze ma sterować temperaturą wody i jeśli chodzi o jego działanie to wszystko jest oki. Za pomoca przycisków zmienia się temperaturę zadaną i serwo zmienia swój kąt obrotu. Uruchomiłem też na niej...
progmem arduino progmem extern tablica progmem
volvo silnika wymiana grzałki regulacja krańcówki rolety
logitech z5500 sterownik rolet
Jak wzbudzić prądnicę od pralki Polar? Mostkowanie bezpiecznika zwłocznego - czy to bezpieczne?