Domanda

Sto cercando strumenti e tecniche per la prototipazione (prototipazione virtuale), la simulazione e il test del codice C profondamente incorporato sulle finestre desktop, compresi i pannelli anteriori incorporati realistici costituiti da pulsanti, LED e display LCD (sia segmentati che grafica).

Sono specificamente interessato ad un approccio possibilmente a basso livello, utilizzando il codice C Pure C e l'API Win32 crudo piuttosto che MFC, .NET / C #, VXWidget o QT.Mi piacerebbe anche utilizzare strumenti di sviluppo gratuiti, come Visual C ++ Express con Platform SDK e resedit per la modifica delle risorse.

Sto cercando esempi di codice per rendere gli LCD grafici (dal colore monocromatico a 24 bit) con un'efficace interfaccia a livello di pixel, LCD multi-segmento e pulsanti disegnati a proprietario che rispondono sia a "depresso" e "rilasciato"Eventi.

È stato utile?

Soluzione

Sono sorpreso che la mia domanda originale abbia innescato così tanti fraintendimenti e commenti negativi. La strategia di sviluppare il codice C profondamente incorporato su una macchina (ad esempio un PC) e eseguirlo su un altro (il microcontrollore incorporato) è chiamato "Dual Targeting" ed è davvero abbastanza comune. Ad esempio, lo sviluppo e il test del codice profondamente embedded sul PC è la pietra angolare del recente libro "Development Driven Test for Embedded C" di James Grenning.

Evitare il collo di bottiglia dell'hardware di destinazione con doppio targeting

Si prega di notare che il doppio targeting non significa che il dispositivo incorporato abbia qualcosa a che fare con il PC. Né significa che la simulazione deve essere in ciclo preciso con la CPU di destinazione incorporata.

Dual Targeting significa semplicemente che dal primo giorno, il codice incorporato (in genere in c) è progettato per essere eseguito su almeno due piattaforme: l'hardware di destinazione finale e il PC. Tutto ciò di cui hai davvero bisogno per questo è due compilatori C: uno per il PC e un altro per il dispositivo incorporato.

Tuttavia, la doppia strategia di targeting richiede un modo specifico per progettare il software incorporato, in modo che le dipendenze hardware di destinazione vengano gestite attraverso un'interfaccia ben definita spesso chiamata pacchetto di supporto della scheda (BSP). Questa interfaccia ha almeno due implementazioni: una per il bersaglio effettivo e una per il PC, ad esempio eseguire Windows. Con tale interfaccia in posizione, la maggior parte del codice incorporato può rimanere completamente inconsapevole quale implementazione BSP è collegata e quindi può essere sviluppata rapidamente sul PC, ma può anche essere eseguita sull'hardware di destinazione senza modifiche .

Mentre alcuni programmatori incorporati possono visualizzare il doppio targeting come onere autoinflitte, gli sviluppatori più esperti in genere concordano sul fatto che l'attenzione sui limiti tra software e hardware è effettivamente vantaggioso, perché si traduce in più modulare, più portatile e altro Software manutenibile con tutta la durata utile più lunga. L'investimento in Dual Targeting ha anche un recupero immediato nel ciclo di debug di compilazione molto accelerato, che è molto più veloce e più produttivo sul potente PC rispetto a un obiettivo profondamente integrato più lento e limitato a ricorso con una visibilità limitata nel codice di esecuzione .

Pannello frontale Win32 GUI Toolkit

Quando si sviluppa il codice incorporato per i dispositivi con interfacce utente non banali, si corre spesso nel problema di rappresentare i pannelli anteriori incorporati come elementi GUI sul PC. Il problema è così comune, che sono davvero sorpreso che nessuno qui potrebbe raccomandare una biblioteca esistente o un progetto open source, che fornirebbe una semplice interfaccia solo a c agli elementi di base, come LCD, pulsanti e LED. Questo non è davvero così complicato, tuttavia sembra che ogni sviluppatore incorporato debba ri-inventare questa ruota più e più volte.

