EVIA Paradigma. ուղեցույց

EVIA Paradigma-ն տեսողական ծրագրավորում է. բլոկները գունապնակից քաշեք կտավի վրա, միացրեք դրանք կապերով և սեղմեք Run։ Նույն ծրագիրը կարելի է վերածել C (C99, C11, C17) կամ C++ (C++98-ից մինչև C++20) կոդի և կառուցել Clang-ով կամ GCC-ով, ինչպես նաև Arduino և ESP32 տախտակների կոդի։ Ծրագրի ինտերֆեյսն անգլերեն է, ուստի ընտրացանկերի և կոճակների անունները բերված են այնպես, ինչպես երևում են էկրանին։

Միջերեսն ինքը նույնպես կարող է լինել անգլերեն, ռուսերեն կամ հայերեն՝ Կարգավորումներ > Միջերեսի լեզուն։ Ընտրացանկերը, կոճակները, ներկապնակը և բլոկների անունները փոխվում են դրա հետ. ստեղծված կոդը և կոմպիլյատորների հաղորդագրությունները մնում են անգլերեն։ Փոփոխությունը ուժի մեջ է մտնում EVIA Paradigma-ի հաջորդ գործարկման ժամանակ։

  1. Կտավի վրա քաշեք Start-ը, մի քանի բլոկ և End-ը։
  2. Բլոկի ներքևի փոքր շրջանից (նրա ելքի պորտից) քաշեք դեպի մեկ այլ բլոկ՝ դրանք միացնելու համար։
  3. Բլոկի վրա կրկնակի սեղմումը բացում է նրա կոդը խմբագրելու համար։
  4. Մկնիկի անիվը սխեմայի վրա մոտեցնում և հեռացնում է այն ցուցիչի ուղղությամբ։
  5. Սեղմեք Run (F5)։ Ելքը երևում է ներքևի վահանակում. կատարվող բլոկը լուսավորվում է։
  6. Գործիքագոտում ընտրեք Language և սեղմեք Generate code (F7)՝ ծրագիրը տեսնելու, պահելու, կառուցելու և գործարկելու համար։

Տեսք և լեզու։ View > Theme-ը ընտրում է IntelliJ-ի բաց թեման, Darcula մուգ թեման կամ ձեր համակարգի կարգավորումը. թեման փոխվում է անմիջապես և հիշվում է։ Բաժինների ցանկի վերևում կարելի է ընտրել այս ուղեցույցի լեզուն՝ անգլերեն, ռուսերեն կամ հայերեն։

Բլոկներ

ԲլոկԿոդԻնչ է անում
Start / End-Որտեղ է սկսվում և ավարտվում գլխավոր ծրագիրը։
Setx = x + 1Արժեք է վերագրում փոփոխականին (կամ դաշտին՝ this.count = 0)։
InputnՀարցնում է արժեք և պահում այն։
Print"x = " + xՏպում է արտահայտության արժեքը։
If / Elsex > 10Երկու ելք՝ then և else։
Fori = 1; i <= 10; i = i + 1body ելքը կատարվում է, քանի դեռ պայմանը ճշմարիտ է. մարմնի վերջը միացրեք հետ՝ For բլոկին։ done-ը շարունակում է ծրագիրը ցիկլից հետո։
Whilen > 0Ստուգում է պայմանը յուրաքանչյուր անցումից առաջ։
Do-Whilen > 0Մարմինը կատարում է մեկ անգամ, ապա ստուգում։
Enter / Exitելքի անունըՄիայն դասի մեթոդի ներսում. որտեղ է այն սկսվում և ինչպես կարող է ավարտվել։

Board բլոկները (Pin Mode, Digital Write, Digital Read, Analog Read, Analog Write, Delay, Millis, UART, SPI, I2C) միկրոկոնտրոլերների համար են. տե՛ս Arduino և ESP32 տախտակներ բաժինը։

Արտահայտություններ

Արժեքները թվեր են կամ տեքստ։ Օպերատորները՝ ցածրագույն առաջնահերթությունից դեպի բարձրագույն.

