Extras din laborator
Scopul lucrării:
- Implementarea STDIO pentru controller;
- Comunicarea serială.
Sarcina:
- Se citește un șir de caractere (maxim 30 de caractere) din terminalul virtual. Să se vizualizeze cu ajutorul unui LED prin codul morse acest șir.
Analiza
Standard IO. Acest fișier declară facilitățile standard IO implementate în avr-libc. Datorită naturii hardware-ului de bază, este implementat doar un subset limitat de standard IO. Nu există o implementare reală a fișierului disponibilă, deci poate fi efectuată numai dispozitivul IO al dispozitivului. Deoarece nu există niciun sistem de operare, aplicația trebuie să furnizeze suficiente detalii despre dispozitivele lor, pentru a le face utilizabile de către facilitățile standard IO.
Din cauza constrângerilor de spațiu, unele funcționalități nu au fost implementate deloc (cum ar fi unele din transformările printf care au fost lăsate în afara).
Cu toate acestea, utilizatorii potențiali ai acestei implementări ar trebui avertizați: familia de funcții printf și scanf, deși de regulă este asociată cu lucruri probabil simple, cum ar fi celebrul "Hello World!" , sunt de fapt destul de complexe, ceea ce face ca includerea lor să mănânce o cantitate echitabilă de spațiu de cod. De asemenea, ele nu sunt rapide datorită naturii interpretării șirului de formate la momentul executării.
Ori de câte ori este posibil, recurgerea la facilitățile de conversie predefinite (uneori nestandardizate) oferite de avr-libc va costa de obicei mult mai puțin în ceea ce privește viteza și dimensiunea codului.Ca o metodă alternativă la fdevopen () , macrofdev_setup_stream () ar putea fi folosit pentru a configura o structură FILE furnizată de utilizator
Trebuie remarcat faptul că conversia automată a unui caracter de linie nouă într-un retur de călătorie - secvența de linie nouă rupe transferurile binare. Dacă se dorește transferul binar, nu trebuie efectuată nicio conversie automată, ci orice șir care are ca scop emiterea unei secvențe CR-LF trebuie să utilizeze în "rn"mod explicit.
Pentru comoditate, prima convorbire la fdevopen()care se deschide un flux pentru citire va face ca fluxul rezultat să fie aliasat stdin. De asemenea, primul apel la fdevopen() care se deschide un flux pentru scriere va face ca fluxul rezultat să fie aliasat atât la stdout,, și stderr. Astfel, dacă deschiderea a fost făcută atât cu intenția de citire cât și cu scrierea, toate cele trei fluxuri standard vor fi identice. Rețineți că aceste pseudonime nu se disting unul de celălalt, apelând astfel fclose()la un astfel de flux va închide efectiv toate pseudonimele sale.
Este posibil să legați date suplimentare de utilizator la un flux folosind fdev_set_udata () . Funcțiile backend put și get funcții pot extrage aceste date de utilizator folosind fdev_get_udata () , și pot acționa în mod corespunzător. De exemplu, o singură funcție pusă ar putea fi folosită pentru a vorbi cu două UART-uri diferite în acest fel, sau funcțiile de punere și de a obține pot păstra starea internă între apelurile de acolo.
Preview document
Conținut arhivă zip
- Interactiunea cu utilizatorul.docx