Jump to content

SUBIECTE NOI
« 1 / 5 »
RSS
O smecherie pe care nu o inteleg

Balcon parter fara acte

unde gasesc un speed bag in bucur...

Programe TV cu altfel de sporturi
 Laptop "bun la toate" max...

ctfmon.exe - System Error (in Saf...

Ați prins vremurile cand 120 Volț...

Whatsapp nu afișeaza numele ...
 Medii admitere Politehnica Bucure...

Se extinde Baza de la Kogalniceanu

Politist mutilat de caine in curt...

Trotineta- cat rezista?
 Windows 11 si inregistrare de pe ...

Cont Facebook spart

Accesare Plex prin webstation

Reziliere contract Digi Mobil?
 

[Embedded] Cum fac ca userul sa defineasca pinii

- - - - -
  • Please log in to reply
2 replies to this topic

#1
bogdan2011

bogdan2011

    Senior Member

  • Grup: Senior Members
  • Posts: 2,097
  • Înscris: 07.01.2011
Am scris o biblioteca pentru un ecran LCD in SDK-ul de la raspberry pi pico. In lcd.c am functiile care controleaza LCD-ul si care lucreaza cu GPIO (gpio_init, gpio_put etc). Tot acolo am definit si pinii folositi de aceste functii, dar as vrea ca userul sa poata defini proprii pini in main.c, fara sa editeze lcd.c.
Codul arata cam asa:

uint RS = 16;
uint EN = 17;
uint D4 = 18;
uint D5 = 19;
uint D6 = 20;
uint D7 = 21;

void lcd_setup() {
// initialize GPIO pins
gpio_init(RS);
gpio_init(EN);
gpio_init(D4);
gpio_init(D5);
gpio_init(D6);
gpio_init(D7);
// set direction of GPIO pins
gpio_set_dir(RS, GPIO_OUT);
gpio_set_dir(EN, GPIO_OUT);
gpio_set_dir(D4, GPIO_OUT);
gpio_set_dir(D5, GPIO_OUT);
gpio_set_dir(D6, GPIO_OUT);
gpio_set_dir(D7, GPIO_OUT);
//set all pins low
gpio_put(RS, 0);
gpio_put(EN, 0);
gpio_put(D4, 0);
gpio_put(D5, 0);
gpio_put(D6, 0);
gpio_put(D7, 0);
}


Ce am incercat pana acum:
- am definit variabilele pinilor in lcd.c fara a le da o valoare, apoi le-am dat-o in main.c dar compiler-ul s-a plans ca sunt dublu declarate
- am trecut pinii ca parametrii ai functiei, dar avand in vedere ca mai am si alte functii, devine prea complicat
- am creat un struct, dar dupa ce userul creaza propriul "obiect", nu stiu cum sa pasez pinii catre functii. Ceva de genul:

typedef struct LCD {
uint RS_Pin;
uint EN_Pin;
uint D4_Pin;
uint D5_Pin;
uint D6_Pin;
uint D7_Pin;
} LCD;

LCD lcd1;
lcd1.RS_Pin = 16;
lcd1.EN_Pin = 17;
etc...



#2
red46

red46

    Senior Member

  • Grup: Senior Members
  • Posts: 4,519
  • Înscris: 06.03.2016
Pasezi pinii ca parametri functiei lcd_setup() si ii stochezi in structura definita global.
Sau dai #define in lcd.h la fiecare pin o valoare implicita, apoi ii redefinesti in main.c, dupa caz. Header-ul bineinteles trebuie sa contina si prototipul functiilor.

Edited by red46, 01 December 2022 - 16:04.


#3
Gillphade

Gillphade

    New Member

  • Grup: Candidate Members
  • Posts: 5
  • Înscris: 06.01.2023
Puteți trece numerele PIN ca argumente de funcție în lcd.c și permiteți utilizatorului să le specifice în main.c atunci când apelează funcțiile. De exemplu, puteți modifica semnătura funcției gpio_init din lcd.c la:
void gpio_init(int pin)

Apoi, în main.c, utilizatorul poate specifica numărul PIN dorit atunci când apelează funcția gpio_init:
gpio_init(17);

În acest fel, utilizatorul poate alege ce pin să folosească fără a fi nevoie să modifice codul din lcd.c. Puteți aplica aceeași abordare și altor funcții care folosesc GPIO.

Anunturi

Chirurgia cranio-cerebrală minim invazivă Chirurgia cranio-cerebrală minim invazivă

Tehnicile minim invazive impun utilizarea unei tehnologii ultramoderne.

Endoscoapele operatorii de diverse tipuri, microscopul operator dedicat, neuronavigația, neuroelectrofiziologia, tehnicile avansate de anestezie, chirurgia cu pacientul treaz reprezintă armamentarium fără de care neurochirurgia prin "gaura cheii" nu ar fi posibilă. Folosind tehnicile de mai sus, tratăm un spectru larg de patologii cranio-cerebrale.

www.neurohope.ro

0 user(s) are reading this topic

0 members, 0 guests, 0 anonymous users

Forumul Softpedia foloseste "cookies" pentru a imbunatati experienta utilizatorilor Accept
Pentru detalii si optiuni legate de cookies si datele personale, consultati Politica de utilizare cookies si Politica de confidentialitate