|
|
|
![]() |
|
Strumenti |
![]() |
#1 |
Senior Member
Iscritto dal: Dec 2000
Messaggi: 2943
|
Software multipiattaforma
Dovrei realizzare un software di controllo per macchine CNC da utilizzare sia in ambiente Windows che in ambiente Linux.
Ho già realizzato tale software, anni fa, in VB6 per l'utilizzo unico su XPE (Windows XP Embedded) e adesso avrei la necessità di realizzare un porting (anche riscrivendolo tutto). Sapreste darmi qualche dritta su che linguaggio utilizzare per scrivere un codice (nativo) unico? Io pensavo al C++ con l'utilizzo di qualche libreria grafica multipiattaforma. Mi sapete dire qualcosa in più? Ovviamente il software è completamente grafico in quanto è l'interfaccia utente per pilotare la macchina e interagire con la logica del CNC. Grazie per le risposte, ciao! Ultima modifica di JoJo : 29-09-2009 alle 10:26. |
![]() |
![]() |
![]() |
#2 |
Senior Member
Iscritto dal: Oct 2007
Città: Padova
Messaggi: 4131
|
Nella tua applicazione hai dunque anche la neccessità di comunicare via seriale con il CNC?
__________________
As long as you are basically literate in programming, you should be able to express any logical relationship you understand. If you don’t understand a logical relationship, you can use the attempt to program it as a means to learn about it. (Chris Crawford) |
![]() |
![]() |
![]() |
#3 |
Senior Member
Iscritto dal: Dec 2000
Messaggi: 2943
|
Scusate ma ho tralasciato alcune cosette nel primo post:
- il software non pilota direttamente la macchina ma interagisce con la sua logica con un colloquio di rete. Ho già realizzato il software anni fa in Vb6 per girare su XPE. Usa Winsock e molte altre API - il software deve essere grafico (e orientato verso i touchscreen) in quanto è l'interfaccia utente di pilotaggio della macchina (né più, né meno dei pulsanti e della grafica) - il software deve poter pilotare dei dispositivi posti sulla RS232, RS422 e RS485 Diciamo che il software, in ambiente Win32 è fatto (anche se mi piacerebbe ricrearlo multipiattaforma), dovrei realizzare la versione per Linux. |
![]() |
![]() |
![]() |
#4 | |
Senior Member
Iscritto dal: Oct 2005
Messaggi: 3306
|
Quote:
Per il touch screen alla fine è solo questione di supporto del sistema operativo, per il software non ci sono differenze. Il problema è che in ogni caso il software essendo in vb6 va riscritto da 0. |
|
![]() |
![]() |
![]() |
#5 |
Senior Member
Iscritto dal: Oct 2007
Città: Padova
Messaggi: 4131
|
Non sono sicuro di aver capito: il tuo software comunica sia via rete, che direttamente via porta seriale?
__________________
As long as you are basically literate in programming, you should be able to express any logical relationship you understand. If you don’t understand a logical relationship, you can use the attempt to program it as a means to learn about it. (Chris Crawford) |
![]() |
![]() |
![]() |
#6 | |
Senior Member
Iscritto dal: Jul 2009
Messaggi: 1161
|
Quote:
su Java puoi scrivere parti del codice "comuni" e multipiattaforma e parti "native" ad esempio in C++ credo che con .NET tu possa far la stessa cosa.. scrivi in VB.Net (che probabilmente già conosci) la parte che non si interfacia al sistema operativa.. per windows ricicli il codice nativo che già avevi e per linux lo scrivi ad hoc, magari in C++, mentre la parte Vb.NET dovrebbe girarti su Mono comunque, il primo passo che dovresti fare sarebbe cercare di slegare logicamente la parte "nativa" da quella "non nativa"..
__________________
Web2.0 Guides And Tutorials SLR: Canon 6D ZOOM: Canon EF 24-105mm f/4L IS USM FISSI: - Canon EF 28mm f/1.8 USM - Canon EF 40mm f/2.8 STM - Canon EF 50mm f/1.4 USM - Canon EF 100mm f/2 USM - Canon EF 200mm f/2.8L USM II ALTRO: Canon 430 EX II |
|
![]() |
![]() |
![]() |
#7 |
Senior Member
Iscritto dal: Feb 2008
Messaggi: 2808
|
ciao allora se vuoi un linguaggio di programmazione multipiattaforma è solo ed escusivamente JAVA per quello che conosco io... JAVA essendo basato su una Virtual Machine si crea indipendentemente dal sistema i prori registri set istruzioni etc...
invece se usi il c++ non lo è dato che in linux ad esempio possiamo fare accessi in kernel mode, mentre in windows è tutto bloccato... mi spiegop meglio: in c++ se stai creando un'applicazione che comunichi con la seriale in linux basta scrivere e leggere all'indirizzo di mapping della seriale, la stessa cosa era possibile fino a windows 98 poi con xp vista seven sono diventati accessi indiretti e quindi ti servirebbe un device driver che ti permetta di comunicare direttamente con la periferica, il che quindi fa diventare non multipiattaforma il software ma ad hoc per un determinato os. io uso anche il .net e ti dico che è favoloso... ma ripeto se vuoi il massimo della scalabilità tra i vari os non ti resta che usare JAVA ed i suoi derivati... come compilatore builder etc per java ti consiglio ECLIPSE che va veramente bene e supporta anche c++ e altri linguaggi... ovviamente tieni a mente che più è scalabile un software minore sarà la sua ottimizzazione, ovvero: se scrivi lo stesso prog in assemby per il processore in uso sarà una scheggia ma usabile solo su quella macchina, viceversa in JAVA sarà relativamente piu lento (dipende da cosa devi fare, se son cavolate la differenza è apri a zero) ma usufruibile senza intoppi da tutti :-P ciao ![]()
__________________
Trattative concluse positivamente con: stefanonweb Toro_seduto luck78 montelli nick8640 peppe8600gt mr.jeeves sdedo71 gamecock $!/\/\o Pangasius ginepraio giorgioprimo pikerunner cicciopalla Il grande Blek spike_860 franzgranata Rebelderock ssamxx EFFERATUM monkey island ilgenerale djdisco_2 domax93 testasemidura Rospaccio bender8858 Pether vega05 domesda Shurpaul Stermy57 thinkfast Quagliarulo YuzaLaNuvola rtype davek3 Alzatan 4HwGenXX DAVO Wonderboy021067 |
![]() |
![]() |
![]() |
#8 | ||
Senior Member
Iscritto dal: Oct 2005
Messaggi: 3306
|
Quote:
Altrimenti come spiegheresti l'esistenza di QT e wxWidgets che funzionano su più piattaforme? E come spiegheresti la JVM che è compilata per tutte le piattaforme su cui esiste Java? Quote:
Se prendi ad esempio la libreria wxCTB, consente di dialogare con una seriale su Windows, Linux e OSX, usando le api in user space messe a disposizione dai vari sistemi operativi. |
||
![]() |
![]() |
![]() |
#9 | |
Senior Member
Iscritto dal: Feb 2008
Messaggi: 2808
|
Quote:
in risposta alla prima: 1) l'esistenza delle qt e delle wxWidgets che sono multipiattaforma non implica che lo sia anche il linguaggio adottato... ribadisco C++ non è multipiattaforma, cmq le parole contano poco: prendi un prog in c++ fatto per linux e mettilo su win e provalo a compilare poi vedrai che risate ![]() 2) JAVA lo già detto che è basata su una JVM e quindi multipiattaforma ![]() in risposta alla seconda: 1) se usi librerie già fatte ti può andare bene se non hai da fare controlli in tempo reale critici o roba assurdamente veloce... ma se vuoi andare sul professionale implementi un codice asm nel sorgente 2)qui premetto che non ho mai usato le wxCTB, ma sempre scritto in asm o c++... cmq quello che vorrei sapere è: se scrivo il sorgente per linux (ad esempio) usando queste librerie e successivamente compilandolo in ambienti diversi quindi sun linux win bsd unix etc... il programma viene complitao senza errori? mio pensiero: non penso venga senza errori anzi... ogni os ha una propria interfaccia di gestione degli accessi quindi bisognerebbe usare librerie diverse in base al sitema... indi ribarirebbe il fatto che il C++ non è scalabile da un os ad un'altro :-P dato che è impossibile che 2 os diversi possano utilizzare in maniere identica delle librerie a meno che non siano due os basati sullo stesso motore :-P cmq aspetto una risp dato che nell'ultimo punto ho dei dubbi :-P ciao ![]()
__________________
Trattative concluse positivamente con: stefanonweb Toro_seduto luck78 montelli nick8640 peppe8600gt mr.jeeves sdedo71 gamecock $!/\/\o Pangasius ginepraio giorgioprimo pikerunner cicciopalla Il grande Blek spike_860 franzgranata Rebelderock ssamxx EFFERATUM monkey island ilgenerale djdisco_2 domax93 testasemidura Rospaccio bender8858 Pether vega05 domesda Shurpaul Stermy57 thinkfast Quagliarulo YuzaLaNuvola rtype davek3 Alzatan 4HwGenXX DAVO Wonderboy021067 |
|
![]() |
![]() |
![]() |
#10 | |||||
Senior Member
Iscritto dal: Oct 2005
Messaggi: 3306
|
Quote:
Tra l'altro vanno inclusi anche tutti i programmi fatti con QT e wx. C++ è uno standard internazionale, praticamente qualunque archiettura ha un compilatore per tale linguaggio. Quote:
Quote:
Se non programmi in assembly non sei un professionista? Quindi anche uno che sviluppa in Java non è un professionista? Ho lavorato nel settore audio e anche lì ti ritrovi ad usare l'assembly solo in casi in cui ti accorgi che qualcuno del reparto commerciale ha lesinato sulla potenza del micro per risparmiare pochi euro (facendone spendere molti di più nello sviluppo), per il resto è tutto C. Quote:
Quote:
Codice:
UInt32 OS::GetNumProcessors() { #if (__Win32__) static UInt32 numCPUs = 0; if (numCPUs == 0) { SYSTEM_INFO theSystemInfo; ::GetSystemInfo(&theSystemInfo); numCPUs = (UInt32)theSystemInfo.dwNumberOfProcessors; } return numCPUs; #endif #if (__MacOSX__ || __FreeBSD__) int numCPUs = 1; size_t len = sizeof(numCPUs); int mib[2]; mib[0] = CTL_HW; mib[1] = HW_NCPU; (void) ::sysctl(mib,2,&numCPUs,&len,NULL,0); if (numCPUs < 1) numCPUs = 1; return (UInt32) numCPUs; #endif #if(__linux__ || __linuxppc__) static UInt32 numCPUs = 0; if (numCPUs == 0) { char cpuBuffer[8192] = ""; StrPtrLen cpuInfoBuf(cpuBuffer, sizeof(cpuBuffer)); FILE *cpuFile = ::fopen( "/proc/cpuinfo", "r" ); if (cpuFile) { cpuInfoBuf.Len = ::fread(cpuInfoBuf.Ptr, sizeof(char), cpuInfoBuf.Len, cpuFile); ::fclose(cpuFile); } StringParser cpuInfoFileParser(&cpuInfoBuf); StrPtrLen line; StrPtrLen word; UInt32 numCPUs = 0; while( cpuInfoFileParser.GetDataRemaining() != 0 ) { cpuInfoFileParser.GetThruEOL(&line); // Read each line StringParser lineParser(&line); lineParser.ConsumeWhitespace(); //skip over leading whitespace if (lineParser.GetDataRemaining() == 0) // must be an empty line continue; lineParser.ConsumeUntilWhitespace(&word); if ( word.Equal("processor") ) // found a processor as first word in line { numCPUs ++; } } if (numCPUs == 0) numCPUs = 1; } return numCPUs; #endif #if(__solaris__) { static UInt32 numCPUs = sysconf(_SC_NPROCESSORS_ONLN); // Only ever called once if (numCPUs <= 0) numCPUs = 1; return numCPUs; } #endif #if(__sgi__) UInt32 numCPUs = 0; numCPUs = sysconf(_SC_NPROC_ONLN); return numCPUs; #endif |
|||||
![]() |
![]() |
![]() |
#11 |
Senior Member
Iscritto dal: Oct 2007
Città: Padova
Messaggi: 4131
|
Codice:
#if(__linux__ || __linuxppc__) static UInt32 numCPUs = 0; if (numCPUs == 0) { char cpuBuffer[8192] = ""; StrPtrLen cpuInfoBuf(cpuBuffer, sizeof(cpuBuffer)); FILE *cpuFile = ::fopen( "/proc/cpuinfo", "r" ); if (cpuFile) { cpuInfoBuf.Len = ::fread(cpuInfoBuf.Ptr, sizeof(char), cpuInfoBuf.Len, cpuFile); ::fclose(cpuFile); } StringParser cpuInfoFileParser(&cpuInfoBuf); StrPtrLen line; StrPtrLen word; UInt32 numCPUs = 0; while( cpuInfoFileParser.GetDataRemaining() != 0 ) { cpuInfoFileParser.GetThruEOL(&line); // Read each line StringParser lineParser(&line); lineParser.ConsumeWhitespace(); //skip over leading whitespace if (lineParser.GetDataRemaining() == 0) // must be an empty line continue; lineParser.ConsumeUntilWhitespace(&word); if ( word.Equal("processor") ) // found a processor as first word in line { numCPUs ++; } } if (numCPUs == 0) numCPUs = 1; } return numCPUs; #endif ![]()
__________________
As long as you are basically literate in programming, you should be able to express any logical relationship you understand. If you don’t understand a logical relationship, you can use the attempt to program it as a means to learn about it. (Chris Crawford) |
![]() |
![]() |
![]() |
#12 |
Senior Member
Iscritto dal: Oct 2005
Messaggi: 3306
|
Secondo me quel pezzo non è scritto proprio bene...
Si potrebbe ottimizzare tantissimo come numero di righe usando meglio il C++, alla fine si tratta di contare quante sono le righe che cominciano con "processor" all'interno del file /proc/cpuinfo. Questo mi sembra faccia le stesse cose: Codice:
static UInt32 numCPUs = 0; if (numCPUs == 0) { ifstream cpuinfo("/proc/cpuinfo"); if (cpuinfo.is_open()) { string line; while(getline(ifs, line)) { while(line.find(" ") == 0) line = line.substr(1); if (line.find("processor") == 0) ++numCPUs; } } if (numCPUs == 0) numCPUs = 1; } return numCPUs; Ultima modifica di tomminno : 30-09-2009 alle 16:44. |
![]() |
![]() |
![]() |
#13 |
Senior Member
Iscritto dal: Oct 2007
Città: Padova
Messaggi: 4131
|
Più che bello, casca proprio l'occhio. Ma non vuol dire nulla, su un singolo caso. Più che altro, che fine avrà fatto Jojo?
__________________
As long as you are basically literate in programming, you should be able to express any logical relationship you understand. If you don’t understand a logical relationship, you can use the attempt to program it as a means to learn about it. (Chris Crawford) |
![]() |
![]() |
![]() |
#14 |
Senior Member
Iscritto dal: Feb 2008
Messaggi: 2808
|
1) non intendo dire che se uno non usa asm n on sia un professionista, ma semplicemente che se lo usi di sicuro lo sei :-P dato che.... (non penso ci voglia una spiegazione o motivo... lo si intuisce)
2)un conto è restituire la lista dei processi o il suo numero un altro è lavorare in maniera pesante su registri, ram, tread, periferiche, e quant'altro... e ribadisco che non esite un linguaggio oltre al JAVA (di quelli che io conosca) che sia in grado di fungere su qualsiasi piattaforme dato che ha la la sua VM che gli facilita la vita e rendendo il sorgente esportabile in qualsiasi os... un codice in C++ molto difficilmente lo si può portare da un os ad un altro e farlo fungere senza metterci le lani su.... (anche se cambiare poche cose ma le si devono cambiare) con java SI! personalmete sperimentato con: debian lenny ubuntu opensun10 freebsd xp vista seven server03 comprensive tutte le versioni 32 e 64 bit ed i programmi fungono a prima botta ![]() 3)incompatibilità varie con la versione ME... purtoppo non ne sono informato quindi mi fido di quello che dici. 4)quando dici di risparmiare... beh... forse parli così solo perchè non ti sei posto mai la domanda, o perlomeno fatto 2 conti, su cosa significhi risparmiare anche solo 20 centesimi sul singolo chip... spendere 3gg in più per un software costa molto meno che pagare 20cent in più per 1000000000 di chip che usi (ovviamente vale il discorso per un azienda importate, altrimenti è stato un balengo a riparmiare per 2€ su una spesa di 100pz) 5)non mi hai ancora risposto ad una domanda... se uso le wxCTB, e faccio un prog sotto linux... poi se passo il sorgente in win e lo compilo, viene compilato senza errori? se così fosse allora... ![]() PS: ho avuto modo di lavorare nel settore DSP ed effettivamente si utilizza quasi sempre C, ma io in particolare usavo mathlab e VHDL e quando c'èerano sorgenti da autocorrelare o filrare tramite IR IIR o altre cose simili ti garantisco che si progettava in C, poi si usava un tool che convertiva in asm e si ottimizzava l'asm per via circuitale tramite l'ISE (io usavo quello della XILINX) cmq grazie ancora della chiacchierata ![]() ciao ![]()
__________________
Trattative concluse positivamente con: stefanonweb Toro_seduto luck78 montelli nick8640 peppe8600gt mr.jeeves sdedo71 gamecock $!/\/\o Pangasius ginepraio giorgioprimo pikerunner cicciopalla Il grande Blek spike_860 franzgranata Rebelderock ssamxx EFFERATUM monkey island ilgenerale djdisco_2 domax93 testasemidura Rospaccio bender8858 Pether vega05 domesda Shurpaul Stermy57 thinkfast Quagliarulo YuzaLaNuvola rtype davek3 Alzatan 4HwGenXX DAVO Wonderboy021067 |
![]() |
![]() |
![]() |
#15 | |
Senior Member
Iscritto dal: Oct 2007
Città: Padova
Messaggi: 4131
|
Quote:
Ora, visto che non capisco affermazioni del genere, ti chiedo: puoi dirmi quale e' la definizione di "professionista"?
__________________
As long as you are basically literate in programming, you should be able to express any logical relationship you understand. If you don’t understand a logical relationship, you can use the attempt to program it as a means to learn about it. (Chris Crawford) |
|
![]() |
![]() |
![]() |
#16 | |
Senior Member
Iscritto dal: Feb 2008
Messaggi: 2808
|
Quote:
per quanto riguarda il discorso dell'assembly ora mi spiego... per usare il linguaggio asm non è come usare il c++ o vb o java delphi e via discorrendo... per usare in maniera corretta l'asm bisogna conoscere a fondo l'achitettura del controllore da programmare, quindi nonchè una buona conoscenza di sistemistica, controlli, elettronica e dulcis in "findus" ![]() insomma spero di essermi spiegato :-P ciao ![]()
__________________
Trattative concluse positivamente con: stefanonweb Toro_seduto luck78 montelli nick8640 peppe8600gt mr.jeeves sdedo71 gamecock $!/\/\o Pangasius ginepraio giorgioprimo pikerunner cicciopalla Il grande Blek spike_860 franzgranata Rebelderock ssamxx EFFERATUM monkey island ilgenerale djdisco_2 domax93 testasemidura Rospaccio bender8858 Pether vega05 domesda Shurpaul Stermy57 thinkfast Quagliarulo YuzaLaNuvola rtype davek3 Alzatan 4HwGenXX DAVO Wonderboy021067 |
|
![]() |
![]() |
![]() |
#17 | ||||||||
Senior Member
Iscritto dal: Oct 2005
Messaggi: 3306
|
Quote:
Oltretutto di Assembly ce ne sono tanti quante sono le architetture in circolazione Quote:
Quote:
Quote:
Quote:
![]() Hai idea di cosa significhi sviluppare un firmware su un sample per poi scoprire che l'hardware di produzione se va bene avrà la metà della ram e una cpu che viagga a 3/4? Quote:
Prendi il sorgente ricompili e via. Quote:
Quote:
![]() |
||||||||
![]() |
![]() |
![]() |
#18 | |
Senior Member
Iscritto dal: Oct 2005
Messaggi: 3306
|
Quote:
Semplicemente impossibile, oltre che decisamente inutile. Direi che, stando alla tua definizione di professionista, in circolazione nel nostro settore non ce ne sia nemmeno uno ![]() |
|
![]() |
![]() |
![]() |
#19 |
Senior Member
Iscritto dal: Feb 2008
Messaggi: 2808
|
ciao
![]() 1)sono veramente contento che esistano le wxCTB!!!!! se è come dici corro subito a documentarmi perchè mi renderebbero la vita vermanete piu facileeee grazie per avermi messo a conoscenza della loro esistenza ![]() 2)mi spiace ma l'assembly non è un linguagggio come un altro... oserei dire che è IL LINGUAGGIO... e quello che puoi fare con quello te lo puoi sognare con gli altri... (a meno di implementare ad esmpio in un sorgente una porzione in asm stesso per fare la particolare operazione richiesta ![]() 3)Registri? Ram? Periferiche? In Java? esatto proprio per questo dicevo che dipende cosa devi fare... nel momento in cui devi lavorare con quei componenti non userai mai java... ma non perchè non sia buono, ma semplicemente perchè non farà quello che vorrai e come lo vorrai soprattutto ![]() ciao ![]() ![]() ![]()
__________________
Trattative concluse positivamente con: stefanonweb Toro_seduto luck78 montelli nick8640 peppe8600gt mr.jeeves sdedo71 gamecock $!/\/\o Pangasius ginepraio giorgioprimo pikerunner cicciopalla Il grande Blek spike_860 franzgranata Rebelderock ssamxx EFFERATUM monkey island ilgenerale djdisco_2 domax93 testasemidura Rospaccio bender8858 Pether vega05 domesda Shurpaul Stermy57 thinkfast Quagliarulo YuzaLaNuvola rtype davek3 Alzatan 4HwGenXX DAVO Wonderboy021067 |
![]() |
![]() |
![]() |
#20 | |
Senior Member
Iscritto dal: Feb 2008
Messaggi: 2808
|
Quote:
"dato che per conoscere bene l'assembly e quindi tutto quello che vi è dietro, è al quanto ovvio che non si sia di primo pelo, cosa che non si può dire al contrario dato che anche un bimbo se vuole inizia a programmare in vb/delphi/c/c++/java etc.. cosa non fattibile in asm"
__________________
Trattative concluse positivamente con: stefanonweb Toro_seduto luck78 montelli nick8640 peppe8600gt mr.jeeves sdedo71 gamecock $!/\/\o Pangasius ginepraio giorgioprimo pikerunner cicciopalla Il grande Blek spike_860 franzgranata Rebelderock ssamxx EFFERATUM monkey island ilgenerale djdisco_2 domax93 testasemidura Rospaccio bender8858 Pether vega05 domesda Shurpaul Stermy57 thinkfast Quagliarulo YuzaLaNuvola rtype davek3 Alzatan 4HwGenXX DAVO Wonderboy021067 |
|
![]() |
![]() |
![]() |
Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 18:08.