Listarea programului. Listare - ce este în cuvinte simple: o analiză completă a conceptului. Cursuri, raport despre practica universitară

Listarea programului „demol.c” este prezentată în Fig. 6.7. Programatorul va veni cu numele programului. Este necesară extensia „.c”. Textul este tastat în editorul „Programmer's Notepad 2” (prescurtat PN2), care este inclus în pachetul WinAVR în locul shell-ului grafic. De asemenea, realizează crearea de proiecte, corectarea erorilor, compilarea programelor și chiar programarea MK.

Orez. 6.7. Listarea programului „demol.c”.

Orez. 6.8. Apariția programului PN2.

Editorul PN2 este un proiect independent, cu propriul său site web. Meniul principal PN2 este prezentat în Fig. 6.8.

Procedură.

1.3 Rulați pentru execuție fișierul "WlnAVR-20100110-install.exe" (29 MB) situat pe CD-ROM-ul furnizat. Acest fișier poate fi descărcat gratuit de pe Internet, dacă este necesar. Instalați implicit WlnAVR în folderul C: \ WinAVR-20100110 \.

2. Deschideți editorul PN2: „Start - Programe - WinAVR-20100110 - Notepad pentru programatori”. Activați numerotarea liniilor: "Instrumente - Opțiuni - General - Implicit -<поставить «галочку» возле «Show Line Numbers»>- BINE".

3. Creați un nou fișier C în editorul PN2: „Fișier - Nou - C / C ++”. Introduceți textul programului de la tastatură conform Fig. 6.7 și salvați-l pe hard disk: „Fișier - Salvați ca ... -<ввести путь и имя файла, например, для однозначности C:\1001\demol.c>- BINE".

În continuare, capturile de ecran (capturi de ecran) vor fi afișate numai în cele mai importante puncte de acțiune pentru a economisi spațiu. Restul capturilor de ecran în modul pas cu pas pot fi vizualizate pe tutorialele video de pe CD-ul atașat.

Explicații pentru listare.

Linia 1 începe cu comentarii, care sunt delimitate la stânga de două linii oblice înainte oblice. Toate textele după semnele „//” pot fi despre orice, în orice limbă, cu orice libertăți și abrevieri. Acestea sunt informații arbitrare pe care programatorul le scrie pentru el însuși, iubitul său, pentru a-și aminti într-o lună sau două ceea ce, de fapt, s-a discutat. De obicei, sunt indicate numele scurt al programului și autorul.

Linia 2 conține, de asemenea, comentarii, dar de natură tehnică. Iată o schemă de circuit pentru conectarea indicatorului HL1 și a butonului SB1 la liniile specifice ale porturilor MK. Numele semnalelor corespund aspectului din dashit pe MHKpocxeMyATmega48A (Fig. 6.9).

Orez. 6.9. Aspect semnal MKATmega48A.

Practica descrierii textuale a schemelor simple din „antetul” programului este răspândită în comunitatea programatorilor care sunt leneși să deseneze și să aplice scheme grafice, crezând că „oricum totul este clar”.

Linia 3 specifică parametrii pentru „makefile”. Pentru referință, funcționarea normală a compilatorului AVR-GCC este posibilă cu două fișiere necesare. Primul este fișierul listat cu extensia ".c", al doilea este fișierul directivă de sistem "makefile" fără extensie. „Makefile” este creat de utilitarul „MFile” (Fig. 6.10, de JoergWunsch, Germania) inclus în WinAVR.

Orez. 6.10. Apariția programului MFile.

Procedură.

1. Rulați utilitarul „MFile” pentru execuție: „Start - Programe - WinAVR-2010010 - MFile”.

2. Completați câmpurile șablon după cum urmează (Fig. 6.11):

În articolul „Makefile - Numele fișierului principal ... - Fișierul principal” introduceți numele proiectului care se dezvoltă „demol” și faceți clic pe OK;

În articolul „Makefile - tip MCU - ATmega” selectați MK „atmega48a”;

În articolul „Makefile - Nivel de optimizare” setați nivelul de optimizare „2”. Alte posibilități: „0” - fără optimizare, „s” - lungimea minimă a codurilor, cifrele „1” ... „3” sunt trei metode de optimizare diferite, iar numărul „3” nu înseamnă cea mai bună opțiune, este totul depinde de programul C specific ...

Nu este necesar să corectați restul clauzelor șablon „makefile”, lăsați-le să rămână cele implicite.

Orez. 6.11. Completarea câmpurilor din programul MFile.

Pentru fiecare proiect nou și tip nou de MK, trebuie să compuneți propriul „makefile”, în timp ce numele proiectului și tipul MK se vor schimba.

Linia 4 conține comentarii care specifică numerele hexazecimale ale octeților Low, High și Ext din configurație. Aceste valori vor fi necesare mai târziu la programarea siguranțelor MK.

С «ктг5 este informațional gol. Separa vizual textul comentariului de restul programului. În loc de una, puteți insera două linii goale, ceea ce nu este important. Principalul punct este îmbunătățirea vizibilității. Acest lucru nu afectează lungimea codurilor de firmware MK.

Designul extern al listării este inventat chiar de programator, pe baza propriilor sale idei despre frumusețea imaginii și comoditatea prezentării informațiilor. Adesea, prin stilul antetului, listând liniile și comentariile, se poate identifica autorul programului sau compune portretul său psihologic. Note interesante despre această chestiune sunt date în monografia de Alain Golub.

Linia 6 este deservită de preprocesatorul compilatorului. Aceasta nu este o declarație C sau un comentariu. Numele este complex, dar sensul este simplu. Preprocesorul (pre-procesorul) caută în program linii care încep cu caracterul "#". Mai mult, în funcție de cuvântul cheie, efectuează o anumită acțiune, de exemplu, „define” - atribuie valori constantelor, „dacă este definită” - verifică starea, „inC1ude” - conectează o bibliotecă de funcții etc.

