Jurkins Novembris 27, 2019 Author Share Novembris 27, 2019 Jā tā ir, tikko izmēģināju. Paldies @camel un pārējiem ?. Link to comment Share on other sites More sharing options...
Jurkins Decembris 8, 2019 Author Share Decembris 8, 2019 Netaisot jaunu tēmu, jo vienā galā pitons tāpat paliks. Varbūt var kāds apskaidrot par TCP. Situācija tāda. Izmantoju Arduino Nano ar 328-to atmegu un VS arduino "plaginu". TCP serveris. #include <UIPEthernet.h> uint8_t mac[] = { 0xAE, 0xB2, 0x26, 0xE4, 0x4A, 0x5C }; EthernetServer server(2000); boolean clientAlreadyConnected = false; void setup() { Serial.begin(57600); if (Ethernet.begin(mac)) { server.begin(); Serial.println(Ethernet.localIP()); Serial.println(Ethernet.gatewayIP()); Serial.println(Ethernet.dnsServerIP()); } else Serial.println("Šaize!"); } void loop() { uint8_t i = 10; char command[10]; memset(command, 0, sizeof(command)+1); char *pcmd = command; if (EthernetClient client = server.available()) { if (clientAlreadyConnected == false) { Serial.println("Client connected"); client.println("Server ready"); clientAlreadyConnected = true; } while (client.available()) { *pcmd = client.read(); if (--i) { *pcmd++; continue; } client.flush(); } Serial.println(command); client.stop(); } } Pagaidām kā klientu izmantoju applikāciju TCP/IP builder. Problēma ir ar rindiņu "client.stop()". Nevaru īsti iebraukt, kad to clientu vajag stopēt un vai vispār vajag. Serveris ir visu laiku palaists. Builderī "Create socket" un "Connect". Sūtot kaut ko, izpildās nosacījums: (EthernetClient client = server.available()) ir true, un tiek pieņemti dati. Šajā gadījumā 10 baiti un tālākie tiek noflušoti un klients nostopēts. Bet vairāk neko nevar aizsūtīt, kamēr ne "Destroy Socket"->"Create Socket"->"Connect". Ja tās rindiņas "client.stop" nav, tad var sūtīt cik vajag. Nu nevaru iebraukt. Objekts "client" taču tiek katrā braucienā caur galveno ciklu pa jaunam noinicializēts. Kur mans domu gājiens brauc auzās? It kā dotajā gadījumā tas nebūtu svarīgi, bet gribas saprast. 1 Link to comment Share on other sites More sharing options...
Pukinens Decembris 8, 2019 Share Decembris 8, 2019 (labots) Hmm, es tik amatieris, bet padomāsim loģiski. Tev ir serveris. Serveris klausās. Ahā, piekonektējās klients. Nolasīji viņa sūtītos datus. Un beigās ar stop() {Disconnect from the server.} tu "atšauj klientu". Klientam (TCP bilderim) jātaisa konekcija pa jaunam... A ja tu izmet stop(), tad objekts "server" tur to konekciju vaļā un nākamajā "pārbraucienā" iedot to pašu clienta objektam. P.S. Tīkls uz ENC28J60, ja jau izmanto UIP nevis iebūvēto librāriju? Tai libai gļuku vairāk kā sunim blusu. Pilns forums piečīkstēts. Apnika, paņēmu pāris $ dārgāko W5100. Interesanti, būs tulīt klāt "guru", kas teiks ka "nav ko izmantot kreisas biblenes, daivai urb datašītu, būvē no nulles un būs tev laime zemes virsū"? P.P.S. Ja tas būtu labors, tad par šito būtu neieskaitīts ? boolean clientAlreadyConnected = false; ... if (clientAlreadyConnected == false) Labots Decembris 8, 2019 - Pukinens 1 Link to comment Share on other sites More sharing options...
binary Decembris 9, 2019 Share Decembris 9, 2019 pirms 6 stundām , Pukinens teica: P.P.S. Ja tas būtu labors, tad par šito būtu neieskaitīts ? boolean clientAlreadyConnected = false; ... if (clientAlreadyConnected == false) Neesmu pamodies. Kas tieši tur ir nepareizi? Link to comment Share on other sites More sharing options...
Kazarms Decembris 9, 2019 Share Decembris 9, 2019 pirms 7 stundām , Pukinens teica: P.P.S. Ja tas būtu labors, tad par šito būtu neieskaitīts ? boolean clientAlreadyConnected = false; ... if (clientAlreadyConnected == false) A kā būtu pareizi priekš labora? Neesmu saskāries ka kāds laborā vispār kodu pa rindiņai lasītu, tik paprasa paskaidrot random vietas un tam brīnuma ir jāstrādā. vienīgais, ko es varbūt rakstītu citādāk ir: if(!clientAlreadyConnected){ ...} Link to comment Share on other sites More sharing options...
Jurkins Decembris 9, 2019 Author Share Decembris 9, 2019 Nē, nu par tām rindiņām piekrītu. Tas bija copy-> paste un pēc tam nepalaboju. Pats tā cenšos nerakstīt. Patīk, ka ir smuki, bez liekvārdības (==false). Nezinu, cik pareizi, bet bool vai boolean vispār nelietoju. Parasti finālā arī aizceļoju prom no arduino. Bet nu tas pašreiz nav svarīgi. pirms 12 stundām , Pukinens teica: tu "atšauj klientu" ak velns, nu toč! Sasipos pats savos spriedelējumos, kurš kad kuru atšuj. Paldies. Nu tumbočkā bija tas ENC28J60, bet šis nestrādā ar standarta bibleni. Bez UIP mēģināju vēl kādas divas, būtībā apmēram tas pats. Gaidu no aļika W5500 modulīšus. Šķiet, šim tā pati biblene, kas W5100 der. Ar W5100 izmanto standarta bibleni? Link to comment Share on other sites More sharing options...
AndrisBB Decembris 9, 2019 Share Decembris 9, 2019 pirms 5 stundām , Kazarms teica: if(!clientAlreadyConnected){ ...} Tas tads augta limenja valodu lietojums. C un ja vel velas but MISRA complient (parasti tiek prasits embeded, industriala, autoindustrija utt), tad pareizi butu if (FALSE == clientAlreadyConnected) { } Savadak code checkers izbrakjes Link to comment Share on other sites More sharing options...
Kazarms Decembris 9, 2019 Share Decembris 9, 2019 Pirms 30 minūtēm , AndrisBB teica: Tas tads augta limenja valodu lietojums. C un ja vel velas but MISRA complient (parasti tiek prasits embeded, industriala, autoindustrija utt), tad pareizi butu if (FALSE == clientAlreadyConnected) { } Savadak code checkers izbrakjes O! Šis man ir jaunums. Paldies! Link to comment Share on other sites More sharing options...
AndrisBB Decembris 9, 2019 Share Decembris 9, 2019 Paskaties MISRA (https://en.wikipedia.org/wiki/MISRA_C), interneta var atrast ari pashus noteikumus (rules). http://caxapa.ru/thumbs/468328/misra-c-2004.pdf Daudzas lietderigas lietas tur var atrast pat ja nestrada pie kritiskam sistemam. Parasti kods netiek pienjemts un tiek izbrakjets, ja neiet cauri MISRA chekker tool'im. Link to comment Share on other sites More sharing options...
binary Decembris 9, 2019 Share Decembris 9, 2019 pirms 3 stundām , AndrisBB teica: C un ja vel velas but MISRA complient (parasti tiek prasits embeded, industriala, autoindustrija utt), tad pareizi butu if (FALSE == clientAlreadyConnected) { } Savadak code checkers izbrakjes Tiešām MISRA prasa yoda conditionus? Tajā http://caxapa.ru/thumbs/468328/misra-c-2004.pdf esošajos piemēros mainīgais tiek salīdzināts ar konstanti, nevis otrādi. Kaut kādā stackoverflow "diskusijā", kurā iepīts arī MISRA, arī iesaka tikt vaļā no yoda conditioniem. Link to comment Share on other sites More sharing options...
AndrisBB Decembris 9, 2019 Share Decembris 9, 2019 Ir kas prasa un ir kas ne. Ir mums klienti kuri liek izmantot vinu MISRA statiskos check tooljus un linterus. Varbut tas vairs nav ieksh MISRA jaunakajiem standartiem, bet kadreiz bija? Nez, man itka nav liela problema rakstit tada veido, lai izvairitos no nevajadzigam problemam. Link to comment Share on other sites More sharing options...
binary Decembris 9, 2019 Share Decembris 9, 2019 Pirms 49 minūtēm , AndrisBB teica: Nez, man itka nav liela problema rakstit tada veido, lai izvairitos no nevajadzigam problemam. Izvairoties no vienām problēmām, nereti sanāk iekulties citās problēmās. Cik ir sanācis lasīt yoda conditionus, tad efekts līdzīgs kā ar Perl "unless" - PITA "apgrieztas" loģikas dēļ. Ja gribas nodrošināties pret tām problēmām, ar kurām pirms 30+ gadiem cīnījās ar Yoda conditioniem, tad talkā nāk kompilatora warningi. Link to comment Share on other sites More sharing options...
AndrisBB Decembris 9, 2019 Share Decembris 9, 2019 Ja turpina tēmu par Ethernet moduļiem tad Microe ir daudz un dažādi moduļi https://www.mikroe.com/click/interface/ethernet Kad vajag ātri kautkādu interfeisu (parasti man gan vajag kautkādus 4G/3G) un nav laika kamēr PCB tiks babeigts, tad noder. Link to comment Share on other sites More sharing options...
Jurkins Decembris 10, 2019 Author Share Decembris 10, 2019 Par to 28J60 ir pieraudāts pilns internets, lai gan manā gadījumā tie potenciālie gļuki (nezinu, ir vai nav) nav svarīgi. Skatos, ka tajā Microe linkā arī ir modulis uz tās mikrenes. Link to comment Share on other sites More sharing options...
AndrisBB Decembris 10, 2019 Share Decembris 10, 2019 Ir tam Mikroe ari Wizne modulis. Vispar jau veidot kautko daudzmaz nopietnu uz Arduino ari nav nopietni. Vel vari paskatities MBED tur jabut bibliotekam pieks visvisadiem eth moduliem, ir ari prieks 28J60 (portets gan no tas pashas Arduino bibliotekas, taka ganjau taspashas problemas) https://os.mbed.com/users/hudakz/code/UIPEthernet/ Es parasti izmantoju STM32 Nucleo dev boardus, kas jau nak ar ethernet interfeisiem. Kopa ar LWIP staku darbijas bez problemam, var gan rakstit LWIP zemaka limenja stila vai normala desktop TCP/IP soketu stila, ko var vienkarshi uzrakstit uz desktopa un tad copy/paste uz mikrokontroliera ka FreeRTOS tasku. https://www.st.com/en/evaluation-tools/nucleo-f429zi.html Ir gan lielaki, gan mazaki MCU uz vinjiem. Plus ir ari debuggers jau pie boarda, nav jacharakejas ar kautkadiem printf'iem ka uz Arduino un var normali debuggot. Gan FreeRtos, gan LWIP staku var setupot no stm32cubemx. Link to comment Share on other sites More sharing options...
Jurkins Decembris 10, 2019 Author Share Decembris 10, 2019 (labots) Beigās jau tāpat no arduino nolecu nost. Redz, ja katru dienu ar to nodarbojas, tad ir savādāk. Parādījās uz VS tas visual micro, nu baigi ērti, ja ātri vajag kaut ko vienkāršu. Pāriet uz STM32 taisos "kā ķēve uz mīzšanu" ?. Ķīniešu kloni maksā pat lētāk nekā kaut kāds arduimo nano. Būtu dienā kādas 48 stundas... Vot par to debagošanu gan ir interesanti. Biju uzlodējis priekš atmeļiem uz tā paša atmeļa no kaut kāda krievu saita, strādāja tīri neko, bet aizņēma SPI. Jā, tā jau ir tā pati bibliotēka, ko izmantoju. Labots Decembris 10, 2019 - Jurkins 1 Link to comment Share on other sites More sharing options...
Jurkins Decembris 10, 2019 Author Share Decembris 10, 2019 (labots) Kas pats stulbākais, to UIP... bibleni defaultā nevar palaist piem. atmelstudio bez arduino vides... Visos biblenes failos šitie "#if defined". Normālās biblenēs ir vēl beigās viena #else direktīva, ja esam parastajā "generic" avr. Bet šī laikam izmanto vēl arduino print un hvz vēl ko. Ehhhh... #if defined(ARDUINO) && !defined(STM32F3) && !defined(__RFduino__) class UIPClient : public Client { #endif #if defined(__MBED__) || defined(STM32F3) || defined(__RFduino__) class UIPClient : public Print, public Client { #endif public: UIPClient(); virtual int connect(IPAddress ip, uint16_t port); virtual int connect(const char *host, uint16_t port); virtual int read(uint8_t *buf, size_t size); virtual void stop(); Ethercard biblene ... tas pats. Velns, tas arduino ir epidēmija. Labots Decembris 10, 2019 - Jurkins Link to comment Share on other sites More sharing options...
Pukinens Decembris 10, 2019 Share Decembris 10, 2019 Izskatās tka tēma ir aizgājusi tālu no pitona un prātīgākais būtu to sadalīt. Bat ja jau "tāds tas tirgus", lai tad iet. Citēt Ar W5100 izmanto standarta bibleni? Jā, standarta. Citēt Neesmu saskāries ka kāds laborā vispār kodu pa rindiņai lasītu, tik paprasa paskaidrot random vietas un tam brīnuma ir jāstrādā. Kantoris ik pa laikam rīko developeriem C# kvalifikācijas celšanas kursus, sauksim to tā. Mērķēti tie ir uz jaunākajiem developeriem, bet piedalīties var jebkurš darbinieks. Šajos kursos ir labori un izķidāts tiek viss - sākot ar koda noformēšanu atbilstoši labajau praksei un beidzot ar komunikāciju par "miglainajiem" punktiem specenē. Citēt lai gan manā gadījumā tie potenciālie gļuki (nezinu, ir vai nav) nav svarīgi. Man bija gļuks ka pēc pusstundas paliek "auksts". Piemēram šis issue https://github.com/ntruchsess/arduino_uip/issues/30 bet līdzīgu tur ir vairāki. Paveci pieteikumi, ir bijuši labojumi un ieteikumi, bet man tā arī nesanāca panākt stabilu darbību. Godīgi sakot arī pārāk necentos, jo tas ir tikai hobijs un laiks ir dārgāks. Citēt portets gan no tas pashas Arduino bibliotekas, taka ganjau taspashas problemas Savukārt tā arduino bibliotēka ir "written as a wrapper around the mature uIP Stack by Adam Dunkels". Un pieminētā lwIP "has been developed by Adam Dunkels". Tā kā sencis ir viens ? Citēt Vispar jau veidot kautko daudzmaz nopietnu uz Arduino ari nav nopietni. Citēt Beigās jau tāpat no arduino nolecu nost. Lasot forumus man ir radies iespaids ka, lielākā daļa tā saucamo profesionāļu īsti neizprot/nepainteresējas kas ir Arduino, tāpēc tāda nievājoša attieksme. Manā skatijumā tas ir vienkārši treidmarks, kas ietver sevī sekojošus produktus: 1. IDE 2. Hardwariski un/vai softwariski savietojamus hardware moduļus (https://en.wikipedia.org/wiki/List_of_Arduino_boards_and_compatible_systems). 3. Software freimworks un bibliotēku kopums. Kurš no šiem (izņemot IDE ? ) nav nopietni? No kura (izņemot IDE ? ) ir jālec nost? Ja ņemam par piemēru to pašu Nano. Šeit shēma https://content.arduino.cc/assets/NanoV3.3_sch.pdf Vai tur ir kādas fundamentālas kļūdas? Ja man vieta atļauj uz plates, kāda būs kāda principiāla starpība vai ielodēšu šadu gatavu moduli vai visas šīs detaļas pēc šīs pašas shēmas ieintergrešu pašveidotā platē? Ja otrais variants, tad tas nebūs arduino? Par freimworku. Tad jau mums ir jālec nost arī no .NET, QT, AJAX u.t.t. Kapēc tad tiek izmantota tā pati lwIP bibliotēka, bet netiek rakstīts savs IP steks? Šobrīd arduino kores ir sarakstītas uj kādai kaudzei čipu. Lūk kore minētajam STM32 Nucleo https://github.com/stm32duino/Arduino_Core_STM32 Populārā čipa ESP8266 IoT firmware https://www.letscontrolit.com/wiki/index.php?title=ESPEasy rakstīta izmantojot arduino freimworku. Link to comment Share on other sites More sharing options...
Jurkins Decembris 10, 2019 Author Share Decembris 10, 2019 (labots) Pirms 12 minūtēm , Pukinens teica: No kura (izņemot IDE ? ) ir jālec nost? Laikam jau jāpiekrīt daļēji. Esmu no pagātnes. Kādreiz attiny 13 iebāzu 1Wire termometru, Wire raidītāju, ADC potenciometram un vēl turpat puse atmiņas palika brīva. Skaidrs, ka nafig tas nav vajadzīgs. Bet, kad nokompilē uz arduino ledu on/off un paskatās, kas sanāk, pārņem šausmas. edit: tas attiny 13 bija asmā Labots Decembris 10, 2019 - Jurkins Link to comment Share on other sites More sharing options...
AndrisBB Decembris 10, 2019 Share Decembris 10, 2019 Ja kādam interesē, tad te ir interesants sub 1 USD mikrokontrolieru salīdzinajums, diezgan laba lasāmviela. https://jaycarlson.net/microcontrollers/ Plus vēl labāka intervija ar to čali, kur var pasmieties par Micročip comjūnitiju https://embedded.fm/episodes/226 Link to comment Share on other sites More sharing options...
AndrisBB Decembris 10, 2019 Share Decembris 10, 2019 Viena lieta kas padara AVR par sāpi pakaļā, ir tas ka nav normālas ne Windows IDE's. AVR studio ir OK, bet darboja tik uz Win. ARM Cotexiem parasti viss ir Eclipe bāzēts. Man gan Eclipse diezko nepatīk un izmantoju tik, tad kad vajag tiešām sāk lūrēt noteiktos reģistros, vai arī ja vajag super ātru debuggingu. Parasti izmantoju VS Code kopā ar openOCD. Pirms 26 minūtēm , Pukinens teica: Ja otrais variants, tad tas nebūs arduino? Nu ja tu neizmantosi Arduino ekosistēmu ar visām viņu bibliotēkām, tad nē - tas vienkārši būs produkts uz kura ir AVR mikrokontrolieris. Link to comment Share on other sites More sharing options...
AndrisBB Decembris 10, 2019 Share Decembris 10, 2019 (labots) Pirms 36 minūtēm , Pukinens teica: Lūk kore minētajam STM32 Nucleo https://github.com/stm32duino/Arduino_Core_STM32 Kāda mārrutka pēc to darīt? Tajā pašā git repozitorijā ir rakstīts ka viņi ir uzlikuši Arduino cori pa virsu STM32 HAL bibliotēkai. Tā bibliotēka ir jau tā pietiekoši "augsta" līmeņa, ka tur nav vajadzības vēl likt pa virsu Arduino šņagu. Ja gribas kautko mazliet "vieglāku" par HAL biblitēlu, tad izmato STM32 LL bibliotēku. Piekškam funkcijām kas jau tā ir vienkāršas vajag vēl pa virsu Arduino slāni? Pietam ja vajag kautko vairāk kā vienkārši iestatīt to pinu kā inputu vai autputu, tad Arduino to neatļauj, visas PULL UP/DOWN modes, Slew reitus un speedus utt. ATduino tādā ziņā atļauj izmantot tik ļoti mazu daļu no iespējām. GPIO_PinState HAL_GPIO_ReadPin(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin); void HAL_GPIO_WritePin(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin, GPIO_PinState PinState); void HAL_GPIO_TogglePin(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin); HAL_StatusTypeDef HAL_GPIO_LockPin(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin); Labots Decembris 10, 2019 - AndrisBB Link to comment Share on other sites More sharing options...
Recommended Posts
Izveido kontu, vai pieraksties esošajā, lai komentētu
Jums ir jābūt šī foruma biedram, lai varētu komentēt tēmas
Izveidot jaunu kontu
Piereģistrējies un izveido jaunu kontu, tas būs viegli!
Reģistrēt jaunu kontuPierakstīties
Jums jau ir konts? Pierakstieties tajā šeit!
Pierakstīties tagad!