Documente Academic
Documente Profesional
Documente Cultură
com/interview/4383/
Program- Secven de instruciuni pe care le execut procesorul una dup alta.
Programare Procesul de definire a instruciunilor care urmeaz sa le indeplineasca
procesorul
Variabil o zon de memorie care pstreaz date, care este folosit n procesul de
calcul i care are o etichet dup care este identificat.
1. What are static variables?,(Care sunt variabile statice?)
Variabile statice snt legate de funcionarea anumitor obiecte a cror instane folosesc n comun
aceste variabile. Variabilele statice sunt create atunci cnd codul specific clasei n care au fost declarate este
ncrcat n memorie i nu sunt distruse dect atunci cnd acest cod este eliminat din memorie.
Variabilele statice se aloca in zona de date a programului la incarcarea programului in memorie. Ele sunt
disponibile pe toata durata de existenta a programului in memorie.
Se cunosc 3 tipuri de declarari ale variabilelor statice:
variabila declarata static in corpul functiei isi pasteaza valoarea intre apelurile functiei.
variabila declarata static in cadrul unui modul ( dar in afara functiei ) si este accesibila altor
functii din acest modul. Dar nu este disponibila functiilor altui moudul. Ea este localizata global.
Functia declarata static intr-un modul poate de asemenea fi chemata de alte functii din acest modul.
Acesta este scopul functiei care este declarata.
3. What do you mean by const keyword ?,( Ce vrei s spui prin cuvinte cheie const?)
Const este un calificativ asemenea celui volatile care are utilitatea de a proteja variabila ca sa nu
primeasca atribuiri in decursul programului, ci sa fie Read Only.
Pentru a fi modificata este necesar un pointer catre o variabila de tip const.
6. What is size of character, integer, integer pointer, character pointer?,( Care este dimensiunea
caracterului, ntreg, pointer ntreg, indicatorul de caractere?)
Pointerul nu este decit o adresa de memorie care pastreaza o adresa adresa.
Care sint marimile variabilelor:
Char 1 byte
Integer ( depinde de arhitectura ) 2 byte , 4 byte .
Integer point 2 bytes sau 4 bytes.
Character Pointer 1 byte
7. What is NULL pointer and what is its use?,( Ce este pointer NULL i ceea ce este utilizarea?)
Un pointer Null este un pointer care are valoarea Null(0) si este rezervat pentru ca nu pointeaza nicaieri.
Atunci cind nu mai ai nici o adresa atunci pointerului i se atribuie Null.
8. What is void pointer and what is its use?,( Ce este nul(void) pointer i ceea ce este utilizarea?)
Void Pointer este un tip de date - Un pointer care indic o anumit loca i care nu are nici un tip
specific.
11. Can we use any function inside ISR?,( Putem folosi orice funcie n interiorul ISR?)
Putem folosi funcia n interiorul ISR, atta timp ct aceast funcie nu este invocat de cealalt parte a
codului.
12. Can we use printf inside ISR?,( Putem folosi printf n interiorul ISR?)
Funcia printf n ISR nu este acceptat, deoarece funcia printf nu este reintrare, fir de siguran i
folosete alocarea dinamic a memoriei, care necesit mult timp i poate afecta viteza unui ISR pn ntr-o
mare msur.
13. Can we put breakpoint inside ISR?,( Putem pune breakpoint n interiorul ISR?)
Punerea unui punct de pauz(breakpoint) n interiorul ISR nu este o idee bun, deoarece
depanare(compilarea, debugging) va dura ceva timp i o diferen de jumtate sau mai multe secunde va
duce la un comportament diferit al hardware-ului. Pentru compilarea ISR, definitiv este mai bine (logs).
15. What is Top half & bottom half of a kernel?,( Ce este Top jumatate si jumatatea de jos a unui
nukleu?)
Uneori, pentru indeplinirea ntreruperii, o cantitate substanial de munc trebuie s fie fcut. Dar,
aceasta intr n contradictie cu nevoia de vitez pentru o tratare a ntreruperii. Pentru a rezolva aceast
situaie, Linux mparte compilatorul n dou pri - o jumtate superioar(Top half) i o jumtate de
fund(bottom half). Prima jumtate este rutina care de fapt reac ioneaz la ntrerupere. Jumtatea inferioar,
pe de alt parte, este o rutin care este planificat de jumtatea superioar care se va efectua mai trsiu ntr-
un timp mai sigur.
Toate ntreruperile sunt permise n timpul executrii jumtii de jos. Jumtatea superioar salveaz
datele dispozitivului ntr-un buffer special, graficile jumtii de jos i eirilor. Jumtatea de jos face restul.
In acest fel jumatatea superioara poate deservi o nou ntrerupere n timp ce jumtatea de jos lureaz la codul
anterior.
16. Difference between RISC and CISC processor?,( Diferena ntre RISC i procesor CISC.)
RISC (Reduced Instruction Set Computer) poate efectua cteva seturi de instruciuni simple
simultan. Mai puini tranzistori sunt utilizai pentru fabricarea RISC, ceea ce face RISC mai ieftin. RISC are
un sinhur set de instruciuni i aceste instruciuni sunt, de asemenea, mai puine la numr. Din cauza
numrului mai mic de instruciuni precum i instruciuni fiind mai simple, calculatoarele RISC sunt mai
rapide. RISC pun accentul mai mult pe software-ul, dect pe hardware-ul. RISC poate executa instruc iuni
ntr-un singur ciclu main.
CISC (Complex Instruction Set Computer) este capabil s execute mai multe operaii printr-o singur
instruciune(comand). CISC au un bogat i complex set de instruciuni i mai multe regimuri de moduri de
adresare. CISC pune accentul pe hardware-ul, dect pe software-ul, fcndu-l mai scump dect RISC. El are
o dimensiune de cod mic, cicluri mari pe secund i aceasta se inimpl mai lent n comparaie cu RISC.
28. Can structures be passed to the functions by value?,( Care structuri pot fi transmise la funciile de
valoare?)
Trecnd structura prin valoarea sa ntr-o funcie este posibil, dar nu este bun practic pentru
programare. n primul rnd, dac trecem structura prin valoarea i funcia modific unele dintre aceste valori,
atunci modificarea valorii nu este reflectat n funcie de apelant. De asemenea, n cazul n care structura este
mare, apoi structura trece prin valoarea nseamn copierea ntregii structuri la func ia argument stiva care
poate ncetini programul printr-o valoare semnificativ.
29. Why cannot arrays be passed by values to functions?,( De ce nu pot fi matricele trecut prin valori
la funcii?)
n C, singurul nume ,,matrice,, reprezint adresa primului element. n aa fel, chiar dac vom trece
numele matrice ca argument, acesta va fi transmis ca referin i nu adresa acesteia.
30. Advantages and disadvantages of using macro and inline functions?,( Avantajele i dezavantajele
utilizrii funciilor macro i inline?)
Avantaj: Macrocomenzi i funcii inline sunt mai eficiente dect apelarea unei funcii normale. Timpii
de petrecere n apelarea funciei sunt salvat n caz de macro-uri i func ii inline, deoarece acestea sunt
incluse direct n codul.
31. What happens when recursion functions are declared inline?,( Ce se ntmpl atunci cnd funciile
recursie sunt declarate inline?)
Funciile inline i recursiv reduce overhead (aeriene) salvnd contextul pe stiv. Dar, inline este doar o
sugestie pentru compilator i nu garanteaz c o funcie va fi inline. Evident,c compilatorul nu va fi capabil
s inline o funcie recursiv infinit. Este posibil s nu-l inline deloc sau poate linie pe el, la doar cteva
niveluri n adncime.
32. #define cat(x,y) x##y concatenates x to y. But cat(cat(1,2),3) does not expand but gives preprocessor
warning. Why?( #define cat(x,y) x##y concateneaz x la y. Dar, cat(cat(1,2), 3) nu se extinde, dar d
avertisment preprocesor. De ce?)
n acest caz, cat(x, y) este macro care este definit utiliznd directiva preprocesorului, acest lucru va fi
substituit doar la locul n care este numit n acest exemplu se ntmpl aacat(1,2) ## 3, care va deveni
din nou 1 ## 2 ## 3;
aici dac folosim ## ntre ele ne putem uni sau concatenat doar dou variabile, de aceia d un avertisment
preprocesor. {i ## ncearc s fac un simbol din) i 3. Probabil ai primi un avertisment pentru c nu se
poate face un semn de la cei doi!};{ Un parametru din lista de nlocuire, cu excepia cazului precedat de un #
sau ## preprocesrii de simboluri sau urmat de un simbol ## preprocesare (a se vedea mai jos), se nlocuiete
cu argumentul corespunztor dup toate macro-urile coninute de acestea au fost extinse. "}
33. Poate o variabil s fie att de const i volatile?
Da. Modificatorul const nseamn c acest cod nu se poate schimba valoarea variabilei, dar asta nu
nseamn c valoarea nu poate fi modificat prin intermediul n afara acestui cod. De exemplu, n exemplul
din FAQ 8, structura a fost cronometrul accesat printr-un pointer const volatil. Funcia n sine nu a schimbat
valoarea timer-ul, aa c a fost declarat Const. Cu toate acestea, valoarea a fost modificat de hardware pe
computer, astfel nct a fost declarat volatile. n cazul n care o variabil este att const i volatile, cei doi
modificatorii pot aprea n orice ordine.
{ Acest lucru este posibil i cea mai mare parte utilizat n exemplul system.The ncorporat este de
ntrerupere Stare registru. Aa cum este un registru de stare, n program nu ar trebui s modifice aceast
variabil. Deci, ar trebui s fie o constant. Dar aceast variabil poate fi modificat de ctre procesorul sau
hardware-ul bazat pe starea de ntrerupere. Aa c, atunci cnd n program, dorim s citii valoarea acestui
varible, ar trebui s citeasc valoarea real cu orice optimizare. Din acest motiv, variabila poate fi declarat
ca volatil prea. }
34. ++*ip increments what? it increments what ip points to?,( ++*ip incrementeaz ce? ea
incrementeaz ce ip puncte la)
ieirea va fi de 4 dup aceast operaie ip va indica spre aceeai loca ie de memorie. Aceasta nu
incrementeaz locaia de memorie n aceast operaiune.
35. Operations involving unsigned and signed unsigned will be converted to signed?,( operaiuni
care implic fr semn i semnat? fr semn va fi convertit la semnat?)
Aici de ieire ar da "> 6". Motivul pentru aceasta este faptul c expresiile semnate i implicnd tipuri de
nesemnate au toate operanzi promovat la tipuri de nesemnate.
{n condiiile de mai sus terinaty (a + b> 6) returneaza -14 adic o baz non valoare zero, astfel c
verificarea cu o valoare diferit de zero, care este motivul pentru care imprim "> 6".
astfel nct, n acest caz, aceasta conditie rezultat trateaza defaultly ca signet. pn cnd, dac ai typecast
la unsignet.}
36. malloc(sizeof(0)) will return valid pointer?,( malloc(sizeof(0)) se va ntoarce - pointer valid? )
sizeof (0) returneaz mrimea ntreg a crui valoare este 0. De aceea malloc va aloca sizeof
(int) bytes i returneaz un pointer valid.
O va imprima 2 ^ 3 = 8 ori. Amintii-v, de fiecare dat cnd apelai fork, creai un proces copil, c procesul
de copil va continua executarea de la dreapta dup ce a fost n form de forked astfel nct acesta poate, de
asemenea, ea nsi fork. Copacul va arta astfel.
Deci, vom avea total de 8 proces (proces main i 7 procese forked), care ruleaz i imprimarea instruciunea
de imprimare. Ca o not: n cazul n care declaraia de imprimare a fost nainte de o forked, aceasta nu ar
obine executat printr-un proces nou forked.
{ ea se va imprima de 8 ori (2 ^ 3): fiecare fork genereaz un proces suplimentar - astfel nct s se ncheie
cu 2 procese la fiecare pas (printe i copil) i fiecare dintre ele continua execuia n etapa imediat dup fork.
Aa c prima forked -> 2 procese fiecare dintre acestea merge la fork 2 n care generai 2 procese
suplimentare, astfel nct s avei acum 4 procese fiecare a intra n a 3-a n cazul n care fiecare fork
genereaza un proces suplimentar - deci 8 procese care merg n linie cu printf! }
{ Fiecare furculi creeaz un nou copil. Fiecare copil are acelai cod ca printe. Astfel, copiii vor, de
asemenea, furculi.
Asa ca printe are 3 copii. Child1 are 2 copii. Child2 are un copil. Child11 are un copil.
Un total de 8 procese. 8 printf]}
{ Procesul 1 apeluri furc (). Acest lucru creeaz un
nou proces de copil, Proces 2, i ambele 1 i 2
transporta la execuie dup apelul prima furc (),
procednd la apelul a doua furc (). Procesul 1 creeaz
proces copil 3, iar procesul de 2 creeaz proces de
copil 4. Toate cele patru procese continue de dup a
doua furc (), procednd la apelul furcii finale ().
Procedeul 1 creeaz Procedeul 5; Procedeul 2 creeaz
proces de 6; Procedeul 3 creeaz Procedeul 7; i
Procesul 4 creeaz Procesul 8. }
Acest lucru devine evident odat ce te uii la modul n care sunt definite funcii:
myfunc dublu ()
Daca vreau acum un pointer la o funcie care are argumente i returneaz un dublu ar fi de tip
dublu (*) ()
care este tipul de parametrul. Adugarea unui nume (fptr), pentru a rezulta n urmtoarele:
dublu (* fptr) ()
este un parametru numit fptr (prescurtarea de la pointer funcia), care este un pointer la o funcie care nu
are nici un argument i returneaz un dublu sau void,int.
{Un pointer este acela de a indica o locaie de memorie. O funcie este n memorie i are o adres de
pornire. V putei foarte bine dereferire numele funciei (care este un pointer) pentru a obine funcia de
la acea adres.}
{ Am vorbit anterior despre indicii pentru structuri de date i obiecte de clas, cu toate acestea, n C ++
putem avea, de asemenea, indicii pentru funcii. Aceste indicii se comporta un pic diferit ca celelalte
indicii de care le-am ajuns peste pana acum, dar pn la sfritul acestui tutorial ar trebui s ti i cum s
utilizeze indicii funcii, precum i cunoaterea de baza a ceea ce se poate i nu se poate face cu ele.
Cel mai confuz cu privire la indicii functiei este, probabil, sintaxa lor - scrie i tipul de date al func iei (e)
indicatorul se va indica, atunci numele cursorului, prefixat de un asterisc, n paranteze, atunci unele
suporti cu parametrii tipurile de funcii de puncte pointer-ul va lua. Aa cum acest lucru implic, indicii
funcii trebuie s indice funcii cu aceleai tipuri de date de tip i de parametri (precum i numrul de
parametri). Sintaxa, vizual, arata ca tip de date (* pointerName) (parametrii);. Cel mai simplu mod de a
obine utilizate pentru a funciona indicii este de a pstra doar folosindu-le. Cel mai simplu exemplu,
probabil, ar fi de a crea dou funcii simple, nule, iar apoi indicai indicatorul funcia fiecruia, apelarea
funciilor prin intermediul cursorului dup fiecare misiune.}
39. Which way of writing infinite loops is more efficient than others? there are 3 ways?,()
while (1)
{}
Acesta este cel mai bun mod de a pune n aplicare bucla infinita.
for (;;) i while (1) .......
putem folosi, de asemenea, aceasta
for(;;)
{
}
De fapt, cea mai bun cale este
for(;;)
deoarece nu depinde de nici o constant pentru a fi infinit.
https://www.codecademy.com/en/forum_questions/520d9f5fabf8219e4f00250f
40. Who to know whether system uses big endian or little endian format and how to convert
among them?,( Pe cine s tie dac sistemul utilizeaz endian mare sau format endian mic i
modul n care se convertesc ntre ele?)
Aici este un segment de cod mic pentru a determina Endianness unui sistem n timpul rulrii.
41. What is forward reference w.r.t. pointers in c?,( Ce se nainteaz w.r.t. de referin indicii n c?)
int a=10;
int *p=&a;
*p Se numete n fa referinei.
42. How is generic list manipulation function written which accepts elements of any kind?,( Cum este
funcia de list generic de manipulare scris care accept elemente de orice fel?)
Clasa de sabloane.
43. What is the difference between embedded systems and the system in which RTOS is running?,(
Care este diferena dintre sistemele integrate i sistemul n care RTOS ruleaz?)
Construit este doar combinaia de s / w i h / w, care este unele sisteme integrate pot avea unele osoase
nu pot acoperi RTOS este un sistem de operare.
RTOS pot include integrate i pot include, de asemenea. aceasta depinde de cerina. n cazul n care
sistemul trebuie s serveasc numai eveniment secvenial, nu este nevoie de RTOS. n cazul n care
sistemul necesit execuia n paralel a evenimentelor, atunci avem nevoie de RTOS.
Software embedded sisteme este lider de hardware i sarcinile sunt executate secven ial atunci cnd este
la fel de mic RTOS software-ul care poate fi utilizat n sistemele integrate i a aplica iilor de sarcin sunt
executate simultan, n cadrul constrngerilor de timp specifice.
Sau RTOS sistem de operare n timp real proiectat pentru aplicaii embedded. ntr-un sistem de sarcini
multiple, care se ocup de aplicaiile critice sistemele de operare trebuie s fie
1.deterministic de a aloca memorie
CPU 2.should permite diferitelor fire, sarcina, proces,
3.kernel trebuie s fie non-premptive, ceea ce nseamn c schimbarea trebuie s se ntmple numai
dup sarcina contextului de execuie. etc.
ferestre normale sau Linux OS poate fi utilizat.
RTOS n exemplul de sistem ncorporat: Satelites, Formula 1 autoturisme, sysytem de navigare CAR.
Sistemul integrat este o combinaie de hardware i software. software-ul poate fi .example sistem de
operare mobil i PC-uri sunt, de asemenea, un sistem integrat
dac vom folosi sistemul de operare RTOS n loc. urmrii apoi construit trebuie s ia msuri n timp
real, cum ar fi rachete.
sistem integrat: sistem proiectat pentru a ndeplini una sau cteva funcii dedicate.
Sistemul RTOS: Acesta poate fi, de asemenea, un dar natural embedde sistem RTOS va fi utilizat n
sistem real, care va trebui s ndeplineasc mai multe funcii.
Sistem de sistem n timp real, care poate oferi ieire ntr-un amout bine definit / prezis time.This nu este
real-time sistemele sunt mai rapide.
Diferena dintre cele dou:
Sistemele 1.normal Emabedded nu sunt sistem n timp real
2.Systems cu RTOS sunt sisteme n timp real.
{ sistem integrat poate include RTOS i nu pot include, de asemenea. aceasta depinde de cerina. n
cazul n care sistemul trebuie s serveasc doar secvenial caz, nu este nevoie de RTOS. n cazul n care
sistemul cere executarea n paralel a evenimentelor, atunci avem nevoie de RTOS. }
44. How can you define a structure with bit field members?,( Cum se poate defini o structur cu
membrii cmp de bii?)
Putem defini structura de membri cmp de bii cu operatorii Dot.
EXAMPLE:
#include <stdio.h>
int main(
{
Struct bit_field
{
Int x.4; // it allocates only 4 bits to x
Char C.6; // it allocates only 6 bits to C;
};
return 0;
}
{ In a called function:
byte = byte >> field;
byte = byte & 0x01;
return(byte); }
46. Which parameters decide the size of data type for a processor ?,( Care parametri decide mrimea
tipului de date pentru un procesor?)
De fapt, compilator este cel responsabil pentru dimensiunea tipului de date. Dar, este adevrat, atta
timp ct sistemul de operare permite acest lucru. n cazul n care nu este permis de sistemul de operare,
sistemul de operare poate fora dimensiunea.
47. What is job of preprocessor, compiler, assembler and linker ?,( Care este treaba de preprocesor,
compilator, de asamblare i de legtur?)
Comenzile de preprocesor sunt prelucrate i extinse de ctre preprocesor nainte de compilarea efectiv.
Dupa preprocesare, compilatorul ia ieirea preprocesorului i codul surs, i genereaz un cod de
asamblare. Odat ce compilator finalizeaz lucrrile, asambler ia codul de asamblare i produce o list
de asamblare cu decalaje i de a genera obiect fiiere.
Linker-ul combin fiierele obiect sau biblioteci i produce un singur fiier executabil. De asemenea, se
rezolva trimiteri la simboluri externe, atribuie adresele finale la funcii i variabile, precum i codul i
revizuiete datele pentru a reflecta noile adrese.
48. What is the difference between static linking and dynamic linking ?,( Care este diferena dintre
legarea static i dinamic de legtur?)
n legarea static, toate modulele de bibliotec utilizate n program sunt plasate n fi ierul executabil
final fcndul mai mare n dimensiune. Acest lucru se face prin linker. n cazul n care modulele utilizate
n program sunt modificate dup conectarea, este necesar apoi re-compilare. Avantajul linking static
este faptul c modulele sunt prezente ntr-un fiier executabil. Noi nu vrem s facem griji cu privire la
problemele de compatibilitate.
n cazul unei structurri dinamice, numai numele modulului utilizate sunt prezente n fiierul executabil
i legtura efectiv se face la run moment n modulele de bibliotec att programul i sunt prezente n
memorie. Acesta este motivul pentru care, executabilele sunt mai mici n dimensiune. Modificarea
modulelor de bibliotec utilizate nu foreaz re-compilare. Dar, legarea dinamic se poate confrunta cu
probleme de compatibilitate cu modulele de bibliotec utilizate.