Pentru o primă cunoștință, este suficient să știm că o bibliotecă de funcții este un set de fișiere în care sunt plasate texte de proceduri standard sau frecvent repetate. În acest caz, directiva „# inC1ude” (tradusă din engleză. „Include”) activează biblioteca de sistem „avr / io.h”, care este responsabilă pentru funcționarea porturilor I / O. Această bibliotecă are un nume diferit în diferite compilatoare, dar esența este aceeași, fără ea nu puteți controla nicio linie de porturi MK. Prin urmare, conexiunea bibliotecii I / O este obligatorie pentru toate programele C cu microcontroler.

Linia 7 este, de asemenea, procesată de preprocesatorul compilatorului, dar are cuvântul cheie „define”. Prin urmare, declară o constantă INI și îi atribuie o valoare constantă de 255. Comentariile indică conversia lui 255 în hexadecimal 0xFF și binar 0bl 1111111. Diferența dintre ele constă în literele „x” și „b” după cifra obligatorie „0”. Corespondența numerelor în diferite sisteme este dată în tabel. 6.3.

Tabelul 6.3. Conversia numerelor din hexazecimal în binar și invers

Dacă constanta INI este întâlnită undeva în „corpul” programului, atunci compilatorul, fără ezitare, înlocuiește valoarea numerică specificată în linia 7, adică 255. Acest lucru este foarte convenabil pentru programatori atunci când corectează listări mari, atunci când constantele sunt împrăștiate în tot textul. În plus, chiar numele unei constante poate avea o sarcină semantică și poate servi drept indiciu verbal. În special, INI este o abreviere pentru cuvântul englezesc „inițializare”, ceea ce înseamnă o anumită valoare inițială.

Importanța plasării constantei în „antetul” programului constă în simplitatea căutării sale și în viteza de a face modificări. De exemplu, după ce ați corectat numărul „255” o dată, puteți fi sigur că peste tot în text va fi introdus automat (și fără erori!) Prin intermediul constantei lNI.

Programatorul vine cu numele pentru constantă, pe baza bunului simț și a preferințelor umane. Conform unei îndelungate tradiții, numele constantelor sunt scrise cu majuscule. Primul din nume trebuie să fie o literă, de exemplu, I2CBUS, T34. Chirilicul nu este permis.

Declarația constantei INI ar putea fi scrisă în alte două moduri echivalente: "#define INI OxFF" sau "#define INI Obl 1111111".

Linia 8 conține operatorul care descrie variabila „a”. O variabilă poate fi reprezentată figurativ ca o cutie (cutie, cutie, cutie pentru creioane), unde este stocat un anumit număr de obiecte (mărgele, cereale, chibrituri). Pentru a face „cutiile” diferite între ele, acestea sunt marcate cu inscripții diferite pe corp, în acest caz litera „a”. Dacă numărul inițial nu este specificat în descrierea variabilei, atunci se consideră că „caseta” este goală și este inițializată cu zero (a = 0). În cursul programului, puteți adăuga elemente în „casetă” și le puteți elimina din ea. crește și scade valoarea unei variabile.

Volumul „cutiei” depinde de declarația sa originală. Masa. 6.4 arată limitele acceptate în compilatorul AVR-GCC. După cum puteți vedea, declarația „unsigned char” vă permite să introduceți 255 de articole în „casetă”. Împreună cu valoarea zero („caseta” goală) vor exista în total 256 de stări sau 256 de octeți. Variabila cu declarația „nesemnat lung” nu mai este ca un sicriu, ci un tren întreg, care este conceput pentru 4,2 miliarde de articole.

Tabelul 6.4. Dimensiunile variabilelor adoptate în АУК-ВСС

Deoarece MK nu are instrumente dezvoltate pentru a lucra cu numere negative, la început, pentru a nu vă deruta, este mai bine să utilizați numai numere pozitive în programe, adică care conține o declarație „nesemnată”.

„Părinții-comandanți” ai limbii Încă din cele mai vechi timpuri, au stabilit o ordine nerostită, conform căreia numele unei variabile ar trebui să conțină cel mult 8 caractere. În compilatorul AVR-GCC, această regulă este ignorată și variabila poate conține câte caractere doriți, dar fără fanatism. Singurul lucru este că prima literă din nume trebuie să fie neapărat litera alfabetului latin, poate fi urmată de litere, cifre, simboluri. Chirilicul nu este permis.

O variabilă, spre deosebire de o constantă, conține un număr variabil (nu o constantă). Pentru a distinge variabilele de constante, acestea sunt scrise cu litere mici. De obicei, aceștia încearcă să facă numele să se potrivească cu semnificația, de exemplu, „numărați” pentru un contor, „date” pentru date, „întârziere” pentru o întârziere. Deși uneori variabile mai simple, mai familiare și mai compacte dintr-o literă care sunt familiare din algebra școlară arată mai simplu - a, b, c, d, i, j, k, x, y, z.

Ce dimensiune trebuie specificată pentru o anumită variabilă este determinată de programator. Întrucât variabila „a” din această listă este o stocare pentru colectarea informațiilor de la portul digital pe 8 biți „C”, înseamnă că trebuie să conțină octeți „doi până la a opta putere”, adică de la 0 la 255.

Este interesant faptul că compilatorul nu generează o eroare dacă o jucați în siguranță și declarați variabila cu o marjă ca „nesemnat lung a;”. Este adevărat, acest lucru duce la o creștere inutilă a dimensiunii codului de la 114 la 126 de octeți și, în consecință, la o ușoară scădere a vitezei de execuție a programului.

Cealaltă extremă este subestimarea dimensiunii, când, de exemplu, în loc să se declare „nesemnat int”, se folosește „nesemnat char”. Dacă introduceți un număr mai mare de 255 într-o astfel de variabilă, atunci doar restul diviziunii cu 256 va fi salvat, iar partea de frunte va fi pierdută iremediabil. Figurat vorbind, obiectele sunt turnate din „cutie”. Compilatorul nu reacționează la astfel de erori, presupunând că programatorul se află într-o stare adecvată și înțelege ce face. Determinarea corectă și fără erori a dimensiunii variabilelor vine de obicei cu experiența.

Linia 9 este goală pentru informații, similară cu linia 5. Dacă să o inserați în listă depinde de voința programatorului.

