Stranica: 1/1.

Programski jezik "C"

Postano: ned ožu 31, 2019 9:52 pm
Postao/la hrvoje.penavin#2123
Arduino koristi C. Koji C: C, C++ ili C#? Ili sva tri?

Re: Programski jezik "C"

Postano: pon tra 01, 2019 8:37 pm
Postao/la david.zovko#1116
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.

Re: Programski jezik "C"

Postano: pon tra 01, 2019 10:58 pm
Postao/la dekip#9849
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

Re: Programski jezik "C"

Postano: sri tra 03, 2019 10:39 pm
Postao/la david.zovko#1116
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?

Re: Programski jezik "C"

Postano: čet tra 04, 2019 10:22 pm
Postao/la dekip#9849
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 :)