Elektronika.lt
 2025 m. liepos 29 d. Projektas | Reklama | Žinokite | Klausimai | Prisidėkite | Atsiliepimai | Kontaktai
Paieška portale
EN Facebook RSS

 Kas naujo  Katalogas  Parduotuvės  Forumas  Tinklaraščiai
 Pirmas puslapisSąrašas
 Forumas / + pokalbiai
 - Paieška forume
 - D.U.K. / Forumo taisyklės
 - Narių sąrašas
 - Registruotis
 - Prisijungti

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 07 29, 02:42. Visos datos yra GMT + 2 valandos.
 Forumas » Mikrovaldikliai » bėda su kintamaisiais
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 12
Pereiti prie 1, 2  Toliau
Pradėti naują temą  Atsakyti į pranešimą Rodyti ankstesnį pranešimą :: Rodyti kitą pranešimą 
 bėda su kintamaisiais
PranešimasParašytas: 2007 04 03, 19:39 Pranešti apie taisyklių pažeidimą Atsakyti su citata
Domantas
Dažnas dalyvis
Dažnas dalyvis
Peržiūrėti vartotojo aprašymą Siųsti asmeninį pranešimą
Niekaip nepavyksta išgauti reikiamo dydžio kintamojo.
uC ATmega16, CodeVisionAVR compileris, kodo fragmentas:

int funkcija (int b)
{
long int c;

c = 365.25*100;
sprintf(lcd_buffer,"c=%i", c);
lcd_puts(lcd_buffer);
...
return b;
}
rezultate gaunu c=-29011, nors turėtų būti 36525;

kažkur grybą pjaunu su kintamųjų tipais, bet kur?
 bėda su kintamaisiais
PranešimasParašytas: 2007 04 03, 19:42 Pranešti apie taisyklių pažeidimą Atsakyti su citata
vakaras
VIP narys
VIP narys
Peržiūrėti vartotojo aprašymą Siųsti asmeninį pranešimą Apsilankyti vartotojo tinklapyje ICQ numeris
C aprašyk kaip unsigned long
 bėda su kintamaisiais
PranešimasParašytas: 2007 04 03, 21:42 Pranešti apie taisyklių pažeidimą Atsakyti su citata
Domantas
Dažnas dalyvis
Dažnas dalyvis
Peržiūrėti vartotojo aprašymą Siųsti asmeninį pranešimą
Neveikia Sad
Toks jausmas, kad supranta tik double ir float, kaip 32 bit, o visi kiti tik 16 bit.
Aprašyme sakoma sekančiai:
Type Size (Bits) Range
bit 1 0 , 1
char 8 -128 to 127
unsigned char 8 0 to 255
signed char 8 -128 to 127
int 16 -32768 to 32767
short int 16 -32768 to 32767
unsigned int 16 0 to 65535
signed int 16 -32768 to 32767
long int 32 -2147483648 to 2147483647
unsigned long int 32 0 to 4294967295
signed long int 32 -2147483648 to 2147483647
float 32 ±1.175e-38 to ±3.402e38
double 32 ±1.175e-38 to ±3.402e38

Gal kažkur pačiam kompileriui reikia nurodyti, kad teisingai interpretuotų kintamuosius?
 bėda su kintamaisiais
PranešimasParašytas: 2007 04 03, 23:36 Pranešti apie taisyklių pažeidimą Atsakyti su citata
vakaras
VIP narys
VIP narys
Peržiūrėti vartotojo aprašymą Siųsti asmeninį pranešimą Apsilankyti vartotojo tinklapyje ICQ numeris
Domantas rašo:
Toks jausmas, kad supranta tik double ir float, kaip 32 bit, o visi kiti tik 16 bit.
Gal kažkur pačiam kompileriui reikia nurodyti, kad teisingai interpretuotų kintamuosius?


Netiesa. long visuose kompiliatoriuose visiems CPU priima 32 bitus be jokių papildomų nustatymų.
Greičiausiai sprintf neteisingai interpretuoja.
Rekomendacijos:
- nenaudok sprintf (asmeninė nuomonė);
- Venk float skaičių mikrokontroleriuose. Beveik visada galima rezultatą gauti naudojant sveikų skaičių aritmetiką.
 bėda su kintamaisiais
PranešimasParašytas: 2007 04 04, 00:37 Pranešti apie taisyklių pažeidimą Atsakyti su citata
Digix
VIP narys
VIP narys
Peržiūrėti vartotojo aprašymą Siųsti asmeninį pranešimą
float niekas niekur nenaudoja be reikalo.
gaila nera 16+8 bitu float nes kablelis daznai butinas o tikslumas ne.