Linia 10 este plină de comentarii, dar pentru varietate acestea sunt într-un format diferit. Anume, textul este subliniat în partea stângă cu caracterele „/ *”, iar în partea dreaptă - cu caracterele „* /”. Acest stil provine din cele mai vechi versiuni ale limbajului C. Mai târziu, în comentarii au fost folosite simbolurile „//”, ceea ce este tipic pentru limbajul C ++. În WinAVR, ambele opțiuni au dreptul egal de a exista. Ortografia „nouă” este mai simplă și mai clară, iar „vechea” în unele locuri este singura posibilă dacă doriți să comentați începutul operatorului.

Linia 11 conține un apel tipic către funcția „principală” conform regulilor Institutului Național de Standardizare American (ANSI). Expresiile abreviate sunt permise, dar nu sunt recomandate: "int main ()", "main ()", "main (void)". Uneori chiar scriu „void main (void)”, subliniind absența completă a parametrilor primiți și trecuți. Pentru MK-uri simple care nu acceptă sisteme de operare în timp real, nu vor exista consecințe negative. Cu toate acestea, dacă vă gândiți la viitor, este mai bine să memorați imediat forma completă de scriere, ceea ce va facilita transferul programelor C pe platforme de microcontrolere mai moderne în viitor.

Linia 12 este alocată în întregime sub prima acoladă deschisă. Nu întâmplător i s-a acordat o astfel de onoare. Compilatorul C, atunci când execută linia 12, efectuează inițializarea inițială a registrelor MK, instalarea stivei și alocarea spațiului de adrese. Nu este nevoie să învățați mecanica acestui proces de bijuterii (spre deosebire de programele din Assembler!).

Pentru un programator, principalul lucru este să înțelegeți corect două lucruri care sunt produse automat de compilatorul inclus în WinAVR:

La începutul programului, toate întreruperile sunt dezactivate;

Toate liniile de port MK sunt configurate ca intrări fără rezistențe pull-up.

Linia 13. În cele din urmă, prima comandă executabilă a programului a apărut sub forma unei instrucțiuni de atribuire. Explicația simbolurilor:

„DDRB” este numele convențional al registrului DDR pe opt biți al portului „B”;

"=" - semn de scriere a datelor în registrul DDRB;

"ОЬ" - o indicație că următoarele 8 cifre vor fi în cod binar;

"11111111" - biții numărului binar scris în registrul DDRB, aranjați în ordinea 7, 6, 5, 4, 3, 2, 1, 0 (cel mai semnificativ bit din stânga, cel mai puțin semnificativ bit din dreapta).

Ca urmare a executării acestui operator, toate liniile portului "B" sunt setate la modul de ieșire, deoarece unitățile sunt indicate în toate cifrele.

Enunțul de pe linia 13 este indentat la două spații din stânga. Aceasta este o convenție de formatare a textului la care aderă mulți programatori. Compilatorul va „păstra tăcerea” dacă porniți textul din prima sau a șaptea coloană din stânga, după cum doriți. Există o singură recomandare: „Listarea unui program C ar trebui să fie ușor de vizualizat”. După aceasta, în viitor, toate textele vor fi formatate astfel încât acoladurile să fie amplasate vertical în coloane ciudate (1, 3, 5 etc.) și fiecare coloană să conțină o singură deschidere în partea de sus și o acoladă de închidere la fundul.

Această ordine nu este o dogmă, ci o modalitate de a scurta listarea în lățime și lungime fără a pierde conținutul informațional. Programatorul „acasă”, în listele sale, are dreptul să introducă orice număr de spații, linii goale etc.

Linia / 4 acționează împreună cu linia 13, deoarece starea specifică a liniei de port în controlerele AVR este determinată de o grămadă de două registre DDRx și PORTx, unde „x” este litera ordinală a portului, de exemplu, B, C sau D. Având în vedere că fiecare registru conține 8 biți numerotați de la 0 la 7 (condiționat „z”), atunci aspectul general de-a lungul liniilor de port este după cum urmează:

DDRx.z = 1, PORTx.z = 1 - ieșire de nivel ÎNALT;

DDRx.z = 1, PORTx.z = 0 - ieșire LOW;

DDRx.z = 0, PORTx.z = 1 - intrare cu un rezistor "pull-up";

DDRx.z = 0, PORTx.z = 0 - intrare fără rezistență de tragere.

Rezumând liniile 13 și 14: DDRB.0 ... DDRB.7 = 1, PORTB.O = 0, PORTB.l = 1, PORTB.2 ... PORTB.7 = 0, prin urmare, liniile 0, 2 ... 7 ale portului "B "va fi configurat ca ieșiri LOW și linia 1 ca HIGH. Deoarece indicatorul HL1 este conectat la linia PB1 (pinul 15 al microcircuitului DD1 din Fig. 6.3), acesta se va stinge. Se pare că partea inițială a misiunii tehnice a fost finalizată cu succes.

Liniile 15, 16 sunt similare cu liniile 13, 14, dar pentru portul "C". Pentru o schimbare, se utilizează substituția constantă lNI. După executarea liniilor 15 și 16, toate liniile portului "C", chiar și cele care nu sunt direct implicate în operațiune, vor fi configurate ca intrări cu rezistențe "pull-up". Aceasta este o tehnică standard pentru inițializarea inițială a portului pentru a activa rezistențele interne de tragere care păstrează intrările CMOS ale liniei MCU de la suspendare în aer și elimină orice zgomot și căi de captare.

Linia 17 este similară cu liniile 13, 14 și 15, 16, dar pentru portul „D”. Nu este deloc implicat în circuitul electric, dar ar trebui să îl luați de regulă - pentru a inițializa toate porturile fără excepție la începutul programului. Liniile lor inactiv trebuie să fie configurate ca intrări de rezistență pull-up sau ieșiri HIGH / LOW. În viitor, un astfel de automatism va permite evitarea coliziunilor și a neînțelegerilor.

