Mixare diversi stili di codice in puro codice C [duplicato]

2

Sono un ingegnere incorporato e uno dei miei campi di lavoro è la creazione di sistemi embedded basati su microcontrollori STM32. La ST fornisce il proprio HAL con nomi di funzioni come HAL_Delay() , HAL_UART_Receive() ecc. Usano il rientro a due spazi, tutte le parentesi sulla nuova riga e altre caratteristiche codestili specifiche della ST. Inoltre, è molto comune usare FreeRTOS su sistemi embedded. Usano nomi di funzioni come xTaskCreate() e in generale il proprio standard di codifica. Per quanto mi riguarda, preferisco lo stile di codice simile a linux-kernel con i nomi delle funzioni all_lower_case() e le linguette larghe 8 spazi come rientri. Come gestire tutte queste cose in queste situazioni? Realizza funzioni inline wrapper? O semplicemente mischia tutto e non ti preoccupare di questo?

    
posta artsin 14.05.2017 - 13:10
fonte

2 risposte

3

Or just mix everything and do not worry about this?

No, ti prego di preoccuparti di questo.

Ho lavorato in linguaggi di alto livello e ho lavorato in linguaggi di basso livello. Ho lavorato quando il tempo non era un fattore in cui era vitale per la vita. Una cosa che è sempre stata vera: è meglio pensare di rendere le cose facili da leggere prima di pensare di renderle veloci.

  • As for me, I prefer linux-kernel-like codestyle with all_lower_case() function names and 8-spaces wide tabs as indents.

A nessuno importa quello che ti piace. Si preoccupano se possono leggerlo. Ciò che rende leggibile il tuo codice è un buon nome, uno stile coerente e un buon uso dello spazio bianco. (8 spazi, davvero? Sheesh)

Sei libero di impostare il tuo stile purché non lo mescoli con altri stili. Sei libero di usare cose che usano altri stili ma non farlo da copia e incolla. Dovresti nascondere gli altri stili dietro alle astrazioni. Vieni a pensarci anche quando non pensi allo stile dovresti nascondere un altro codice dietro alle astrazioni. Le funzioni wrapper sono un modo per farlo.

  • ST provides its own HAL with names of functions like HAL_Delay(), HAL_UART_Receive() etc. They use two-space indentation, all brackets on new line and other ST-specific codestyle features.

A meno che tu non stia facendo qualcosa di sciocco come aggiungere il codice al tuo usando il copia e incolla, l'unica parte di questo che potrebbe apparire nel tuo codice sono i nomi. I wrapper si prendono cura di questo.

  • Also, it is very common to use FreeRTOS on embedded systems. They use function names like xTaskCreate() and in general its own coding standard.

Secondo verso, uguale al primo.

How to manage all this stuff in such situations? Make wrapper inline functions?

Usa la migliore astrazione possibile. Non dare per scontato che le funzioni inline siano l'unica cosa che puoi usare. Le funzioni virtuali possono essere molto potenti. Se sei preoccupato per la velocità, fermati. Non preoccuparti di questo fino a quando un test non ti dimostrerà necessario.

Ricorda RTOS non significa veloce. Significa sempre lento. Non lasciare che il tuo ambiente ti dica quali sono i tuoi requisiti. L'attività a portata di mano dovrebbe dirti che.

Lavora per creare un posto nel codice in cui tutto parla in uno stile con un solo vocabolario. Sposta via i dettagli e scrivi qualcosa che faccia un buon punto di vista.

    
risposta data 14.05.2017 - 16:21
fonte
0

L'obiettivo più importante è coerente con lo schema di denominazione.

Quindi la tua idea di rendere utili le funzioni wrapper .

E c'è di più: le tue funzioni wrapper costruiscono un livello di astrazione che disaccoppia il tuo codice dall'API delle librerie. In questo modo sarà più semplice adottare le future modifiche di queste librerie API nel tuo programma ...

    
risposta data 14.05.2017 - 13:33
fonte

Leggi altre domande sui tag