 |

|
|
Elektronika.lt portalo forumas
Jūs esate neprisijungęs lankytojas. Norint dalyvauti diskusijose, būtina užsiregistruoti ir prisijungti prie forumo.
Prisijungę galėsite kurti naujas temas, atsakyti į kitų užduotus klausimus, balsuoti forumo apklausose.
Administracija pasilieka teisę pašalinti pasisakymus bei dalyvius,
kurie nesilaiko forumo taisyklių.
Pastebėjus nusižengimus, prašome pranešti.
Dabar yra 2025 11 09, 17:11. Visos datos yra GMT + 2 valandos.
|
|
|
 |
Forumas » Mikrovaldikliai » C pradmenys
|
Jūs negalite rašyti naujų pranešimų į šį forumą Jūs negalite atsakinėti į pranešimus šiame forume Jūs negalite redaguoti savo pranešimų šiame forume Jūs negalite ištrinti savo pranešimų šiame forume Jūs negalite dalyvauti apklausose šiame forume
|
|
|
Puslapis 1 iš 2 Pereiti prie 1, 2 Toliau |
|
 |
C pradmenys |
Parašytas: 2006 01 22, 23:15 |
|
|
|
|
Noriu aprašyti masyvą, kurį reikia patalpinti į eeprom:
eeprom char mano_masyvas[]={"pirmas", "antras", "trecias"};
Toliau noriu nuskaityti reikšmes:
mano_masyvas[0], mano_masyvas[1] ir mano_masyvas[2].
Įsivaizdavau, kad mano_masyvas[0]="pirmas", mano_masyvas[1]="antras" ir mano_masyvas[2]="trecias", tačiau taip nėra. Įsivaizduoju, kad čia kažkas elementaraus, bet kolkas kažko nesupratu:(. Gal galite padėti susigaudyti. |
|
|
|
|
|
 |
C pradmenys |
Parašytas: 2006 01 23, 11:55 |
|
|
|
|
| taip ir neturi buti. greiciausiai naudoji 8 bitu kontroleri, kurio eeprom organizacija irgi yra XX x 8 bit. kadangi atminties adresas gali saugoti 8 bitu reiksne, o ASCII kodavimas butent ir yra 8 bitu (nu tarkim 7, neesme), tai vienam adrese gali saugoti tik viena simboli. turetum daryt dvimati masyva arba nusiskaitineti po viena simboli. siaip manau ta pacia informacija perduotum vietoj 'pirmas', naudodamas tiesiog '1'. sutaupysi nemazai atminties:) |
|
|
|
|
|
 |
C pradmenys |
Parašytas: 2006 01 23, 12:16 |
|
|
|
|
| Ačiū už komentarą. Jau susigaudžiau, kad tokio tipo masyve galiu aprašyti tik konkrečius simbolius. Mano tikslas yra sukurti eilę užrašų, kurie būtų, kaip meniu elementai LCD ekrane ir kuriuos galėčiau įrašyti į vidinį uC EEPROM arba dar geriau į išorinį. Kaip galima būtų efektyviau tai organizuoti? Ar naudoti dvimačius masyvus, o gal yra ir kitas būdas? |
|
|
|
|
|
 |
C pradmenys |
Parašytas: 2006 01 23, 12:38 |
|
|
|
|
Jeigu masyvą aprašyčiau taip:
char masyvas[3][33]={{"pirmas"}, {"antas"}, {"trecias"}};
Ar tai reikštų, kad masyvas[0][33]="Pirmas" ar tai bus tik pirmo užrašo 33 simbolis? |
|
|
|
|
|
 |
C pradmenys |
Parašytas: 2006 01 23, 13:44 |
|
|
|
|
tikria taip )
siaip C kalboje nera tokio dalko kaip String tipas .. todel cia butu galima suzaisti sekanciai :
pradziai apsirasai visas reikaimas eilustes
unsigned char eil_pirmas[] = "pirmas";
unsigned char eil_antras[] = "antras";
....
zinoma nepamrisk nurodyti kad dumenys talpinami eeprom atmintyje
tuomet pagal C principus masyvo vardas yra rodykle i masyva .. tada beleika susidaryti redukliu masyva ...
unsinged char * masyvas[]={eil_pirmas,eil_antras,...};
sis masybas jau bus talpinamas paprastoje atmintyje .. o rodukliu reiksmes turertu atsitikti pirmo eilutes elemento adresa eeprom atmintyje
tai tiek ... |
|
|
|
|
|
 |
 |
C pradmenys |
Parašytas: 2006 01 23, 14:19 |
|
|
|
|
Dar kartą ačiū. Ar teisingas bus tada toks kodas:
...
eeprom char menu1[]="pirmas";
eeprom char menu2[]="antras";
eeprom char menu3[]="trecias";
char *menu[]={menu1, menu2, menu3};
char lcd_buffer[33];
main()
{
sprintf(lcd_buffer, *menu[0]);
lcd_puts(lcd_buffer); // į LCD turėtų išvesti "pirmas"?????
}
Ar teisingai supratau? |
|
|
|
|
|
 |
 |
C pradmenys |
Parašytas: 2006 01 23, 14:26 |
|
|
|
|
| Domantas rašo: |
Dar kartą ačiū. Ar teisingas bus tada toks kodas:
...
eeprom char menu1[]="pirmas";
eeprom char menu2[]="antras";
eeprom char menu3[]="trecias";
char *menu[]={menu1, menu2, menu3};
char lcd_buffer[33];
main()
{
sprintf(lcd_buffer, *menu[0]);
lcd_puts(lcd_buffer); // į LCD turėtų išvesti "pirmas"?????
}
|
na visu pirma tai :
sprintf(lcd_buffer, menu[0]);
o siaip nezinau.. jiegu sprintf supras kas riekai duomenis nuskaityti butent is eeprom tai jo... bet manau kad reikai nurodyti iskur duomenis krauti.. nes viena reiksmiskai nera nurodyta kur yra laikomi tie duomenys ... |
|
|
|
|
|
 |
 |