O caracteristică specială este atribuirea registrului PORTD la valoarea atribuită anterior în linia 13 registrului DDRB, adică numărul binar Obl 1111111. Acest lucru a fost făcut în scopuri educaționale, deoarece ar fi putut fi mai ușor: "PORTD = OxFF;".

Un alt detaliu este lipsa scrisului în registrul DDRD. Aceasta nu este o greșeală de tipar, ci o reducere deliberată a listării cu o singură linie, deoarece la pornirea alimentării, conform fișei tehnice, toate registrele DDRx, PORTx sunt completate automat cu zerouri, adică nu este necesar să ștergeți în plus registrul DDRD.

Linia 18 conține instrucțiunea buclă „while”. Pentru prima cunoștință, este suficient să ne amintim că expresia „while (1)” înseamnă execuția secvențială a afirmațiilor din liniile 19 ... 21 într-o buclă infinită.

Rândul 19 conține o paranteză deschisă și o declarație de atribuire. Această combinație este permisă de regulile limbajului C, ceea ce face ca lista să fie mai compactă în înălțime.

După executarea liniei 19, variabila „a” va stoca octetul de stare a opt linii ale portului „C”, care a fost citit din registrul PINC. Dacă butonul SB1 nu este apăsat, atunci „a = OxFF”, iar dacă este apăsat, atunci „a = OxFE”.

Linia 20 deplasează conținutul variabilei „a” cu un bit spre stânga. Sunt posibile două opțiuni: dacă „a” a fost mai devreme OxFF, atunci va deveni OxFE și, dacă a fost OxFE, va deveni OxFD. De ce se face acest lucru, următoarea linie a programului vă va spune.

Linia 21 conține operatorul de atribuire, dar, comparativ cu linia 19, variabila „a” și registrul de porturi sunt inversate. În C, acest castling are ca rezultat înlocuirea unei operații de citire dintr-un port cu o operație de scriere într-un port. În total, codul 0xFE (dacă butonul SB1 nu este apăsat) sau codul 0xFD (dacă butonul SB1 este apăsat) vor fi trimise la portul "B". În primul caz, indicatorul HL1 se va stinge, în cel de-al doilea, va străluci, ceea ce trebuia realizat conform termenilor de referință.

Liniile 22, 23 conțin bretele închise. Dacă trageți mental două linii verticale din ele „de jos în sus”, atunci acestea indică direct spre parantezele de deschidere din liniile 19 și 12. Parantezele de pe linia 22 indică repetarea buclei în liniile 19 ... 21. Parantezele de pe linia 23 încep de la prima poziție din stânga, astfel încât a fost atins sfârșitul funcției „principale” și, prin urmare, programul principal.

Linia 24 conține comentarii despre numărul versiunii WinAVR și lungimea codurilor de firmware, ceea ce este foarte util la compilarea programului de către alți utilizatori. Se știe că versiunile WinAVR nu sunt 100% compatibile între ele, pentru care există exemple ilustrative. În consecință, lungimea codului compilat al aceleiași liste poate diferi de la versiune la versiune. Concluzia practică este că trebuie mai întâi să compilați programul cu pachetul WinAVR indicat pe linia 24 și numai apoi pe o versiune mai veche sau mai nouă, verificând lungimea codului primit ca sumă de verificare.

Cititorul atent are dreptul să observe că, în etapa de compilare a listei programului C, a fost imposibil să se calculeze în avans cât de mult ocupă codurile în memoria MK. Pentru a fi sincer, inscripția „114 octeți (2,8%)” a fost adăugată ulterior, după compilarea programului. Există un exemplu clar al feedback-ului, care în diagrama structurală din Fig. 6.1 a fost indicat printr-o linie punctată între blocurile „K” și „L”.

Linia 25 este complet goală, dar spre deosebire de rândurile 5 și 9, marchează sfârșitul fizic al listării. Fără această linie de terminare, compilatorul emite un avertisment ușor, dar totuși: „Avertisment: fără linie nouă la sfârșitul fișierului”.

Înainte ca o monedă de securitate sau criptomonedă să fie disponibilă comercianților pe piețe, aceasta trebuie să treacă printr-un proces complex de selecție și să fie listată. Să analizăm în cuvinte simple ce este o listare pe o bursă - atât în ​​stoc cât și în criptomonede, care sunt etapele principale care trebuie parcurse pentru a fi pe listă, principalele beneficii pe care le primește o companie, care este esența radiere.

Ce este listarea

Conceptul listării se găsește în diferite domenii ale vieții noastre:

  • Burse de valori și criptomonede- vor fi subiectul acestui articol. Este vorba despre adăugarea de valori mobiliare sau criptocoinere la listele platformelor de tranzacționare.
  • În comerț- aceasta implică adăugarea produselor unui anumit producător la sortimentul magazinului.
  • În programare- acesta este codul sursă (text) al programului, care este tradus în cod executabil folosind compilatorul.
  • În imobiliare- aici sunt semnate contracte de listare între proprietarul proprietății și agentul de vânzări care o vinde pentru un comision.

Nu vom lua în considerare ultimele două industrii. Suntem interesați să listăm, precum și criptomonede.

Listarea și radierea valorilor mobiliare

Listarea a apărut în lexiconul nostru din lista de cuvinte, care este tradusă din engleză ca „listă”. Listarea valorilor mobiliare la bursă este procedura pentru adăugarea de acțiuni, obligațiuni ale companiilor pe lista instrumentelor care sunt cotate pe platformă. După aceea, acestea devin disponibile pentru cumpărare și vânzare pe acesta.

După ce a trecut procedura de listare, valorile mobiliare sunt incluse în lista de tranzacționare a bursei.

Adesea, participanții la piață numesc lista în sine o listă. Mai mult, fiecare site are propria listă.

Inițiatorul listării este cel mai adesea compania emitentă, cu toate acestea, în cazuri rare, bursa în sine poate exprima dorința de a include anumite valori mobiliare în lista sa, dacă acestea sunt deja la mare căutare în rândul comercianților prin canale informale.

Pentru companii, listarea la bursă are un număr mare de avantaje și, prin urmare, nu este surprinzător faptul că întreprinderile depun eforturi mari pentru a trece prin această procedură.