Տեքստը գրվում է կրկնակի չակերտներով. թույլատրվում են \", \\, \n escape-հաջորդականությունները։ Պայմանը ճշմարիտ է, եթե դա ոչ զրոյական թիվ է կամ ոչ դատարկ տեքստ։

Դասեր և օբյեկտներ

Դասը միավորում է դաշտերը (տվյալներ, որոնք պահում է յուրաքանչյուր օբյեկտ) և մեթոդները (բլոկային ծրագրեր, որոնք աշխատում են այդ տվյալների հետ)։ Ստեղծեք այն Edit > New Class-ով, գունապնակի + New class-ով կամ նշեք բլոկները և սեղմեք Ctrl+G՝ դրանք դաս դարձնելու համար։

Մեթոդը կանչելու համար այն գունապնակի Classes բաժնից քաշեք կտավի վրա։ Բլոկի վրա աջ կամ կրկնակի սեղմումով ընտրվում են մեթոդը, օբյեկտը և արգումենտները։ Նույն օբյեկտի անունով բլոկները աշխատում են մեկ օբյեկտի հետ (և նրա դաշտերի). առանց օբյեկտի անվան բլոկն ունի իր սեփական օբյեկտը։ Օբյեկտները ստեղծվում են առաջին օգտագործման ժամանակ։

Մոդուլներ

Մոդուլը (*.eviam) դասերի ֆայլ է, որը կարող են օգտագործել մի քանի ծրագրեր։

Նախագծեր

File > New Project-ը ստեղծում է թղթապանակ՝ ծրագրին անհրաժեշտ ամեն ինչով.

MyProject/
  MyProject.eviaproj   նախագծի կարգավորումներ
  main.evia            գլխավոր ծրագիրը
  modules/             դասերի մոդուլներ
  build/               գեներացված կոդ (չի մտնում commit-ների մեջ)
  README.md
  .gitignore

Նախագիծը նորից բացեք File > Open Project-ով (ընտրեք թղթապանակը կամ .eviaproj ֆայլը)։ Նախագծում մոդուլները ներմուծվում են modules/-ից և արտահանվում են այնտեղ, իսկ Generate code-ը լրացուցիչ գրում է build/<անուն>.c կամ .cpp։ Նախագիծը հիշում է իր լեզուն։

Git և GitHub

Git ընտրացանկը գործարկում է ձեր համակարգչում տեղադրված git-ը և օգտագործում է արդեն կարգավորված մուտքը (Git Credential Manager, SSH բանալի կամ gh auth login)։ EVIA Paradigma-ն երբեք չի խնդրում և չի պահում գաղտնաբառեր կամ թոքեններ։

Տեղադրեք git-ը git-scm.com-ից, եթե ընտրացանկը ասում է, որ այն բացակայում է։

Գեներացված կոդ. C և C++

Generate code (F7)-ը ամբողջ ծրագիրը վերածում է մեկ սկզբնական ֆայլի։ Գործիքագոտու երեք բացվող ցանկերը (և կոդի պատուհանում) որոշում են արդյունքը. նույն ընտրությունները կան Run > Code Language and Mode-ում։ Կոդի պատուհանում դրանք փոխելիս կոդը նորից է գեներացվում։

ՑանկՏարբերակներԻնչն է փոխվում
LanguageC99, C11, C17
C++98, C++11, C++14, C++17, C++20
C. յուրաքանչյուր դասի համար struct և Class_m_method(self, ...) ֆունկցիաներ, փոքր runtime՝ միայն այն օգնականներով, որոնք օգտագործում է ծրագիրը։ C++. յուրաքանչյուր դասի համար անդամ-ֆունկցիաներով struct. C++98-ը օգտագործում է սովորական ցուցիչներ, C++11/14-ը՝ std::unique_ptr, C++17/20-ը՝ std::variant և std::to_chars։
FlowStructured
Goto
Structured. if/else, for, while, do/while և switch (պիտակներ՝ միայն այնտեղ, որտեղ կապերը չեն տեղավորվում բլոկային կառուցվածքի մեջ)։ Goto. յուրաքանչյուր բլոկ պիտակ է, իսկ յուրաքանչյուր կապ՝ անցում, ամենամոտը սխեմային։
ValuesSafe
Fast
Safe. թվեր և տեքստ՝ ինտերպրետատորի բոլոր ստուգումներով (չսահմանված փոփոխականներ, բաժանում զրոյի, թիվ չհանդիսացող տեքստ, անվերջ ռեկուրսիա)։ Fast. պարզ double փոփոխականներ և դաշտեր, տեքստ՝ միայն Print-ում, առանց կատարման ժամանակի ստուգումների։ Այն ծրագիրը, որը տեքստ է պահում փոփոխականում, չի կարող օգտագործել Fast արժեքներ. Generate code-ը կասի, թե որ բլոկն է խանգարում։

