Universal significa descrivere le funzioni che una libreria deve esporre

0

Sono impegnato con un sistema operativo per hobby e sto pianificando di rendere il progetto open-source e, infine, di supportare piattaforme multiple. Con questo in mente ho preso l'approccio di mettere tutto il codice hardware specifico in una libreria HAL (Hardware Abstraction Layer) separata in modo che il kernel non abbia bisogno di sapere come l'hardware specifico gestisce cose come la memoria e gli interrupt. Il kernel chiamerà semplicemente la funzione HAL per chiedere un po 'di memoria o per agganciare un interrupt chiamando hal_memory_malloc(...); e hal_interrupts_hook(...); rispettivamente.

La mia domanda è, vorrei sapere se ci sono mezzi universali per descrivere quali funzioni la biblioteca deve esporre se uno sviluppatore vuole trasferire l'HAL su un'altra piattaforma. Vedendo che il kernel conosce il nome della funzione perché si trova nei file di intestazione del kernel, la libreria deve semplicemente avere una funzione con quel nome specifico al suo interno. Come il kernel non mi interessa come funziona la tua funzione finché è lì e posso chiamarla.

Modifica Il mio kernel e la mia libreria sono scritti in C, quindi la libreria sarà una normale libray collegata staticamente

Al momento ho un documento di Word con un diagramma che mostra le diverse funzioni, ma presto questo diventerà un disastro.

Qualsiasi consiglio sarebbe molto apprezzato.

    
posta Keagan Ladds 14.03.2014 - 08:31
fonte

1 risposta

1

Definirlo con il file di intestazione C contenente tutti i prototipi dichiarati extern. Documentato con commenti nel file stesso utilizzando doxygen o un formato simile. In questo modo il compilatore verificherà che le funzioni abbiano firme corrette durante la creazione della libreria. Doxygen è perfettamente adatto per la scrittura di documentazione completa ed essendo un formato di testo è facilmente versionabile, quali formati di parole o di documenti binari simili non lo sono.

Ma non ci sono molti motivi per renderlo una libreria comunque. Tu fai vuoi separare ciò che deve essere implementato per ogni piattaforma e ciò che è generico. Ma su ogni piattaforma hai solo bisogno di un HAL e dal momento che devi ancora compilare la parte generica per ogni piattaforma separatamente (perché la forma dell'oggetto non è generica), puoi semplicemente compilarlo tutto insieme.

Inoltre ci sono cose in cui probabilmente dovresti definire C o le definizioni del preprocessore nell'intestazione dipendente dalla piattaforma inclusa dalla parte generica per motivi di prestazioni, quindi solo una libreria non lo farà. Mentre la regola generale è di non preoccuparsi delle micro-ottimizzazioni, alcune cose nei blocchi del kernel (con gli interrupt disabilitanti in alcuni casi) e le operazioni atomiche (per il conteggio dei riferimenti e altre operazioni simultanee senza blocco) devono essere realmente sottolineate.

    
risposta data 14.03.2014 - 09:56
fonte

Leggi altre domande sui tag