Za długie pętle lub za krótkie tablice zmiennych.
Niestety ten program jest po Windowsa, a korzystam z Linuxa, zresztą musiałbym po każdej zmianie ręcznie robić tablicę.
Witam. Ja robię to tak #define EEPROM __attribute__ ((section (".eeprom"))) unsigned int tab[5] EEPROM ={18,2984,3188,3400,36200}; pozdr.
_ptr= a[0]; _ptr1= b[0]; Przecież w ten sposób nie ustawiasz adresu, tylko wskaźnikowi przypisujesz wartości z tablicy... 4\/3!!
Kilka razy już się wypowiadałem na temat lpm, jednak mój post z tematu [url=http://www.elektroda.pl/rtvforum/vi... Tablice we Flashu" będzie najbardziej odpowiedni w tym miejscu.
...to chyba wymaga odpowiedniej wersji avrgcc? robiw
Pamięć jest zorganizowana w komórki 16-bitowe, objawia się to np tym że wskaźnik programu wskazuje na słowo (2 bajty) a nie na bajt. Wszystkie instrukcje muszą być więc wyrównane do granicy dwóch bajtów. Jakkolwiek z poziomu samego programu pamięć flash jest zorganizowana bajtami, więc spokojnie można w niej umieszczać tablice bajtów bez utraty pamięci....
Nie do końca zrozumiałem. Jakim sposobem przeszukać/porównać tablicę ?
Rzeczywiscie chodzilo mi o atmel studio. Dziekuje za ludzkie wyjasnienie problemu. Kod w atmel studio jest na starcie mniejwiecej 2x mniejszy niz w avrgcc pomimo tych samych stopni optymalizacji.
Witam. Jak najlepiej zapisać ciąg znaków np "www.elektroda.pl" do pamięci eeprom procesora Atmega 128. Czy jedynym wyjściem jest zapisywanie w pętli kolejnych znaków ze sztywno określonej tablicy, czy też istnieje jakiś łatwiejszy, bardziej optymalny sposób?
a w tablicy wcale nie musi być adres procedury a np. pin portu pod który podpięta jest dioda. AVRGCC awiera funkcję liczby losowej jakby to interesowało autora.
Witajcie. Avrgcc i plik nagłówkowy eeprom.h. Nie znalazłem prostego sposobu. Czy da się umieścić zmienne w pamięci EEPROM pod konkretnym adresem nie zostawiając pola dla linkera? Potrzebuję tablicę uint16_t Tablica[16] EEMEM umieścić (a potem odczytywać) od pierwszej komórki pamięci EEPROM (czy jakiejkolwiek innej). Da się to zrobić prosto bez pisania...
Ta while jest tylko po to zeby miec pewnosc, ze LEDKA nie bedzie mrugac za szybko (zebym zauwazyl zmiany). Docelowo zamiast niej bedzieza pisywanie odczytanego znaku do tablicy (globalnej) unsigned char. Moze zgasnac w dowolnej chwili byleby tylko zgasla:). (np po 1 sek)
Powyższego kodu używam w dłuższym programie (nie zamieszczam tutaj bo straszny bałagan mam w kodzie), zapis i odczyt nie działają poprawnie, z kolei testowałem ten kod w oddzielnym małym programiku i działa. Czytałem gdzieś, żeby w obszerniejszych programach do zapisu/odczytu zmiennych w eepromie stosować struktury. Czy kolega Dr. Vee (lub ktokolwiek...
Zadeklaruj ten napis po prostu: char *text = "ok"; Wtedy funkcja, jeśli jest zdefiniowana tak, jak przytoczyłeś parę postów temu - wyświetli ją poprawnie - o ile ogólnie LCD już działa i został zainicjowany. Owa deklaracja powyżej to już jest tablica. Do znaku 'k' możesz dostać się poprzez: char znak = text[1]; Dodano po 1 Jak będziesz...
Uuuaaa. Nieźle zakręcone. Przede wszystkim nie musimy pisać wszystkiego od nowa. Do takich celów stworzono funkcję sprintf http://man.he.net/man3/sprintf Ale jak już się uprzeć to ja proponuję coś zupełnie prostszego: char* uzupelnij_zera(char* str,uint8_t count) { char bufor[10]; int len = strlen(str); if(len < count)...
Dzięki, znalazłem już i przetestowałem, choć trochę napsuł mi ten nowy atmelowski avrgcc nerwów głównie przez to, że makefile mi nie działał co używałem z winavr :/ (brakowało sh.exe (który przekopiowałem z winavr) i avr-size który nie działa wywoływany z makefile - a ręcznie tak :/ ). Co do optymalizacji kodu, po tym jak wyciąłem niepotrzebne funkcje...
Ale tu nie mówimy o tym jak konkretny kompilator, na konkretną architekturę ma to rozwiązane. Być może avrgcc tak właśnie postąpi. Jego prawo. Ale nie obowiązek. Dlatego nie zgodziłem się z twierdzeniem kol JacekCz Mówimy o tym co gwarantuje volatile. A to wynika bezpośrednio ze standardu języka C. A tam nie ma nic o tym jakoby takowej zmiennej nie...
Krótko - wszystko jest nie tak. Po pierwsze zastanów się czy chcesz modyfikować zawartość tablicy (napisywać istniejący tekst), czy przestawiać wskaźnik (pokazywać gotowe teksty, wcześniej przygotowane). Twój kod wygląda jakbyś chciał użyć drugiej wersji, ale to pewnie nieświadomie, bo w ten sposób raczej nie uda ci się wyświetlać wartości liczbowe...
zastanawiam sie ile procek potrzebuje pamieci na napisanie programu w C do obslugi wyswietlacza i programu do licznika ( podstawowe funkcje, predkosc, dystans, dystans dzienny, srednia predkosc, moze zegarek ? . Spokojnie wystarczy 8kB (gdzie ponad połowa to będzie deklaracja tablic ze znakami lub prostą grafiką dla Twojego LCD. Myślę za ATMEGA8L-8AU...
Podaj wersję kompilatora. W nowszych zostało to poprawione i kompilator odkłada tylko te rejestry, które używa. Niemniej, nawet w tak prostym kodzie może używać ich wiele, bo w większości przypadków nie wiąże się to z żadnymi kosztami, więc optymalizator nie jest na to nastawiony. Zauważ, że w C nie ma koncepcji przerwań, więc kompilator nie do końca...
Witam Na początek napisze ze jestem początkujący w C. "Napisałem" program który czyta czas i datę z PCF8583 i pokazuje to na LCD.I wszystko byłoby ok gdyby nie to ze dla testu na przerwaniu procesor ma generować krotki sygnał dźwiękowy co 1 sek. i "prawie" jest ok TYLKO raz na jakiś czas nie chce piknąć na mijającą sekundę, tak jakby gubił te sekundę....
[syntax=c] #define F_CPU 16000000UL #include <avr/io.h> #include <util/delay.h> #include <avr/interrupt.h> #include <stdio.h> #include <math.h> #define adc #define VREF 5.05 #define ADCIN PA0 #define FOSC 1843200// Clock Speed #define BAUD 9600 #define MYUBRR FOSC/16/BAUD-1 volatile unsigned int usart_bufor_ind; //indeks...
Ja zdecydowanie polecam w pierwszej kolejności naukę ANSI C. Parę luźnych uwag w odniesieniu do asemblera : 1. Najważniejsze - dobrze napisany kod będzie w większości przenośny między różnymi procesorami i nie trzeba od 0 pisać wszystkiego (jak w asm ...) gdy chcemy przejść np. z '51 na PIC. 2. Przy pisaniu kodu można skupić się na algorytmie a nie...
Witam Napisałem taki program i nie wiem czemu kompilator ATMEL STUDIO 6 zgłasza mi błędy. Moim zdaniem wszystko jest ok. Może ktoś z was widzi jakieś nieścisłości. Będę wdzięczny za pomoc Build started. Project "termostat.cproj" (Compile target(s)): Target "Compile" in file "C:\Program Files (x86)\Atmel\Atmel Studio 6.0\Vs\Compiler.targets" from project...
http://obrazki.elektroda.pl/1646258800_1... Ten świecący napis powstał jeszcze przed Świętami ale dopiero teraz po zdemontowaniu miałem czas aby go opisać. Jego podstawą jest płyta ze sklejki modelarskiej o wymiarach 60 x 25 cm. W płycie tej wywiercono 400 malutkich otworków w których umieszczono 200 diod LED. Diody te tworzą zarys...
ginar --> możesz zrobić jak chcesz (jeśli chodzi o pominięcie iluś tam początkowych bajtów), w tym przypadku także spokojnie, tak jak pisałem wyżej i to zadziała pod warunkiem, że na wszelki wypadek po kompilacji sprawdzisz sobie w pliku *.map w jakim porządku umieścił ci linker te struktury. I wcale nie trzeba się obawiać tego że ci "COŚ" tam namiesza...
Witam, Mam pewien problem powiazany z UARTem pod atmega8l... Otoz mam pewnien program ktory pieknie dziala pod attiny2313(UART sprawny, komunikacja rs232<=>pc tez dziala dobrze). Problem narodzil sie, gdy chcialem przeniesc ten program na atmege8l... Podejrzewam, ze problem lezy we flagach... Nie znam sie jeszcze na tyle dobrze na C, zeby problem...
kompilator avrgcc bibliotek avrgcc avrgcc biblioteki
łożysko skrzynia grubszy uszczelka wgranie języka polskiego
Tablet Kiano nie włącza się i nie ładuje - co robić? Gasik RC do transformatora prostownika 230V 200W