Յուրաքանչյուր համակցություն ստուգված է. ելքը համընկնում է ինտերպրետատորի ելքի հետ (Fast արժեքների դեպքում՝ առանց սխալների աշխատող ծրագրերի համար)։ Բլոկի, մեթոդի կամ դասի վրա աջ սեղմում → View source code՝ տեսնելու այն կոդը, որ դարձել է, լուսավորված, ձեր ընտրած լեզվով։

Կոդի պատուհանը կարող է պահել ֆայլը, կառուցել այն և գործարկել։ C-ի համար օգտագործվում է համապատասխան C կոմպիլյատորը (clang, gcc), ճիշտ -std= և -lm։ Կոմպիլյատորն ընտրվում է Settings-ում. Clang (clang++ / clang) կամ GCC (g++ / gcc, տարբերակ 13 կամ ավելի նոր)։ Windows-ում EVIA Paradigma-ն կարող է դրանցից ցանկացածը տեղադրել ինքնուրույն. llvm-mingw (Clang) կամ WinLibs (GCC, MinGW-w64)։ Visual Studio-ն պետք չէ։

Arduino և ESP32 տախտակներ

Եվս երեք լեզու կոդ են ստեղծում միկրոկոնտրոլերների համար։ Երկուսն էլ օգտագործում են արագ արժեքներ (թվեր. տեքստ՝ միայն Print-ում), իսկ Print-ը և Input-ը աշխատում են սերիական պորտով՝ 115200 բոդ արագությամբ։

ԼեզուՏախտակներԻնչով է կառուցվում
ArduinoArduino Uno, Nano, Mega 2560, Leonardo, Micro, Pro Mini;
ESP32, ESP32-S2, -S3, -C3, -C6, -H2
Մեկ սքեթչ (.ino)՝ setup() և loop()-ով. arduino-cli՝ arduino:avr և esp32:esp32 միջուկներով։
AVR CArduino-ի վեց AVR տախտակները (ATmega328P, ATmega2560, ATmega32U4) Bare-metal C՝ առանց Arduino միջուկի։ Պինները, թայմերները, PWM-ը, ADC-ն և UART-ը կառավարվում են չիպի ռեգիստրներով։ Կառուցում են avr-gcc-ն և avr-libc-ը, բեռնում է avrdude-ը։
PIC32 Cինը PIC32MX չիպ. MX1xx/2xx (PIC32MX150F128B, 250F128B, 270F256B), MX3xx/4xx (320F128H, 340F512H, 440F256H, 460F512L), MX5xx/6xx/7xx (695F512L, 795F512L) և PIC32 Ethernet Starter Kit II (LED1՝ RD0-ին) Bare-metal C Microchip-ի XC32-ի համար. ժամացույցը, պինները, PWM-ը, ADC-ն, UART-ը, SPI-ն և I2C-ն կառավարվում են ռեգիստրներով, առանց Harmony-ի և plib-ի։ Կառուցում է xc32-gcc-ն, .hex-ը ստեղծում է xc32-bin2hex-ը, իսկ բեռնում է ձեր ընտրած հրամանը (լռելյայն՝ pic32prog)։

Տախտակն ընտրվում է լեզվի կողքի Board ցանկում (նաև Settings-ում)։ Կոդի պատուհանի Build-ը ծրագիրը կառուցում է դրա համար. Upload-ը կառուցում է և ուղարկում ծրագիրը տախտակին՝ Settings-ում նշված սերիական պորտով։