printf kontroleriuose daznai pusiau neveikianti. siulau perziureti kaip ji atrodo bibliotekoje kitaip daznai kyla problemu kai panaudoji kokia retesne jos funkcija
 bėda su kintamaisiais
PranešimasParašytas: 2007 04 04, 11:35 Pranešti apie taisyklių pažeidimą Atsakyti su citata
Domantas
Dažnas dalyvis
Dažnas dalyvis
Peržiūrėti vartotojo aprašymą Siųsti asmeninį pranešimą
Jeigu tik sprintf blogai interpretuotų, tai dar pusė bėdos, bet blogiausiai, kad skaičiavimus neteisingai atlieka. Nesu labai stiprus C, todėl gan ilgai užtrukau, kol pastebėjau problemą. Tada tiesiog paėmiau paprastą programą su įvairių tipų kintamaisiais ir bandžiau išvedinėti į LCD. Gerai gavosi tik su double ir float, o long neveikia. Problema ta, kad reikia operuoti tiek su sveika skaičių dalimi, tiek su esančia po kablelio.

O float tikrai norėtūsi išvengti, nes kombinacijoje su sprintf žiauriai daug kodo suėda jie, bet naudoju DS18B20 daviklį ir standartines bibliotekas.
 bėda su kintamaisiais
PranešimasParašytas: 2007 04 04, 11:41 Pranešti apie taisyklių pažeidimą Atsakyti su citata
Digix
VIP narys
VIP narys
Peržiūrėti vartotojo aprašymą Siųsti asmeninį pranešimą
jei pasiziureti i tavo programa tai tu jug ten kableli esi padejes !!

o kur kablelis ten butinas float, jokie kiti negali tureti kablelio
jei nori float visdelto nenaudoti, tai iseitis tokia, skaizius padaugink sakykim is 1000 kad kablelio nebeliktu o atsakyma galesi pateikti miliCelcijais Smile

gaila bet tikrai float matematika sueda daug vietos, bet su atmega16 jos tau nepritruks. tai nematau reikalo vargti.
 bėda su kintamaisiais
PranešimasParašytas: 2007 04 04, 11:53 Pranešti apie taisyklių pažeidimą Atsakyti su citata
Domantas
Dažnas dalyvis
Dažnas dalyvis
Peržiūrėti vartotojo aprašymą Siųsti asmeninį pranešimą
su sprintf aš tiesiog išvedinėjau didelį skaičių be kablelio ir be jokio veiksmo, bet gal čia ir buvo sprintf problema.
O veiksmas man reikalingas su dideliais skaičiais ir po kablelio, bet rezultate reikalingas sveikas didelis skaičius, kur dalis po kablelio tiesiog atmesta.
 bėda su kintamaisiais
PranešimasParašytas: 2007 04 04, 12:00 Pranešti apie taisyklių pažeidimą Atsakyti su citata
Digix
VIP narys
VIP narys
Peržiūrėti vartotojo aprašymą Siųsti asmeninį pranešimą
pamegink %ld "L" vietoje %i
kiek zinau i tas pats kas d kas reiskia int o ne long
 bėda su kintamaisiais
PranešimasParašytas: 2007 04 04, 18:22 Pranešti apie taisyklių pažeidimą Atsakyti su citata
Domantas
Dažnas dalyvis
Dažnas dalyvis
Peržiūrėti vartotojo aprašymą Siųsti asmeninį pranešimą
Digix rašo:
pamegink %ld "L" vietoje %i
kiek zinau i tas pats kas d kas reiskia int o ne long


Ačiū, specifikatorius padėjo ir long int veikia Smile
 bėda su kintamaisiais
PranešimasParašytas: 2007 04 07, 15:52 Pranešti apie taisyklių pažeidimą Atsakyti su citata
JAULER
Senbuvis
Senbuvis
Peržiūrėti vartotojo aprašymą Siųsti asmeninį pranešimą Siųsti el. laišką MSN Messenger
hmm, kam tie visi long ir t.t. įsimininėt juk C turi paprastą komanda (winAVR)
Kodas:
uint08_t x;
uint16_t x;
uint32_t x;
uint64_t x;
yra ir paprastiem o ne unsigned`am, tas skaičius reiškia bitų skaičių.

_________________
nepamirškit, klysti žmogiška Wink
privatas - privatiems klausimams
arch linux Wink Smile
 bėda su kintamaisiais
PranešimasParašytas: 2007 04 08, 16:44 Pranešti apie taisyklių pažeidimą Atsakyti su citata
JAULER
Senbuvis
Senbuvis
Peržiūrėti vartotojo aprašymą Siųsti asmeninį pranešimą Siųsti el. laišką MSN Messenger
hmm, galima paklausit, kaip reikia įkišti char`ą (16 simbolių) į eeprom arba program atmintį, nepamenu ką ten reikia prirašyt... maždaug dabar yra taip:
Kodas:
unsigned char sm[16];

