Primero de que no hay mejor o peor de todo se trata de un asunto de opinión. Está muy correcto que este es ineficiente. Puede ser optimizado o no depende. Por lo general, usted va a ver estos tipos de funciones, reloj, gpio, temporizador, etc en distintos archivos/directorios. Los compiladores generalmente no han sido capaces de optimizar a través de estas brechas, hay uno que puede, que yo sepa, pero, no es ampliamente usado para cosas como esta.
solo archivo:
void dummy ( unsigned int );
void setCLK()
{
//code to set the clock
dummy(5);
}
void setConfig()
{
//code to set the config
dummy(6);
}
void setSomethingElse()
{
//1 line code to write something to a register.
dummy(7);
}
void initModule()
{
setCLK();
setConfig();
setSomethingElse();
}
Escoger un destino y el compilador para fines de demostración.
Disassembly of section .text:
00000000 <setCLK>:
0: e92d4010 push {r4, lr}
4: e3a00005 mov r0, #5
8: ebfffffe bl 0 <dummy>
c: e8bd4010 pop {r4, lr}
10: e12fff1e bx lr
00000014 <setConfig>:
14: e92d4010 push {r4, lr}
18: e3a00006 mov r0, #6
1c: ebfffffe bl 0 <dummy>
20: e8bd4010 pop {r4, lr}
24: e12fff1e bx lr
00000028 <setSomethingElse>:
28: e92d4010 push {r4, lr}
2c: e3a00007 mov r0, #7
30: ebfffffe bl 0 <dummy>
34: e8bd4010 pop {r4, lr}
38: e12fff1e bx lr
0000003c <initModule>:
3c: e92d4010 push {r4, lr}
40: e3a00005 mov r0, #5
44: ebfffffe bl 0 <dummy>
48: e3a00006 mov r0, #6
4c: ebfffffe bl 0 <dummy>
50: e3a00007 mov r0, #7
54: ebfffffe bl 0 <dummy>
58: e8bd4010 pop {r4, lr}
5c: e12fff1e bx lr
Esto es lo que la mayoría de las respuestas que aquí se están diciendo, que son ingenuos y que todo esto se pone optimizado y las funciones son eliminados. Así que no se quitan como están definidos a nivel global por defecto. Se pueden quitar si no se necesita fuera de este archivo.
void dummy ( unsigned int );
static void setCLK()
{
//code to set the clock
dummy(5);
}
static void setConfig()
{
//code to set the config
dummy(6);
}
static void setSomethingElse()
{
//1 line code to write something to a register.
dummy(7);
}
void initModule()
{
setCLK();
setConfig();
setSomethingElse();
}
quita ahora como lo estan alineadas.
Disassembly of section .text:
00000000 <initModule>:
0: e92d4010 push {r4, lr}
4: e3a00005 mov r0, #5
8: ebfffffe bl 0 <dummy>
c: e3a00006 mov r0, #6
10: ebfffffe bl 0 <dummy>
14: e3a00007 mov r0, #7
18: ebfffffe bl 0 <dummy>
1c: e8bd4010 pop {r4, lr}
20: e12fff1e bx lr
pero la realidad es que cuando usted toma en el chip proveedor o BSP bibliotecas
Disassembly of section .text:
00000000 <_start>:
0: e3a0d902 mov sp, #32768 ; 0x8000
4: eb000010 bl 4c <initModule>
8: eafffffe b 8 <_start+0x8>
0000000c <dummy>:
c: e12fff1e bx lr
00000010 <setCLK>:
10: e92d4010 push {r4, lr}
14: e3a00005 mov r0, #5
18: ebfffffb bl c <dummy>
1c: e8bd4010 pop {r4, lr}
20: e12fff1e bx lr
00000024 <setConfig>:
24: e92d4010 push {r4, lr}
28: e3a00006 mov r0, #6
2c: ebfffff6 bl c <dummy>
30: e8bd4010 pop {r4, lr}
34: e12fff1e bx lr
00000038 <setSomethingElse>:
38: e92d4010 push {r4, lr}
3c: e3a00007 mov r0, #7
40: ebfffff1 bl c <dummy>
44: e8bd4010 pop {r4, lr}
48: e12fff1e bx lr
0000004c <initModule>:
4c: e92d4010 push {r4, lr}
50: ebffffee bl 10 <setCLK>
54: ebfffff2 bl 24 <setConfig>
58: ebfffff6 bl 38 <setSomethingElse>
5c: e8bd4010 pop {r4, lr}
60: e12fff1e bx lr
Usted es la mayoría, sin duda va a empezar a agregar generales, lo que tiene un notable costo de rendimiento y espacio. Un par de a cinco por ciento de cada uno según el tamaño de cada función.
¿Por qué se hace esto de todos modos? Algunos de los es el conjunto de reglas profesores quieren o todavía enseñan a hacer de clasificación código sea más fácil. Funciones que debe caber en una página (de nuevo cuando impresa de su trabajo en el papel), no hacen este no hacerlo, etc. Mucho de esto es hacer que las bibliotecas de los nombres comunes para diferentes objetivos. si usted tiene decenas de familias de microcontroladores, algunos de los cuales compartir periféricos algunos no, tal vez tres o cuatro diferentes uart sabores mezclados en las familias, diferentes gpios, spi controladores, etc. Usted puede tener un genérico gpio_init() función, get_timer_count(), etc. Y re-uso de esas abstracciones para los diferentes periféricos.
Se convierte en un caso de la mayoría de la capacidad de mantenimiento y diseño de software, con algún posible mejorar la legibilidad. la facilidad de mantenimiento, la legibilidad, el rendimiento no puedes tener todo lo que sólo puede elegir uno o dos a la vez, no todos los tres.
Esto es en gran parte una opinión basada en cuestión, el de arriba muestra las tres principales maneras en que esto puede ir. En cuanto a qué camino es MEJOR que es estrictamente la opinión. Está haciendo todo el trabajo en una sola función? Una opinión basada en cuestión, algunas personas lo lean para el rendimiento, algunos definen la modularidad y su versión de la legibilidad como la MEJOR. El interesante tema con lo que mucha gente llama la legibilidad es un dolor intenso, para "ver" el código debe tener 50-10000 archivos abiertos a la vez y de alguna manera intentar linealmente ver las funciones en el orden de ejecución para ver lo que está pasando. Me parece que el opuesto de la legibilidad, para otros resulta legible, ya que cada elemento encaja en la pantalla o de la ventana del editor y puede ser consumido en su totalidad después de que han aprendido de memoria las funciones que se llama y/o tener un editor que pueden aparecer dentro y fuera de cada función dentro de un proyecto.
Que es otro factor importante cuando ves a diversas soluciones. Los editores de texto/IDEs/etc están muy personal que va más allá de la vi vs emacs. La programación de la eficiencia, las líneas por día/mes si usted se sienta cómodo y eficiente, con la herramienta que está utilizando. Las características de la herramienta puede intencionalmente o no inclinarse hacia cómo los fans de la herramienta de escritura de código. Y, como resultado, si una persona está escribiendo estas bibliotecas el proyecto en cierta medida, el reflejo de estos hábitos. Incluso si es un equipo, el desarrollador líder o jefe de los hábitos y preferencias puede ser forzado en el resto del equipo.
Estándares de codificación que tiene un montón de preferencias personales enterrados en ellos, muy religiosa vi vs emacs de nuevo, fichas vs espacios, cómo soportes están alineados, etc. Y estos juegan en cómo las bibliotecas están diseñados para cierta medida.
¿Cómo SE debe escribir el tuyo? Sin embargo, se quiere, en realidad no es una respuesta equivocada si funciona, no es mala, o de riesgo de código seguro, pero si está escrita de tal manera que usted puede mantener es necesario que cumpla con sus objetivos de diseño, renunciar a la legibilidad y algunos mantenibilidad si el rendimiento es importante, o viceversa. ¿Te gusta el corto nombres de variables, de modo que una sola línea de código se ajuste al ancho de la ventana del editor? Largo o demasiado nombres descriptivos para evitar la confusión, pero la legibilidad va hacia abajo, porque usted no puede obtener una línea en una página, ahora es visualmente roto, jugando con el flujo.
Usted no va a golpear un home run en el primer turno al bate, se puede/debe tomar décadas para definir realmente su estilo, al mismo tiempo, con el tiempo, su estilo puede cambiar, apoyado de una forma un rato, luego se inclina otro.
Usted va a escuchar un montón de no optimizar, nunca optimizar prematura de optimización. Pero como se muestra diseños como este desde el principio crear problemas de rendimiento, a continuación, empezar a ver hacks para resolver el problema en lugar de re-diseño desde el principio a realizar. Estoy de acuerdo en que hay situaciones, es una función solo un par de líneas de código que usted puede intentar es difícil de manipular el compilador basado en un miedo de lo que el compilador va a hacer lo contrario (nota con experiencia en este tipo de codificación se convierte en fácil y natural, la optimización de escribir sabiendo cómo el compilador va a compilar el código), entonces usted quiere confirmar que el ciclo stealer realmente es, antes de atacar.
También es necesario el diseño de su código para que el usuario, en cierta medida, si este es su proyecto, usted es el único desarrollador, su lo que quieras, si usted está tratando de hacer una biblioteca para regalar o vender, es probable que desee para hacer que el código se parece a todas las otras bibliotecas, cientos de miles de archivos con pequeñas funciones, largo de nombres de funciones, y a la larga los nombres de las variables. A pesar de los problemas de legibilidad y problemas de rendimiento, la OMI encontrará más gente va a ser capaz de usar ese código.