ԲլոկԿոդԻնչ է անում
Pin ModeLED_BUILTIN, OUTPUTOUTPUT, INPUT կամ INPUT_PULLUP (գետնին միացված կոճակը սեղմելիս կարդացվում է LOW)։
Digital WriteLED_BUILTIN, HIGHHIGH՝ ցանկացած ոչ զրոյական արժեքի համար, LOW՝ 0-ի համար։
Digital Readpressed = 4Պահում է 1 (HIGH) կամ 0 (LOW)։
Analog Readlevel = A00..1023 AVR տախտակներում, 0..4095 ESP32-ում։
Analog Write5, brightnessPWM՝ 0-ից (անջատված) մինչև 255 (միշտ միացված)։
Delay500Սպասում է այդքան միլիվայրկյան։
MillistՊահում է ծրագրի սկզբից անցած միլիվայրկյանները։
UART Open9600Գործարկում է UART բլոկների սերիական պորտը այդ բոդ արագությամբ։
UART Write65Ուղարկում է մեկ բայթ (0..255)։
UART ReadcՊահում է հաջորդ ստացված բայթը, կամ -1, եթե ոչինչ չի եկել։
SPI Open1000000Գործարկում է SPI-ը որպես master այդ հաճախականությամբ (Հց), ռեժիմ 0, ավագ բիտը առաջինը։
SPI Transferreply = 66Ուղարկում է բայթ և պահում է միաժամանակ ստացված բայթը։
I2C Open100000Գործարկում է I2C-ն որպես master այդ հաճախականությամբ (Հց)։
I2C Write80, 0, 42Արժեք է գրում այդ 7-բիթանոց հասցեով սարքի ռեգիստրում. հասցե, ռեգիստր, արժեք։
I2C Readv = 80, 0Պահում է ռեգիստրի արժեքը, կամ -1, եթե այդ հասցեով սարք չի պատասխանում։
MQTT Connect"network", "password", "broker.example.com", 1883Միանում է ցանցին և MQTT բրոքերին։
MQTT Publish"evia/temperature", tՈւղարկում է հաղորդագրություն այդ թեմայով՝ թիվ կամ տեքստ։
MQTT Subscribe"evia/command"Բրոքերից խնդրում է այդ թեմայի հաղորդագրությունները (մինչև չորս թեմա)։
MQTT Has Messagewaiting = "evia/command"Պահում է 1, եթե այդ թեմայի հաղորդագրություն սպասում է, և 0՝ հակառակ դեպքում։
MQTT Readcmd = "evia/command"Պահում է հաջորդ հաղորդագրության թիվը, կամ -1, եթե ոչինչ չի եկել։

MQTT։ Ցանցի անունը, գաղտնաբառը, բրոքերը և թեմաները ֆիքսված տեքստեր են, քանի որ դրանք գրվում են ծրագրի մեջ կառուցելիս։ PIC32 C-ն AT որոնվածքով ESP8266 կամ ESP32 մոդուլ է վարում UART2-ով (RB5/RB1՝ 28-կոնտակտանի չիպերում, RF4/RF5՝ մյուսներում), այնպես որ Print-ը մնում է UART1-ին։ Arduino-ն ESP32 տախտակի վրա օգտագործում է տախտակի սեփական WiFi-ը։ Run-ը պատասխանում է ձեր համակարգչի բրոքերից՝ բաժանորդագրված թեմայում հրապարակելը վերադարձնում է հաղորդագրությունը։ AVR տախտակը մերժում է MQTT բլոկները (մեկ սերիական պորտ, որը զբաղեցնում է Print-ը), FPGA-ն նույնպես։ Հաղորդագրությունը թիվ է՝ գրված այնպես, ինչպես Print-ն է գրում. քանի որ -1-ը նաև նշանակում է «ոչինչ չի եկել», MQTT Has Message-ը տարբերում է իրական -1-ը։ MQTT-ն կարող է անցնել նաև MX695F512L, MX795F512L չիպերի և Ethernet Starter Kit II-ի սեփական Ethernet պորտով. կարգավորումներում ընտրեք PIC32-ի MQTT-ն՝ → Ethernet, և գեներացված ֆայլը դառնում է MPLAB X Harmony ծրագրի հավելված, որը բերում է TCP/IP փաթեթը։ Այս ուղին փորձարարական է. այն այստեղ կոմպիլացվում է վերնագրերի կաղապարներով, բայց երբևէ չի կառուցվել իրական Harmony-ով և չի աշխատեցվել տախտակի վրա, այդ պատճառով ստուգվածը մնում է WiFi մոդուլը։

