logo elektroda
logo elektroda
X
logo elektroda
Adblock/uBlockOrigin/AdGuard mogą powodować znikanie niektórych postów z powodu nowej reguły.

Funkcja główna main w jakich częsciach pamięci zapisuje

valstus 03 Mar 2013 19:54 1296 10
  • #1 12012888
    valstus
    Poziom 21  
    Czy ktoś potrafi mi wyjaśnić drogę programu od napisania do umieszczenia w mikrokontrolerze ?
    kompilator odkłada funkcjie main na stosie ?

    co się dzieje np. z takim zapisem :
    
    int wyw(4,5); // deklaracja funkcji wyw
    
    int main(void)  //Co się dzieje z funkcją i jej ciałem gdzie ona trafia proszę o     schemat tego procesu
    {
    int zmienna=5; //gdzie jest najpierw zapisywana ta zmienna ?
    
    zmienna=wyw(4,5); //wywołanie tej funkcji gdzie ono trafia ??
    }
    
    return 0;
    
    
    
  • #2 12012903
    BlueDraco
    Specjalista - Mikrokontrolery
    Funkcja (instrukcje programu) jest w pamięci ROM (Flash). Dane statyczne są w pamięci RAM w sekcji danych, argumenty, zmienne lokalne niestatyczne, ślady i wszystko, co związane z wołaniem funkcji - w sekcji stosu, zwykle na końcu pamięci RAM.
  • #3 12012995
    valstus
    Poziom 21  
    kompilator dokonuje podziału tak jak kolego wyżej napisałeś??

    jak dzieje się np. ze zmienną umieszczoną w funkcji do której sie odwołałem z main powyżej np wyw(); tam przecież zmienna i jej wartość znika wraz ze zwróceniem wyniku .
    Funkcja main różni się wówczas gdyż nigdy nie zwróci wyniku i jej ciało zawsze będzie odłożone na stosie dobrze myśle ?

    Poroszę o pomoc chciałbym to lepiej zrozumieć
  • #4 12013021
    BlueDraco
    Specjalista - Mikrokontrolery
    Ciało funkcji - to instrukcje. Instrukcji nie trzyma się na stosie, tylko w sekcji kodu (text), a w mikrokontrolerach kod jest zwykle w pamięci Flash. O zmiennych lokalnych napisałem powyżej, więc nie rozumiem pytania.
  • #6 12013433
    pawel_mr
    Poziom 15  
    valstus napisał:
    jeśli całość jest w pamieci flash to kiedy wędrują do pamieci ram?? co dokonuje podziału ?? i decyduje w jakich częsciach mikrokontrolera zapisać ?
    co z takim zapisem :
    z=funkcja (g,h); //gdzie trafi taki zapis?

    Taki zapis nie trafi nigdzie. To jest zapis w języku wysokiego poziomu, kompilator "tłumaczy" to na instrukcje maszynowe, które zapisywane są w pamięci programu. Instrukcji nie przenosi się do pamięci RAM (jako zmienne) więc Twoje pytanie jest pozbawione sensu (można trzymać instrukcje w RAM, zazwyczaj w pamięci zewnętrznej ale nie o tym mowa). Z,g,h to zmienne i one trafią do RAM, następnie na nich zostaną wykonane instrukcje zawarte w funkcji (czyli w programie). Zacznij od zapoznanie się z budową uC, przyjrzyj się blokom z jakich jest zbudowany, może to coś wyjaśni.
  • #7 12013436
    excray
    Poziom 41  
    Kolega chyba myśli że do procesora trafia zapis z C. Zapomina kolega że następuje kompilacja i Twój program napisany w C zostaje zamieniony na asembler a następnie na język maszynowy.
  • #8 12013537
    valstus
    Poziom 21  
    hmm czyli kompilator tłumaczy to na asembler pózniej rozdziela to co będzie w pamieci ram a co w flash nie jest tak że linijka po linijce trafia do flash kompilator rozdziela co trafia do ram a co do flash???

    Kod: C / C++
    Zaloguj się, aby zobaczyć kod


    Dodano po 16 [minuty]:

    int zmienna=5; po kompilacji postać jest zapisywana w pamięci flash i to samo w pamieci ram na stosie dobrze pojmuje?
  • #9 12013649
    pawel_mr
    Poziom 15  
    valstus napisał:
    hmm czyli kompilator tłumaczy to na asembler pózniej rozdziela to co będzie w pamieci ram a co w flash nie jest tak że linijka po linijce trafia do flash kompilator rozdziela co trafia do ram a co do flash???

    Pierwsza sprawa, pisz po polsku, nie używasz przecinków, wielkich liter, nie można zrozumieć tego, co piszesz.
    Druga sprawa, przeczytaj to co napisałeś. Najpierw wg Ciebie wszystko trafia do flash a później kompilator to rozdziela. Czyli kompilator musiałby być w uC, tam też musiałyby być zapisane instrukcje w takiej postaci jak je piszesz (czyli w języku wysokiego poziomu). Nie potrafię prościej napisać: program jest kompilowany do kodu maszynowego, w którym kompilator zamieszcza informacje skąd mają być pobierane zmienne (RAM, rejestry itd.). Kod maszynowy zostaje wgrany do pamięci programu i uC go wykonuje pobierając potrzebne informacje z pamięci danych.
  • #10 12013650
    excray
    Poziom 41  
    W tym przypadku kompilator prawdopodobnie nie wrzuci zmiennej do RAM tylko wykorzysta w tym celu rejestry robocze. Chcesz wiedzieć więcej - zapoznaj się z asemblerem danego procesora i jego budową.
REKLAMA