|
|
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 02 06, 22:43. Visos datos yra GMT + 2 valandos.
|
|
|
|
Forumas » Mikrovaldikliai » Kas į kurį būna padėta (stack, data, text, bss...)
|
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 |
|
|
Kas į kurį būna padėta (stack, data, text, bss...) |
Parašytas: 2008 06 12, 14:43 |
|
|
|
sveiki
Į kur kas būna padedama kompiliuojant ARM7TDMI su gcc? Labai būčiau dėkingas už nuorodas šia tema, nes google buvo tylus kaip niekad.
Taigi, mano klausimai:
stack naudojamas tik funkcijų duomenims perduoti/aplinkai (context) išsisaugoti? kaip tvarkoma rekursinė funkcija, kuri naudoja 30 kintamųjų?
Pagal ką adresuojami kintamieji data sekcijoje? Išasemblinęs C kodą po kiekvienos funkcijos radau kruva pointeriu - naudojami jie ar kas nors kita - pvz pc+offset? |
|
|
|
|
|
|
Kas į kurį būna padėta (stack, data, text, bss...) |
Parašytas: 2008 06 20, 21:27 |
|
|
|
siaip abejoju ar pats normaliai supratai ko paklausei.
pradejai kodo segmentu pavadinimu baigei C kodo asembliavimu.
taigi.
.text - tavo programos kodas. turi gulet nonvolatile memory, arba liaudiskai tariant flash'e.
.data - tavo kintamieji. guli volatile memory, kitaip sakant RAM'e.
.bss - inicializuoti kintamieji. irgi gulie RAM'e, bet pries startuojant tavo proigramai, kuri juos naudos (globalus kintamieji) jie turi buti sukopijuoti is FLASH'o i RAM'a. visais atvejais, kai to galiam isvengti, *globaliuju kintamuju naudoti nereikia*. tada nebus ir .bss segmento. jeigu naudoji, tai turi pasirupint, kad arba tavo projektas jau turetu kokinors standartni init koda asembleriu, arba pats turi ji parasyt, kitaip niekas tavo globaliu kintamuju neinicializuos.
stackas isvis nera kodo segmentas. jis yra RAM atmintyje, kuriame issaugomi tavo procesoriaus registrai iskvieciant paprogrames arba aptarnaujant pertraukimus. stacko dydi turi nurodyt kompileriui arba pats zinot iki kokio lygio ji uzpildai, kitaip perrasysi savo kintamuosius.
jei nezinai, tai stackas guli RAM'o top'e, o kintamieji saugomi pradedant nuo RAM bottom'o.
yra ir daugiau kodo segmentu, bet jei tikrai domiesi, tai atsiversk gcc manuala, (yra kiekvieno releaso doc kataloge) ir RTFM:) |
|
|
|
|
|
|
Kas į kurį būna padėta (stack, data, text, bss...) |
Parašytas: 2008 06 21, 15:15 |
|
|
|
Digix rašo: |
jei nenaudosi globaliu kintamuju tai isvis uzteks tik text segmento.
visi kintamieji bus laikomi steke. |
norėčiau sužinot, kaip kintamieji yra laikomi steke (stack) ? |
|
|
|
|
|
Kas į kurį būna padėta (stack, data, text, bss...) |
Parašytas: 2008 06 21, 15:32 |
|
|
|
labai paprastai, stekas tai tik siaipsau neribota atminis kuria kiekviena funkcija gauna savo laikiniem poreikiams. gryzus is funkcijos viskas kas tane steke buvo dingsta.
kadangi tu zinai steko adresa, tai jei nori dadeti koki kintamaji tiesiog tuo adresu ji padedi ir ta adresa padidini per tiek kiek vietos panaudojai. taip betkas gali deti kiek patinka kintamuju. |
|
|
|
|
|
Kas į kurį būna padėta (stack, data, text, bss...) |
Parašytas: 2008 06 21, 15:47 |
|
|
|
"labai paprastai, stekas tai tik siaipsau neribota atminis kuria kiekviena funkcija gauna savo laikiniem poreikiams. gryzus is funkcijos viskas kas tane steke buvo dingsta."
Nesutinku. |
|
|
|
|
|
|
Kas į kurį būna padėta (stack, data, text, bss...) |
Parašytas: 2008 06 21, 15:50 |
|
|
|
Digix rašo: |
labai paprastai, stekas tai tik siaipsau neribota atminis kuria kiekviena funkcija gauna savo laikiniem poreikiams. gryzus is funkcijos viskas kas tane steke buvo dingsta.
kadangi tu zinai steko adresa, tai jei nori dadeti koki kintamaji tiesiog tuo adresu ji padedi ir ta adresa padidini per tiek kiek vietos panaudojai. taip betkas gali deti kiek patinka kintamuju. |
ne toks klausimas buvo.
kaip įkišęs kinamąjį į stack tu jį vėliau naudoji skičiavimams. negi supushinęs dar kur nusiskaitai stack adresą kad žinotum kur pasidėjai tą savo kintamąjį?
ir šiaip, stack negali tiesiog palikti, jei jau įkėlei tai turi ir ištraukti... |
|
|
|
|
|
|
Kas į kurį būna padėta (stack, data, text, bss...) |
Parašytas: 2008 06 21, 15:56 |
|
|
|
o kam ištraukinėt? užrašei ant viršaus ir viskas kai jau nebereikia. Na o naudojimas paprastas, kai reikia to kintamojo, jis tiesiog nuskaitomas iš steko ir panaudojamas kur reikia. |
|
_________________ nepamirškit, klysti žmogiška
privatas - privatiems klausimams
arch linux |
|
|
|
|
Kas į kurį būna padėta (stack, data, text, bss...) |
Parašytas: 2008 06 21, 15:57 |
|
|
|
istarukti nereikia, tiesiok kiekviena funkcija pradzioje isisaugo steko adresa, kuri gavo ir kai is jos griztama ji ta adresa atstato.
o funkcijos viduje su steku gali daryti ka patinka.
p.s. toks stekas su push ir po tik ant X86 egzistuoja, powerpc ir arm kiek zinau neturi tokiu komandu isvis. |
|
|
|
|
|
Kas į kurį būna padėta (stack, data, text, bss...) |
Parašytas: 2008 06 21, 16:34 |
|
|
|
push pop yra ir arm ir kitiems.
o ištraukinėt tam, kad tu nelaikai adreso savo sustakintiems duomenims.
nebent kiekvienai funkcijai apsirašai vis naują stack galo adresą, nors kam to reik su mikrovaldikliais? |
|
|
|
|
|
Kas į kurį būna padėta (stack, data, text, bss...) |
Parašytas: 2008 06 21, 17:01 |
|
|
|
nesuprantu kam tau ka aprasineti.
stekas yra dalykas be pradzios ir pabaigos.
kieviena funkcija gauna steko pointeri. tada jinai nuo to steko atgal paima kiek jai skirta kintamuju (kuriuos sukure ja iskvietusi funkcija), o tada pirmyn kuria savo kintamuosius. kai reikia grizti is funkcijos tiesiog i steko pointerio registra rasai tai kas buvo pradzioje ir darai ret.
tik RISC procesoriuise registru paprastai tiek daug kad retai kada isvis prireikia kurti kinatmuosius atmintyje |
|
|
|
|
|
|
Kas į kurį būna padėta (stack, data, text, bss...) |
Parašytas: 2008 06 21, 20:09 |
|
|
|
Digix rašo: |
nesuprantu kam tau ka aprasineti.
stekas yra dalykas be pradzios ir pabaigos.
kieviena funkcija gauna steko pointeri. tada jinai nuo to steko atgal paima kiek jai skirta kintamuju (kuriuos sukure ja iskvietusi funkcija), o tada pirmyn kuria savo kintamuosius. kai reikia grizti is funkcijos tiesiog i steko pointerio registra rasai tai kas buvo pradzioje ir darai ret.
tik RISC procesoriuise registru paprastai tiek daug kad retai kada isvis prireikia kurti kinatmuosius atmintyje |
tai man asmeniškai nereikia čia kažkam taip reikėjo. nzn. na nesvarbu.
aš norėjau pasakyt iš pradžių, jog kintamieji stack saugomi tik laikinai ir nėra naudojami tiesigiai iš jo.
tiesa, aš daugiausiai sakau iš asm pusės. naudojant C, kompiliatorius tai padaro už programuotoją |
|
|
|
|
|
|
Kas į kurį būna padėta (stack, data, text, bss...) |
Parašytas: 2008 06 21, 21:43 |
|
|
|
tai as ir nepriestarauju kad jie ten saugomi laikinai. o tas laikinumas yra tai kiek veikia ta funkcija.
jug stekas yra tokia pat atmintis kaip ir visa kita, tai nematau problemu kodel ja nepasinaudoti.
asm programuotojai kiek zinau tikrai ja sitaiop nesinaudoja bet C kompiliatoriui tai pagrindinis metodas laikyti kintamiesiem. |
|
|
|
|
|
Kas į kurį būna padėta (stack, data, text, bss...) |
Parašytas: 2008 06 21, 23:41 |
|
|
|
tai beveik tokia pati atmintis. tai laikom rame, bet adresas saugomas dedikuotoje vietoje kurį automatiškai didina/mažina jugi. todėl manau ir C kompiliatorius taip pat pushina popina kai vykdo interuptą, funkciją ar šiaip. |
|
|
|
|
|
|
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 |
|
LEGO
Mänguköök,
mudelautod,
nukuvanker |
|
KCD2 Mods
Installing KCD 2 Mods,
KCD 2 Guides,
KCD 2 Cheats |
|
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 |
|
GTA 6 Wiki
GTA 6 Map,
GTA 6 Characters,
GTA 6 News |
|
FS25 Mods
Farming Simulator 25 Mods,
FS25 Maps |
|
ATS Trailers
American Truck Simulator Mods,
ATS Trucks,
ATS Maps |
|
|
|