MQTT Ethernet-ով (փորձարարական)։ MX695F512L-ի, MX795F512L-ի և PIC32 Ethernet Starter Kit II-ի համար Settings > PIC32 MQTT over > Ethernet-ը ստացվող ֆայլը դարձնում է MPLAB X Harmony նախագծի հավելված՝ TCP/IP փաթեթը տալիս է Harmony-ն, կազմաձևումը, տակտը և main()-ը մնում են նախագծին, իսկ դուք այնտեղից կանչում եք app_run()։ Միացրեք TCP-ն, DHCP և DNS հաճախորդները, Ethernet MAC վարորդը և տախտակի PHY-ը (LAN8740 այս հավաքածուում)։ Հասցեն տալիս է DHCP-ն, ուստի ցանցի անունը և գաղտնաբառը չեն օգտագործվում։ Այս ուղին ստուգումներում կոմպիլացվում է վերնագրերի կրկնօրինակներով, բայց չի կառուցվել իրական Harmony-ով և չի գործարկվել տախտակի վրա. ստուգվածը WiFi մոդուլն է։

Պինները կարող են լինել թվեր, արտահայտություններ կամ տախտակի LED_BUILTIN, A0 ... A15 անունները. HIGH և LOW աշխատում են ցանկացած արտահայտության մեջ։ Այս անունները չի կարելի օգտագործել որպես փոփոխականներ։

Գծերի (bus) բլոկները աշխատում են Run-ում և տախտակների բոլոր երեք լեզուներում։ Օգտագործելուց առաջ գիծը պետք է բացել. հասցեները 7-բիթանոց են, թվերը՝ տասնորդական (80-ը 0x50-ն է)։ PIC32-ում պինները ֆիքսված են չիպի ընտանիքի համար և նշված են ստեղծված կոդի սկզբում (չիպի UART1, SPI և I2C1)։ Run-ը նմանակում է գծերը. UART-ի հաղորդիչը միացված է նրա ընդունիչին, ուստի UART Write-ի բայթերը վերադառնում են UART Read-ով (և երևում են նաև ելքում որպես տեքստ), SPI-ի մուտքը միացված է նրա ելքին, իսկ 80 հասցեով պատասխանում է 256 ռեգիստրով մեկ I2C սարք։

Run-ը նմանակում է Arduino Uno. պինների փոփոխությունները ելքում երևում են board [500 ms] pin 13 HIGH տեսքով, ժամանակը առաջ է գնում միայն Delay-ում (գլխավոր պատուհանը նաև իրականում սպասում է, եթե արագության սահողը լրիվ արագության վրա չէ), յուրաքանչյուր մուտքային պինի կոճակը սեղմվում է ամեն 2 վայրկյանի երկրորդ կեսին, իսկ անալոգային պինները կարդում են դանդաղ 0..1023..0 ալիք։ Ծրագիրը կատարվում է մեկ անգամ, կարծես setup()-ից. դրանից հետո պինները պահում են իրենց վիճակը։ File > Open Example > Arduino and ESP32 Boards-ում կան օրինակներ՝ blink, button, fade, analog meter, Led դաս և UART, SPI ու I2C օրինակներ։

Համակարգչի լեզուները (C, C++) չեն կարող օգտագործել Board բլոկները. Generate code-ը կասի, թե որ բլոկը փոխել։

FPGA՝ Artix-7 և GateMate

Եվս երեք լեզու՝ SystemVerilog, Verilog-2001 և VHDL (VHDL-2008), նույն սխեման դարձնում են սարքակազմ։ Յուրաքանչյուր բլոկ վերջավոր ավտոմատի մեկ վիճակ է և տևում է մեկ տակտ։ Փոփոխականները նշանով 32-բիթանոց ռեգիստրներ են։