C pradmenys |
Parašytas: 2006 01 23, 14:30 |
|
|
|
|
Kompileris tokio kodo nesupranta. Rašo "pointer are to different memory classes". Tada pataisius, kodą, kaip žemiau, sukompiliuoja, tik negaliu dabar patikrinti ar veikia ant kontrolerio.
...
eeprom char menu1[]="pirmas";
eeprom char menu2[]="antras";
eeprom char menu3[]="trecias";
eeprom char *menu[]={menu1, menu2, menu3}; //pataisyta
char lcd_buffer[33];
main()
{
sprintf(lcd_buffer, *menu[0]);
lcd_puts(lcd_buffer); // į LCD turėtų išvesti "pirmas"?????
} |
|
|
|
|
|
 |
C pradmenys |
Parašytas: 2006 01 23, 14:51 |
|
|
|
|
| na siaip teisybe pasake .. riekejo ten tipo pakeitima padaryti .. bat siaip pagal C standarta turi tik Warning`a ismeti ... |
|
|
|
|
|
 |
C pradmenys |
Parašytas: 2006 01 23, 15:18 |
|
|
|
|
jeigu įrašau: sprintf(lcd_buffer, menu[0]), tai kompileris rodo tą pačią klaidą.
O kaip tipo pakeitimas padaromas? |
|
|
|
|
|
 |
C pradmenys |
Parašytas: 2006 01 23, 15:34 |
|
|
|
|
pakeitimas daromas taip paprastai:
jeigu turi kintamaji x = eeprom cahr * o reikia char * tai
(char *)x;
bet sitoje vietoje manau kad tau glai nepadeti.. juolab kai tu naudoji sprintf... nes klausimas ar si funkcija supras is kur skaityti duomenis ..
gali buti kad tau reikai nuskaityti duomenis is eeprom i ram stringa ir tik tada naudot.. |
|
|
|
|
|
 |
C pradmenys |
Parašytas: 2006 01 23, 17:13 |
|
|
|
|
Radau dar tokią išraišką:
eeprom enum days {
sunday, monday, tuesday, wednesday,
thursday, friday, saturday} days_of_week;
Pamėginsiu namie pasižaisti, kad klausimai nebūtų visai kvaili:) |
|
|
|
|
|
 |
C pradmenys |
Parašytas: 2006 01 23, 18:00 |
|
|
|
|
enum tai yra isvardinimas .. labai patogu naudoti kai tau reikia surasytai sarasa kokia nuo n iki m ir panasiai .. vietoi to kad daryti define
taipogi ta enum glai naudoti kaip tipa .. ir t.t.
istikro jis neturi savje pacio eilutes .. kiekvienam elementui yra peiskiriamas skaiciukas .. automatiskai atrba pats priskiri |
|
|
|
|
|
 |
C pradmenys |
Parašytas: 2006 01 24, 12:38 |
|
|
|
|
lengviausiai tau butu apsirasyt putchar paprograme, kurioje nurodysi kur deti duomenis, o poto teliks rasyti printf ('Laba diena'); ir tau viskas tiesiai keliaus i lcd. nes printf kreipiasi i putchar parograme. kadangi neparasai nei koki proca nei koki lcd naudoji tai nieko konkreciau ir nepasakysiu.
ziurint kokio dydzio ten ta meniu nori sukurti. |
|
|
|
|
|
 |
 |
C pradmenys |
Parašytas: 2006 01 24, 13:50 |
|
|
|
|
Naudoju Atmega8515 ir stndartinį 2x16LCD ir dar kelis 1wire ir I2C įrenginukus, bei CodeVisionAVR kompilerį.
Taip pat naudoju standartines kompilerio bibliotekas: stdio.h, lcd.h ir kt.
Kol kas supratau, kad negaliu teisingai susikalbėti su duomenimis esančiais FLASH, SRAM ir EEPROM. Kol lokalūs kintamieji patalpinti į SRAM, viskas veikia. Taip pat kodą kompiliuoja, kai duomenis perkeliu į FLASH (netikrinau tik kaip realiai veikia kontroleris). Kai tik mėginu perkelti į EEPROM - nekompiliuoja. Stringa ties sprintf(..). Tikriausiai reikia padaryti taip, kad duomenys iš EEPROM atsidurtų ten, kur supranta sprintf()? |
|
|
|
|
|
|
 |
Google paieška forume |
|
|
 |
Naujos temos forume |
|
 |
FS25 Tractors
Farming Simulator 25 Mods,
FS25 Maps,
FS25 Trucks |
 |
ETS2 Mods
ETS2 Trucks,
ETS2 Bus,
Euro Truck Simulator 2 Mods
|
 |
FS22 Tractors
Farming Simulator 22 Mods,
FS22 Maps,
FS25 Mods |
 |
VAT calculator
VAT number check,
What is VAT,
How much is VAT |
 |
Dantų protezavimas
All on 4 implantai,
Endodontija mikroskopu,
Dantų implantacija |
 |
FS25 Mods
FS25 Maps,
FS25 Cheats,
FS25 Install Mods |
 |
FS25 Mods
Farming Simulator 25 Mods,
FS25 Maps |
 |
ATS Trailers
American Truck Simulator Mods,
ATS Trucks,
ATS Maps |
|

|
 |