Este important ca o listă de schimb să nu fie confundată cu o IPO. În primul caz, compania caută să intre în lista de cotații a unei anumite platforme de tranzacționare. O IPO implică faptul că o companie se transformă într-o companie publică și că valorile sale mobiliare devin disponibile investitorilor nu numai prin intermediul, ci și prin alte canale, de exemplu, prin sucursalele sale.

Etape de listare

Procedura de listare prevede mai multe etape pe care trebuie să le parcurgă o companie emitentă înainte ca valorile mobiliare să devină disponibile investitorilor.

  1. Totul începe cu depunerea unei cereri. Acest lucru poate fi realizat atât de emitentul însuși, cât și de o persoană care reprezintă interesele companiei.
  2. Apoi vine etapa examinărilor. Reprezentanții bursiere analizează atât valorile mobiliare, cât și toate datele disponibile despre companie. Se investighează rentabilitatea întreprinderii și lichiditatea activelor sale. Compania este obligată să furnizeze toate situațiile financiare colectate în ultimii ani.
  3. O comisie specială ia în considerare rezultatele examinărilor și decide să adauge valori mobiliare la listarea sa sau să respingă cererea.
  4. Dacă decizia este pozitivă, ambele părți - compania și bursa, încheie un acord.

Procedura durează în medie aproximativ 1-2 luni. Pentru a rămâne pe listă, emitentul va trebui, de regulă, să transmită datele necesare la bursă o dată pe trimestru.

Regulile de listare aplicate companiilor comerciale variază. Unii ar putea admite să enumere doar întreprinderi a căror capitalizare este de cel puțin 50 de milioane de dolari, iar timpul prezenței lor pe piață este de cel puțin 3 ani. Alții pot ridica sau coborî bara pentru aceste cerințe și alte.

Dacă nu sunt îndeplinite toate condițiile, dar valorile mobiliare sunt de interes pentru schimb, primesc o listă preliminară a valorilor mobiliare - se mai numește pre-listare... De asemenea, investitorii pot tranzacționa aceste acțiuni, dar în afara zidurilor bursierei și a nivelului de tranzacționare, nu sunt responsabili pentru acestea.

Niveluri de listare

În principal, există mai multe niveluri de listare pe burse. Primul premium sunt incluse cele mai lichide titluri cu un nivel ridicat de fiabilitate.

Companiilor al doilea nivel cerințele nu sunt atât de mari. Și cel mai mic pentru întreprinderile care solicită a treia, așa-numitul listă necotată... Investitorii care cumpără valori mobiliare ale unor companii de acest nivel ar trebui să își analizeze cu atenție fiabilitatea.

De exemplu, site-urile principale și alternative sunt valabile pentru. Primul este împărțit în două niveluri: „Standard” și „Premium”. Piața alternativă este destinată întreprinderilor în curs de dezvoltare mici și mijlocii care sunt admise aici în cadrul unei proceduri simplificate.

Din când în când, site-urile pot crește sau invers reduce nivelurile de listare a obligațiunilor, acțiunilor sau chiar să le elimine complet.

Tipuri de listare

Distingeți între listarea primară și secundară.

Listare principală implică faptul că acțiunile sunt disponibile investitorilor la nivelul schimbului din țara în care este înregistrată compania.

La listare secundară valorile mobiliare sunt aduse pe piețele internaționale și incluse în listele platformelor străine. Acest lucru se poate face numai dacă etapa inițială de listare a fost trecută.

Incă mai este listă dublă,în care compania încearcă în mod constant să intre în listele de cotații ale mai multor platforme de tranzacționare din țara sa de origine.

Precum și listare încrucișată- în acest caz, compania trimite aplicații pentru a fi adăugate la listele mai multor platforme de schimb din diferite țări. Mai mult, dacă unul dintre ei aprobă adăugarea de valori mobiliare, pe de altă parte, compania are ocazia să finalizeze procedura de listare în cadrul unui sistem simplificat. Acest lucru reduce nu numai costurile materiale, ci și timpul pentru examinarea cererii.

Care sunt avantajele emitentului

Companiile fac eforturi pentru a fi cotate la bursă dintr-un motiv, deoarece acest lucru le promite o serie de beneficii. În primul rând, atractivitatea lor pentru investiții crește și, ca rezultat, este mai ușor să atragi fonduri pentru dezvoltarea ulterioară. Plusurile includ, de asemenea:

  • creșterea capitalizării companiei cu o creștere a cererii de titluri emise;
  • creșterea vizibilității și încrederii în comunitatea de afaceri;
  • creșterea lichidității acțiunilor, obligațiunilor;
  • abilitatea de a adăuga pe listele de schimb valutar;
  • în unele cazuri, puteți solicita beneficii fiscale.

Cu toate acestea, nu uitați că, de acum înainte, o atenție sporită va fi acordată activităților companiei, iar orice acțiune va afecta instantaneu valoarea acțiunilor. În plus, procedura de listare nu este gratuită. Toate examinările experților costă bani.

Ce oferă investitorilor

Principalul lucru este încrederea. Investitorii, care investesc în acțiuni ale companiei, știu că fiabilitatea sa a fost verificată de profesioniști. Prezența în listă de schimb îi scutește de verificări independente ale fiabilității întreprinderii.

Ce este radierea

Dacă valorile mobiliare sunt incluse în lista de cotare a bursei, nu există nicio garanție că vor rămâne acolo pentru totdeauna. În anumite condiții, site-ul le poate șterge din acesta. Acest lucru se întâmplă în cazul, de exemplu, dacă emitentul încetează să respecte condițiile schimbului, nu își îndeplinește obligațiile, se declară faliment etc.

De asemenea, prețul acțiunilor, care nu crește în timp, poate duce la radiere, ceea ce indică o cerere redusă. Se întâmplă ca inițiatorul radierii să fie compania însăși, de exemplu, într-o fuziune de întreprinderi.

Listarea criptomonedelor

Listarea este adesea discutată și în mediul criptomonedelor. Aici, monedele sau jetoanele digitale tind să apară pe lista de tranzacționare a platformelor de schimb.