ՏախտակՉիպՀաճախությունՀասանելի կոնտակտներ
Digilent Nexys A7-100TArtix-7 XC7A100T100 ՄՀցLED0-15, SW0-15, BTNC/U/L/R/D, JA-JD, USB-UART
Digilent Arty A7-35 / A7-100Artix-7100 ՄՀց4 LED, 4 անջատիչ, 4 կոճակ, JA-JD, USB-UART
Digilent Basys 3Artix-7 XC7A35T100 ՄՀց16 LED, 16 անջատիչ, 5 կոճակ, JA-JC, USB-UART
Olimex GateMateA1-EVBGateMate CCGM1A110 ՄՀցLED0, BTN0, վրիպազերծման UART
Cologne Chip GateMate A1 evaluation boardGateMate CCGM1A110 ՄՀցմիայն LED0

Կոնտակտները ֆիքսվում են կառուցելիս, ուստի կոնտակտը պետք է լինի թիվ կամ անուն՝ LED0, SW3, BTNC, BTN0, JA1։ Եթե տախտակը այդպիսի կոնտակտ չունի, սխալը ցույց է տալիս առկաների ցանկը։ Կոնտակտը չի կարելի միաժամանակ կարդալ և գրել։

Ամբողջ թվեր։ Թվաբանությունը 32 բիթով շրջվում է; / և % կլորացնում են դեպի զրո, 0-ի բաժանումը տալիս է 0։ Գործարկումը օգտագործում է double թվեր, ուստի 5 / 2-ը Գործարկման մեջ 2.5 է, իսկ FPGA-ում՝ 2։ Դեռ չեն աջակցվում՝ դասերը, Input, Analog Read, SPI, I2C և տեքստը փոփոխականներում (Print-ում տեքստը աշխատում է)։

Կառուցում և բեռնում։ Artix-7՝ Vivado խմբաքանակային ռեժիմով կամ բաց շղթա (yosys, nextpnr-xilinx, Project X-Ray), ընտրվում է Կարգավորումներում։ GateMate՝ yosys, nextpnr-himbaechel, gmpack։ Բեռնումը՝ Vivado կամ openFPGALoader։ Կոնտակտների սահմանափակումները ֆայլի առաջին մեկնաբանության մեջ են, իսկ հրամանի տողում -o-ն գրում է նաև .xdc կամ .ccf ֆայլ։

Ստուգված է՝ սիմուլյացիա՝ Գործարկման հետ համեմատած, և սինթեզ բաց գործիքներով։ Ստուգված չէ՝ Vivado, openXC7 և իրական տախտակներ։

Օրինակներ՝ File > Open Example > FPGA Boards։

Ստեղնային համակցություններ

Ctrl+NՆոր ծրագիր
Ctrl+Shift+NՆոր նախագիծ
Ctrl+OԲացել ծրագիր
Ctrl+S / Ctrl+Shift+SՊահել / Պահել որպես
Ctrl+AՆշել բոլոր բլոկները
DeleteՋնջել նշված բլոկները
Ctrl+GՆշված բլոկները խմբավորել դասի մեջ
F5 / Shift+F5Գործարկել / Կանգնեցնել
F7Գեներացնել կոդը
Մկնիկի անիվՍխեման մոտեցնել կամ հեռացնել ցուցիչի ուղղությամբ (25%-ից մինչև 300%)
Shift+անիվ / Ctrl+անիվՈլորել կողքերին / վերև և ներքև
Միջին կոճակ + քաշելՏեղափոխել կտավը (կարելի է սկսել նաև բլոկից)
Ctrl+= / Ctrl+-Մոտեցնել / հեռացնել
Ctrl+0 / Ctrl+9Իրական չափս (100%) / սխեման տեղավորել պատուհանում
Ctrl+KGit commit
F1Այս ուղեցույցը
Shift+սեղմում, ուղղանկյան քաշումՆշել մի քանի բլոկ
Աջ սեղմում բլոկի վրաԲլոկի ընտրացանկ (խմբագրել, View source code, ջնջել ...)

Vim ստեղներ

Կոդի դաշտերը, կոդի պատուհանը և commit-ի հաղորդագրության խմբագրիչը աշխատում են Vim ստեղներով (անջատվում են Settings-ում)։ Տեքստը բացվում է ներդրման ռեժիմում. Esc-ը անցնում է նորմալ ռեժիմի։