Ovdje pročitajte kako se registrirati na forum.

Programski jezik "C"

Sve u vezi softwarea koje koriste makeri, npr.: software za PCB dizajn(kao što su KiCad, Eagle ili Altium), Fritzing, Arduino IDE, mbed itd.
Odgovorite
Avatar
hrvoje.penavin#4949
Novak
Novak
Postovi: 11
Pridružen/a: ned tra 15, 2018 2:59 pm
Lokacija: Sisak
Kontakt:

Programski jezik "C"

Post Postao/la hrvoje.penavin#4949 » ned ožu 31, 2019 9:52 pm

Arduino koristi C. Koji C: C, C++ ili C#? Ili sva tri?
Lijepi pozdrav!
Avatar
david.zovko#9797
e-radionica.com team
e-radionica.com team
Postovi: 239
Pridružen/a: ned tra 15, 2018 2:59 pm
Lokacija: Osijek, Croatia
Kontakt:

Re: Programski jezik "C"

Post Postao/la david.zovko#9797 » pon tra 01, 2019 8:37 pm

Arduino je napisan u C i C++. U svojim kodovima možete koristiti oba. Gotovo za svaki library da bi funkcionirao trebate napraviti objekt iz neke klase definirane u njemu, što je feature C++-a.

C# se ne koristi.
Avatar
dekip#1819
Hobist
Hobist
Postovi: 44
Pridružen/a: pon srp 30, 2018 10:04 pm
Lokacija: Beograd
Kontakt:

Re: Programski jezik "C"

Post Postao/la dekip#1819 » pon tra 01, 2019 10:58 pm

Pa zapravo u pitanju je varijanta C.
int main() se ne koristi uopšte. Zapravo, ne vidi se da se koristi. ;)

Iz pera kolege Ružića:
Osnovni programski jezik koji se koristi na platformi Arduino je svojevrsna pojednostavljena varijanta jezika C. Tačnije, iz jezika su sklonjene neke kompleksnije stvari i uvedena je C/C++ biblioteka zvana Wiring, koja je preuzeta iz pomenute platforme Processing. Upravo iz činjenice da je Processing pisan za jezik Java, a Wiring za C/C++ proizilaze i nevelike razlike u njihovoj sintaksi.

https://www.sk.rs/2016/11/sklp05.html
Avatar
david.zovko#9797
e-radionica.com team
e-radionica.com team
Postovi: 239
Pridružen/a: ned tra 15, 2018 2:59 pm
Lokacija: Osijek, Croatia
Kontakt:

Re: Programski jezik "C"

Post Postao/la david.zovko#9797 » sri tra 03, 2019 10:39 pm

Ajde da uđemo u raspravu, zašto ne :D

int main() je skriven da useru bude jednostavnije, ali nalazi se u main.cpp:

Kod: Označite sve

#include <Arduino.h>

int main(void)
{
    init();

#if defined(USBCON)
    USBDevice.attach();
#endif
    
    setup();
    
    for (;;) {
        loop();
        if (serialEventRun) serialEventRun();
    }
        
    return 0;
}
A što se tiče programskog jezika, C programski jezik nije OOP (objektno-orijentirani jezik). U Arduinu se u (gotovo) svakom libraryju koriste objekti, tj. definirane su klase koje se inicijaliziraju kao objekti u sketch-ovima. Objekata u C-u nema, dok ih C++ ima. Npr., pri ruci mi je library za naš Maker Display, verziju s 32x9 LEDica. U .h fajlu libraryja definirali smo klasu:

Kod: Označite sve

class Maker_LED_Matrix_32 {
      public:
             Maker_LED_Matrix_32();
             int begin();                                          //Init function.
             int initLEDMatrix();                                  //Function sets up everything e-radionica Social Dispaly board.
             void brightness(uint8_t _fontLight, uint8_t _backingLight);      //Sets up font brightness and background brightness.
             void message(char* msg, int _ms, int _stp, int _rep); //Writes user defined message/text on display.
             void stopScroll();                                    //Calling this function scrolling will stop.
             void resumeScroll();                                  //Calling this function scrolling will continue.
             void deleteScroll();                                  //Function removes everything from screen and clears buffer.
             void picture(uint8_t* p, int posX, int posY);         //Function writes picture on screen (without scrolling).
             void scrollPicture(uint8_t* p, int _ms, int _stp);    //Function writes picture on screen with scrolling.
             void scrollTxtAndPics(char* txt, uint8_t** p, uint16_t* picsPos_x, uint16_t* picsPos_y, uint8_t n, int _ms, int _stp, int _rep);
             int repeatCount();                                    //Function return how much times message has been displayed
             void picture8Bit(uint8_t* p, int xSize, int ySize, int x0, int y0, uint8_t bright);    //Function that removes everything from screen and displays a 8bit gray scale image.
             
             int wifiNetwork(const char* _ssid, const char* _pass);                            //Funcion connects to WLAN network.
             int webPage(char* url, int _ms, int _stp, int _rep);         //Function opens web page and displays text on LED matrix.
             int webPageText(char* url, char* webText, int _n);               //Function opens a web and saves data into a string without displayig on matrix.
             
             int _dispMode;
};
Tu su samo prototipi funkcija, dok je puni kod (definicija) u .c fajlu. U sketchu, odmah na početku kreiramo objekt iz ove klase:

Kod: Označite sve

Maker_LED_Matrix_32 led;                   //Maker LED Matrix display library constructor.
Sve ovo ne bi bilo moguće napraviti u čistom C-u. Također, ako u Arduino IDE napraviš klasu, uspješno će se kompajlirati. Npr.:

Kod: Označite sve

class demoClass {
  private:
    int privateVar;
  public:
    float c;
    demoClass(int k) {
      c = k;
    }
};

void setup() {
  // put your setup code here, to run once:

}

void loop() {
  // put your main code here, to run repeatedly:

}
Jesam li sve dobro do sada rekao? :)

Vratimo se na Wiring. O njemu ne znam puno, očito je kombinacija C i C++, što doznajem iz brzinskog guglanja.


Što bi značio da je Arduino "varijanta C-a"? Kako misliš da bismo onda trebali definirati programski jezik Arduina?
Avatar
dekip#1819
Hobist
Hobist
Postovi: 44
Pridružen/a: pon srp 30, 2018 10:04 pm
Lokacija: Beograd
Kontakt:

Re: Programski jezik "C"

Post Postao/la dekip#1819 » čet tra 04, 2019 10:22 pm

Pa u principu si sve dobro napisao. I sve je tačno. I naravno kvalitetna rasprava je prava stvar.

Ipak, zamolio bih te da baciš oko na link ka online stranici našeg časopisa. Kolega Ružić je to sve veoma dobro napisao.

Takođe:
In fact, you already are; the Arduino language is merely a set of C/C++ functions that can be called from your code. Your sketch undergoes minor changes (e.g. automatic generation of function prototypes) and then is passed directly to a C/C++ compiler (avr-g++). All standard C and C++ constructs supported by avr-g++ should work in Arduino. For more details, see the page on the Arduino build process.
https://www.arduino.cc/en/main/FAQ

Hvala na konstruktivnom komentaru, pogledat ću :)
Odgovorite