Proiectele de criptomonede se străduiesc să intre în listele burselor populare

Cerințele pentru listarea pe bursele criptografice variază. Este mult mai dificil să ajungi la site-urile mari cunoscute decât la cele mici. Prin urmare, majoritatea proiectelor încep cu platforme mici de tranzacționare.

Prețul de emisiune

Una dintre problemele principale este costul . Schimburile puțin cunoscute pot adăuga gratuit criptomonede la listă. Intrarea pe listele de platforme cunoscute poate costa mii, sau chiar zeci de mii de dolari - se iau bani pentru a analiza o monedă înainte de listare. Există totuși excepții.

Binance, de exemplu, a anunțat în această toamnă că taxele de listare vor fi destinate finanțării proiectelor caritabile. În același timp, nu există prețuri fixe - dezvoltatorii înșiși determină cât vor să plătească pentru listare. Conducerea Poloniex susține că nu necesită deloc bani pentru listare.

La începutul anului, jurnaliștii Business Insider au publicat un articol potrivit căruia pragul minim pentru listarea schimburilor criptografice pentru proiectele ICO este de 50.000 de dolari, iar în unele cazuri poate ajunge la 1 milion de dolari.

Au existat și cazuri în care gestionarea schimburilor a dat peste mită pentru includerea monedelor în listă. Un exemplu este cea mai cinstită bursă - directorii săi operaționali și tehnici au fost plătiți cu aproximativ 890 de mii de dolari pentru a adăuga criptomoneda S-coin pe lista de tranzacționare.

Cum functioneaza

Pentru ca un jeton să fie listat, cel mai adesea este necesar să depuneți o cerere și să completați un chestionar pe platforma selectată. Cu toate acestea, monedele populare ale schimbului pot fi incluse în listă singure, fără a aștepta ca echipa de proiect să ofere acest lucru. De exemplu, bitcoin (BTC) este obligatoriu la fiecare schimb și, de regulă, Ethereum (ETH).

Ce întrebări se întâlnesc cel mai adesea în chestionar:

  • numele și descrierea monedei;
  • data lansării rețelei principale, precum și a platformei în sine;
  • link către Github;
  • link către Cartea albă a proiectului;
  • linkuri către rețelele sociale;
  • dacă există minerit în rețea și dacă a existat pre-minerit;
  • emisie maximă de monede etc.

Adesea, schimburile organizează concursuri între utilizatorii lor - votează pentru criptomonedele propuse, iar moneda câștigătoare este adăugată pe lista de cotații.

Huobi Global a lansat o platformă automată de listare a criptomonedelor la sfârșitul verii 2018. Cu ajutorul său, bursa intenționează să accelereze procesul de adăugare a jetoanelor pe lista de tranzacționare și să o facă transparentă.

Nuanțe importante

Primul lucru la care se uită schimburile este valoarea monedei, utilitatea acesteia pentru comunitate. Pe locul al doilea se află securitatea proiectului, deoarece dacă rețeaua criptografică este spartă, schimbul va avea de suferit. Sunt sigur că vor fi interesați de profesionalism, precum și de reputația echipei.

De exemplu, la Bittrex există o etapă preliminară de examinare a unei cereri și una aprofundată. Dacă specialiștii companiei consideră, în faza preliminară, că moneda merită să fie listată la bursă, începe un studiu aprofundat al caracteristicilor sale tehnice, capabilităților inovatoare și conformității cu cerințele platformei.

Monedele care pot fi recunoscute ca valori mobiliare, bursele încearcă să nu adauge... De exemplu, Poloniex invită imediat dezvoltatorii să se familiarizeze cu testul lui Howie pentru a determina dacă un simbol poate îndeplini sau nu aceste criterii.

Excepția dintre principalele platforme este schimbul Coinbase, care a primit aprobarea de reglementare corespunzătoare și poate opera oficial jetoane care au proprietățile valorilor mobiliare.

Interesant este că, dacă un material contrazice legile unei anumite țări, este posibil să nu fie disponibil pentru utilizatorii din anumite jurisdicții.

„Efectul schimburilor”

După adăugarea de cripto-schimburi populare la listări, costul monedelor crește de obicei brusc - cu o medie de 25-30%. Acest model a fost chiar numit „efectul bursier”. Acest lucru se întâmplă datorită faptului că mai mulți utilizatori află despre monedă, aceasta devine recunoscută și crește cererea pentru aceasta. Cu toate acestea, cel mai adesea această decolare este de scurtă durată și în curând costul începe să scadă.

Există, de asemenea, situații în care prețul jetoanelor după intrarea pe listele de tranzacționare a schimburilor, dimpotrivă, scade. Acest lucru se întâmplă cel mai adesea atunci când proiectul este listat imediat după aceea, iar investitorii care au investit în timpul vânzării de jetoane caută să câștige bani în plus pe monedă mai repede, fuzionându-l activ pe bursă.

Criptocoinele sunt radiate din mai multe motive:

  • interes scăzut din partea comercianților;
  • modificări ale legislației;
  • hacking-ul blockchain-ului rețelei criptografice;
  • refuzul dezvoltatorilor de a susține în continuare moneda;
  • reclamațiile utilizatorilor.

Jetoanele nu sunt de obicei eliminate imediat - schimbul oferă comercianților câteva săptămâni pentru a închide poziții și a retrage fonduri în propriile portofele.

Listare în comerț

Conceptul listării este prezent și în domeniul tranzacționării. Atunci când un furnizor dorește ca produsele sale să fie vândute, de exemplu, pe rafturile unui mare lanț de retail, trebuie mai întâi să fie de acord cu conducerea companiei pentru a adăuga produsul său la listă.

Dacă produsul nu este solicitat în rândul cumpărătorilor, acesta poate trece și prin procedura de radiere, caz în care dispare de pe rafturile magazinelor.

Când compilați programul, puteți seta parametrul "l" (listare):