kaip įkelti jį į eeprom`ą arba program atmintį? (kol kas sugalvočiau tik su adresų rašinėjimais ir atskirai po vieną surašyt, bet atsimenu, kad kažkaip sukišti galima iškart visą, kad C kalba pasirūpintu sukišimu, bet nepamenu kaip...).

_________________
nepamirškit, klysti žmogiška Wink
privatas - privatiems klausimams
arch linux Wink Smile
 bėda su kintamaisiais
PranešimasParašytas: 2007 04 08, 18:29 Pranešti apie taisyklių pažeidimą Atsakyti su citata
vitukas
Dažnas dalyvis
Dažnas dalyvis
Peržiūrėti vartotojo aprašymą Siųsti asmeninį pranešimą
Priekyje prirašyk const, jeigu keli į program memory. Su EEPROM nesusidariau Embarassed
 bėda su kintamaisiais
PranešimasParašytas: 2007 04 08, 21:09 Pranešti apie taisyklių pažeidimą Atsakyti su citata
JAULER
Senbuvis
Senbuvis
Peržiūrėti vartotojo aprašymą Siųsti asmeninį pranešimą Siųsti el. laišką MSN Messenger
uždėjus const pasidaro read-only konstantų masyvas, deja man toks netinka. Confused

_________________
nepamirškit, klysti žmogiška Wink
privatas - privatiems klausimams
arch linux Wink Smile
 bėda su kintamaisiais
PranešimasParašytas: 2007 04 09, 15:29 Pranešti apie taisyklių pažeidimą Atsakyti su citata
augyy
Dažnas dalyvis
Dažnas dalyvis
Peržiūrėti vartotojo aprašymą Siųsti asmeninį pranešimą
Citata:
hmm, galima paklausit, kaip reikia įkišti char`ą (16 simbolių) į eeprom arba program atmintį, nepamenu ką ten reikia prirašyt... maždaug dabar yra taip: Kodas:
unsigned char sm[16];


kaip įkelti jį į eeprom`ą arba program atmintį? (kol kas sugalvočiau tik su adresų rašinėjimais ir atskirai po vieną surašyt, bet atsimenu, kad kažkaip sukišti galima iškart visą, kad C kalba pasirūpintu sukišimu, bet nepamenu kaip...).


Tiesiog prirašyk eeprom:
Kodas:
eeprom unsigned char sm[16];

Tiesa nepamiršk kad jei priskirsi kintamajam pradines reikšmes, programuojant su ponyprogu atskirai turesu irašyti ir eeprom. O šiaip skaitai/rašai kaip paprasta kintamaji
Pradėti naują temą  Atsakyti į pranešimą Pereiti prie 1, 2  Toliau
 
Forumo sistema: phpBB
 „Google“ paieška forume
 Kas naujesnio?
 Naujos temos forume

Global electronic components distributor – Allicdata Electronics

Electronic component supply – „Eurodis Electronics“

LOKMITA – įvairi matavimo, testavimo, analizės ir litavimo produkcija

Full feature custom PCB prototype service

Sveiki ir ekologiški maisto produktai

Mokslo festivalis „Erdvėlaivis Žemė

LTV.LT - lietuviškų tinklalapių vitrina

„Konstanta 42“

„Mokslo sriuba“

www.matuok.lt - Interneto spartos matavimo sistema

Programuotojas Tautvydas – interneto svetainių-sistemų kūrimas

PriedaiMobiliems.lt – telefonų priedai ir aksesuarai

Draugiškas internetas

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
FS25 Mods
FS25 Harvesters, FS25 Tractors Mods, FS25 Maps Mods
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
Football Training Kit
Football Training Equipment, Football Skills, Football Training
Reklama
‡ 1999– © Elektronika.lt | Autoriaus teisės | Privatumo politika | Atsakomybės ribojimas | Turinys | Reklama | Kontaktai LTV.LT - lietuviškų tinklalapių vitrina
Ets2 mods, Ats mods, Beamng drive mods
allmods.net
„MokslasPlius“ – mokslui skirtų svetainių portalas
www.mokslasplius.lt
Optical filters, UV optics, electro optical crystals
www.eksmaoptics.com
LTV.LT – lietuviškų tinklalapių vitrina
www.ltv.lt/technologijos/
Elektroninių parduotuvių optimizavimas „Google“ paieškos sistemai
www.seospiders.lt
FS22 mods, Farming simulator 22 mods,
FS22 maps

fs22.com
Reklama


Reklama