Quindi, per aiutare gli sviluppatori incorporati interessati a prototipazione dei dispositivi incorporati su Windows, ho creato un "pannello frontale Win32 GUI Toolkit" e l'ho pubblicato online con la licenza GPL Open Source (vedere http://www.state-machine.com/win32 ). Questo toolkit si basa solo sull'API Win32 crudo in C e attualmente fornisce i seguenti elementi:

    .
  1. DOT-MATRIX Display per un efficiente visualizzazione indirizzabile a pixel come LCD grafici, OLEDS, ecc. Con un colore fino a 24 bit

  2. Display segmento per display segmentato come LCD del segmento e LED di segmenti con bitmap personalizzati generici e personalizzati per i segmenti.

  3. Pulsanti disegnati con proprietario con bitmaps personalizzati "depresso" e "rilasciati" e capaci di generare eventi separati quando depresso e quando rilasciato.

  4. Il toolkit viene fornito con un esempio e una nota app (vedere http://www.state-machine .com / win32 / an_win32-gui.pdf ), mostrando come gestire l'ingresso dai pulsanti disegnati dai proprietari, dai pulsanti regolari, dalla tastiera e dal mouse. È inoltre possibile visualizzare una demo animata a http://www.state-machine.com/win32/front_panel.html < / a>.

    Per quanto riguarda le dimensioni e la complessità del "pannello frontale Win32 GUI Toolkit", l'implementazione dei suddetti elementi della GUI richiede solo circa 250 righe di C. L'esempio con tutte le fonti di input e un sacco di commenti equivale a circa 300 linee di C. Il toolkit è stato testato con il GRATUITO Visual C ++ Express 2010 (con la piattaforma Express Edition SDK) e l'editor di risorse resedit gratuito.

    Divertiti!

Altri suggerimenti

Gli elettrodomestici che menzionate nel tuo commento chiariscono la domanda non utilizzerà mai un PC Windows, quindi la programmazione di Windows di basso livello non è un requisito in tal caso. In effetti, direi il suo indesiderabile. La prototipazione è sulla velocità. È di quanto velocemente puoi mettere insieme qualcosa per mostrare potenziali investitori o management superiore o qualche altro decissione.

Non vorresti spendere il tempo supplementare con API di basso livello C e Win32 fino a quando i requisiti del progetto fossero scaricati sufficientemente da quello che sapevi che è stato un requisito assoluto per i risultati del progetto finale ( forse un server / PC Strumento di monitoraggio? ). Fino ad allora vuoi la velocità di sviluppo. Fortunatamente per te L'industria ha strumenti per la prototipazione rapida e lo sviluppo di hardware come descrivi.

La mia preferenza per la prototipazione con lo sviluppo incorporato

Per quanto riguarda la mia opinione come sviluppatore, mi piace il microframework .NET (.NETMF) semplicemente perché sono già uno sviluppatore di Microsoft .NET e può trasferire molte delle mie capacità esistenti. Diliformi il prototipo con un microcontrollore FEZ utilizzando C # in Visual C # Express 2010 (GRATIS come richiesto). È veloce, facile e stai lavorando sul nucleo del tuo progetto in pochi minuti.

Se la tua esperienza come sviluppatore è diversa, puoi cercare un micro controller che è programmato utilizzando BASIC, Java o qualche altra lingua per aiutare con la velocità di sviluppo riutilizzando il set di abilità di base.

Affrontare la domanda Commenti Bounty

.

Fortunatamente parti di grandi dimensioni del software incorporato possono essere sviluppate sul computer desktop rispetto all'obiettivo profondamente incorporato. Questo L'evitamento del "collo di bottiglia del sistema di destinazione" può potenzialmente migliorare Produttività con un ordine di grandezza, se fatto a destra. Tuttavia, a. sviluppare software incorporato sul desktop, è necessario simulare l'interfaccia utente componenti, come display (sia segmentati che sempre più grafica), LED, manopole e pulsanti. Sto cercando tale interfacciata Componenti scritti in API Win32 Win32 in c per una facile integrazione con Codice incorporato da sviluppare e testato sulle finestre del desktop.

Ho fatto uno sviluppo incorporato a tempo pieno professionalmente per oltre 4 anni e molti anni che circondano quel part-time. Mentre ciò che hai detto sopra è un po 'vero, non ti farà risparmiare tempo o denaro per il motivo per cui tutti sono confusi sulla motivazione per questa strategia. Abbiamo trascorso anni a cercare di estrarre un emulatore di Windows per i dispositivi hardware di questa azienda che risparmiano teoricamente il tempo per la prototipazione. Era sempre un dolore e abbiamo trascorso molte altre ore di lavoro cercando di emulare l'esperienza che se siamo andati direttamente dall'interfaccia utente abbozzata di specifiche del disegno reale. L'emulatore è diminuito dietro lo sviluppo dell'hardware e spesso non supporterebbe le ultime funzioni fino a 6 mesi o più dopo che l'hardware è stato rilasciato. Era un sacco di lavoro extra per un piccolo valore.

Passerà più del tuo tempo a sviluppare i componenti di emulazione della piattaforma Win32 non riutilizzabili e dei componenti di emulazione hardware rispetto a scrivere effettivamente il codice per il progetto principale stesso. Questo ha sempre senso per i fornitori di hardware che forniscono questo emulatore come strumento "Valore add" per potenziali sviluppatori di terze parti, ma non ha senso per prototipare nuovi disegni hardware.

Ambienti di sviluppo moderni come Visual C # Express 2010 Con un microcontrollore FEZ può compilare, premere l'uscita del progetto sul microcontrollore, quindi iniziare il debug proprio come veloce o più veloce di quanto tu possa compilare ed eseguire un basso Level Windows App in C emulating LCD o LED o interruttori, ecc. Quindi il tuo commento, "migliorare la produttività con un ordine di grandezza", non è più true con strumenti moderni. (Potrebbe essere stato prima degli ultimi 10 anni o giù di lì.)

Se davvero, vuoi davvero simulare l'hardware incorporato visivamente su un PC usa qualcosa come Adobe Flash per meritare un UI. Ma non duplicare il codice codificando per Windows quando il dispositivo finale che stai prototipazione non verrà eseguito Windows (forse sarà, ma non l'hai detto). Utilizza gli strumenti di prototipazione più veloci disponibili oggi disponibili, che è inequivocabilmente non API a basso livello C e Win32!

magari usare stackexchange per l'elettronica?

Poiché questo è un sito orientato allo sviluppo, la discussione sui meriti di specifico hardware incorporato non è realmente rilevante. Se si decide di riparlocare l'uso di microcontroller elettronica per la prototipazione ( arduino , Fez , Elica , timbro di base , pololu , ecc.) Potresti chiedere consiglio hardware elettronico su

> Stackexchange per elettronica .Dirò che la maggior parte di quelle piattaforme sono progettate per facilitare la prototipazione di LCD, LED, pulsanti e interfacce come delineato.Di solito è possibile assemblare alcuni moduli pre-costruiti in pochi minuti e essere pronti per iniziare a codificare il tuo progetto.Il risparmio di tempo enorme può essere avuto qui.

Stai chiedendo troppo devi dare un'occhiata @ Proteus. http://www.labcenter.com/products/vsm_overview.cfm

AS Mahmoud ha detto, è possibile trovare la soluzione di codice con esempio di prototipazione in Professional Profeso .È uno dei software popolari per la prototipazione, la simulazione e la codifica, è possibile Scarica Proteus Professional gratis e controlla il loro manuale.

Best of luck

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top