Apoi, pe lângă fișierul cu suma codului obiectului. obj, o sumă de listare a fișierelor. primul:

  • 1; sumă. asm - un program care calculează S = A + B
  • 2 0000 segment de date
  • 3 0000 0001 a dw 01h
  • 4 0002 0002 b dw 02h
  • 5 0004 ???? s dw?
  • 6.0006 date se termină
  • 7 0000 segment de cod
  • 8 presupunem ds: date
  • 9 0000 BA 0000 încep: mov dx, date
  • 10 0003 8E DA mov ds, dx
  • 11 0005 A1 0000r mov ax, a
  • 12 0008 03 06 0002r adăugați topor, b
  • 13 000C A3 0004r mișcări, ax
  • 14 000F B8 4C00 axe de deplasare, 4C00h
  • 15 0012 CD 21 int 21h
  • 16 0014 coduri
  • 17 sfârșit

Listarea este un tabel care conține patru coloane:

    Numărul liniei.

    O adresă într-un segment, adică de la început (offset).

    Conținutul memoriei la aceste adrese. În segmentul de date, acestea sunt valorile variabilelor, în segmentul de cod, acestea sunt codurile mașinii din instrucțiuni.

    Cod asamblator.

Comentariile la listă sunt, de asemenea, salvate, doar omise aici pentru a economisi spațiu.

Din listă puteți vedea că numai liniile 9-15 corespund comenzilor procesorului. Restul liniilor corespund așa-numitelor. directive de asamblare.

În orice caz, apar informații de diferite niveluri. Există informații direct despre sarcină și există informații despre informații - meta informații. Acestea sunt, de exemplu, diverse explicații, instrucțiuni etc. Există două tipuri de informații în codul sursă al limbajului de asamblare:

    comenzi - informații pentru procesor;

    directive - informații pentru ansamblul în sine, cum să compilați programul: cum să traduceți instrucțiunile în limbajul mașinii și cum să plasați datele.

Există o analogie aici cu selectarea tipurilor de comenzi. Comenzile de transfer de date, transferurile de control și comenzile aritmetico-logice transportă informații despre sarcină și comenzile de control ale mașinii - despre condițiile pentru executarea acesteia, adică reprezintă, de asemenea, metainformații.

Programul în cauză conține următoarele directive:

    segment - directivă pentru declararea începutului unui segment;

    dw (definirea cuvântului) este o directivă pe 16 biți pentru definirea datelor (alocarea și inițializarea unei zone de memorie);

    ends (end segment) - directivă pentru a declara sfârșitul segmentului;

    assume - directivă pentru atribuirea unui registru de segment unui segment;

    end - directivă care indică sfârșitul programului, argumentul său trebuie să fie eticheta primei comenzi a programului - punctul de intrare în program.

Există, de asemenea, următoarele directive privind definirea datelor:

    db (define byte) - directivă pentru definirea unei zone de memorie în 8 biți;

    dd (definește cuvântul dublu) este o directivă pentru definirea unei zone de memorie pe 32 de biți.

Există directive precedate de o perioadă. Din acest tip de directive, avem nevoie doar de directive pentru specificarea setului de instrucțiuni utilizate pentru un anumit model de procesor, de exemplu:

    386 - sunt utilizate comenzi non-sistem ale procesorului i80386;

    386p - sunt utilizate toate comenzile procesorului i80386, inclusiv comenzile de sistem.

Liniile 3-5 conțin directivele pentru definirea variabilelor A, B și S. În mod colectiv, liniile 3-5 și 9-15 conțin informații despre procesor - un program care include instrucțiuni și date. Acestea sunt mapate direct în memoria computerului.

Programare

Codul sursă este fie utilizat pentru a produce cod obiect, fie este executat de interpret. Modificările nu se fac niciodată în codul obiectului, ci doar în cel original, urmate de o reconversie în cod obiect.

Un alt scop important al codului sursă este descrierea unui program. Folosind textul programului, puteți restabili logica comportamentului său. Comentariile sunt utilizate pentru a face codul sursă mai ușor de înțeles. Există, de asemenea, instrumente care vă permit să preluați automat documentația din codul sursă - așa-numitul. generatoare de documentație.

În plus, codul sursă are multe alte utilizări. Poate fi folosit ca instrument didactic; Programatorii începători pot găsi util să examineze codul sursă existent pentru a învăța tehnici și metodologii de programare. Este, de asemenea, utilizat ca instrument de comunicare între programatori cu experiență datorită naturii sale (în mod ideal) concise și lipsite de ambiguitate. Partajarea codului între dezvoltatori este adesea citată ca un factor care contribuie la îmbunătățirea experienței programatorului.

Programatorii transferă adesea codul sursă de la un proiect la altul, care se numește reutilizarea codului ( Reutilizarea software-ului).

Codul sursă este o componentă esențială pentru portarea software-ului pe alte platforme. Fără cod sursă pentru orice software, portarea este fie prea dificilă, fie imposibilă.

Organizare

Codul sursă al unei părți a software-ului (modul, componentă) poate consta din unul sau mai multe fișiere. Codul programului nu este neapărat scris într-un singur limbaj de programare. De exemplu, programele C conțin adesea inserții în limbaj de asamblare în scopul optimizării. Situațiile sunt posibile și atunci când unele componente sau părți ale unui program sunt scrise în diferite limbi, cu asamblarea ulterioară într-un singur modul executabil folosind o tehnologie cunoscută sub numele de biblioteci de legătură ( legarea bibliotecii).

Software-ul complicat necesită construirea a zeci sau chiar sute de fișiere sursă. În astfel de cazuri, pentru a simplifica compilarea, se folosesc de obicei fișiere de proiect, care descriu dependențele dintre fișiere cu codul sursă și descriu procesul de construire. Aceste fișiere pot conține și alți parametri ai compilatorului și ai mediului de dezvoltare. Pentru diferite medii de proiectare, pot fi utilizate fișiere de proiect diferite, iar în unele medii aceste fișiere pot fi într-un format de text adecvat pentru editare directă de către un programator folosind editori de text universali, în alte medii sunt acceptate formate speciale, iar fișierele sunt create și modificate folosind instrumente speciale.programe. Fișierele de proiect sunt denumite în mod obișnuit cod sursă. În marea majoritate a mediilor de limbaj moderne, fișierele de proiect sunt utilizate în mod necesar, indiferent de complexitatea celuilalt cod sursă inclus în proiect. Adesea, codul sursă înseamnă și fișiere de resurse care conțin diverse date, de exemplu, graficele necesare pentru a construi un program.

Pentru a facilita lucrul cu codul sursă, pentru lucrul comun asupra codului de către o echipă de programatori, sunt utilizate sisteme de control al versiunii.

Calitate

Spre deosebire de oameni, nu există un cod „bine scris” sau „prost scris” pentru un computer. Dar modul în care este scris codul poate avea un efect profund asupra procesului de întreținere. Calitatea codului sursă poate fi evaluată după următorii parametri:

  • lizibilitatea codului (inclusiv prezența sau absența comentariilor asupra codului;
  • ușurința suportului, testarea, depanarea și remedierea erorilor, modificarea și portarea;
  • complexitate scăzută;
  • utilizarea resurselor reduse - memorie, procesor, spațiu pe disc;
  • niciun comentariu afișat de compilator;
  • fără „gunoi” - variabile neutilizate, blocuri de cod inaccesibile, comentarii inutile învechite etc.

Acest lucru poate fi citit de oameni. În sens generalizat, orice intrare pentru un traducător. Codul sursă este tradus în cod executabil complet înainte de a rula programul utilizând compilatorul sau poate fi executat imediat folosind interpretul.

Programare

Codul sursă este folosit fie pentru a produce cod obiect, fie este executat de interpret. Modificările se fac doar la cea originală, urmată de reconversia în obiect.

Un alt scop important al codului sursă este descrierea unui program. Folosind textul programului, puteți restabili logica comportamentului său. Comentariile sunt utilizate pentru a face codul sursă mai ușor de înțeles. Există, de asemenea, instrumente care vă permit să preluați automat documentația din codul sursă - așa-numitul. generatoare de documentație.

În plus, codul sursă are multe alte utilizări. Poate fi folosit ca instrument didactic; Programatorii începători pot găsi util să examineze codul sursă existent pentru a învăța tehnici și metodologii de programare. Este, de asemenea, utilizat ca instrument de comunicare între programatori experimentați datorită naturii sale concise și lipsite de ambiguitate. Partajarea codului între dezvoltatori este adesea citată ca un factor care contribuie la îmbunătățirea experienței programatorului.

Programatorii transferă adesea codul sursă (ca module, așa cum este sau cu adaptare) de la un proiect la altul. Aceasta se numește reutilizarea codului.

Codul sursă este o componentă esențială pentru portarea software-ului pe alte platforme. Portarea este fie prea dificilă, fie imposibilă fără codul sursă al vreunei piese software.

Organizare

Codul sursă al unei părți a software-ului (modul, componentă) poate consta din unul sau mai multe fișiere. Codul programului nu este neapărat scris într-un singur limbaj de programare. De exemplu, programele C conțin adesea inserții în limbaj de asamblare din motive de optimizare. De asemenea, este posibil ca unele componente sau părți ale unui program să fie scrise în diferite limbi și apoi asamblate într-un singur modul executabil folosind o tehnologie cunoscută sub numele de biblioteci de legătură ( legarea bibliotecii).

Software-ul complicat necesită construirea a zeci sau chiar sute de fișiere sursă. În astfel de cazuri, pentru a simplifica compilarea, se folosesc de obicei fișiere de proiect, care descriu dependențele dintre fișiere cu codul sursă și descriu procesul de construire. Aceste fișiere pot conține, de asemenea, opțiuni pentru compilator și mediu de proiectare. Pentru diferite medii de proiectare, pot fi utilizate fișiere de proiect diferite, iar în unele medii aceste fișiere pot fi într-un format de text adecvat pentru editare directă de către un programator folosind editori de text universali, în alte medii sunt acceptate formate speciale, iar fișierele sunt create și modificate folosind programe instrumentale speciale. Fișierele de proiect sunt denumite în mod obișnuit cod sursă. Adesea, codul sursă înseamnă și fișiere de resurse care conțin diverse date, de exemplu, grafica necesară pentru a construi un program.

Sistemele de control al versiunilor sunt utilizate pentru a facilita lucrul cu codul sursă și pentru a colabora la cod cu o echipă de programatori.

Calitate

Spre deosebire de oameni, nu există un cod „bine scris” sau „prost scris” pentru un computer. Dar modul în care este scris codul poate avea un efect profund asupra procesului de întreținere. Calitatea codului sursă poate fi evaluată după următorii parametri:

  • lizibilitatea codului (inclusiv prezența comentariilor asupra codului);
  • ușurința suportului, testarea, depanarea și remedierea erorilor, modificarea și portarea;
  • utilizarea economică a resurselor: memorie, procesor, spațiu pe disc;
  • niciun comentariu afișat de compilator;
  • fără „gunoi” - variabile neutilizate, blocuri de cod inaccesibile, comentarii inutile învechite, etc;
  • tratarea adecvată a erorilor;
  • capacitatea de a internaționaliza interfața.

Cod sursă neexecutabil

Licențele software copyleft gratuite necesită distribuirea codului sursă. Aceste licențe sunt, de asemenea, adesea utilizate pentru lucrări non-software, cum ar fi documentație, imagini, fișiere de date pentru jocuri pe computer.

În astfel de cazuri, codul sursă este considerat forma preferată a lucrării pentru editare. Poate fi denumită și versiunea „transparentă” în alte licențe decât software. Acesta ar putea fi, de exemplu:

  • pentru un fișier comprimat cu pierdere de date - versiune fără pierderi;
  • pentru redarea unei imagini vectoriale sau a unui model tridimensional - versiunea vectorială și respectiv modelul;
  • pentru imagini text - același text în format text;
  • pentru muzică - un fișier în format intern al editorului de muzică;
  • și în cele din urmă, fișierul în sine, dacă îndeplinește condițiile specificate sau dacă pur și simplu nu exista o versiune mai convenabilă.

Vezi si