Está en la página 1de 4

Machine Translated by Google

1.5 Tipos de datos y guía de estilo de codificación

Tipos de datos

Cada puerto de FreeRTOS tiene un archivo de encabezado portmacro.h único que contiene (entre otros

cosas) definiciones para dos tipos de datos específicos de puerto: TickType_t y BaseType_t. Estos datos

Los tipos se describen en la Tabla 2.

Tabla 2. Tipos de datos específicos de puerto utilizados por FreeRTOS

Macro o typedef
utilizado tipo real

TickType_t FreeRTOS configura una interrupción periódica denominada interrupción de tictac.

El número de interrupciones de ticks que se han producido desde FreeRTOS

aplicación iniciada se llama el recuento de ticks. El conteo de ticks se utiliza como

medida del tiempo.

El tiempo entre dos interrupciones de tictac se denomina período de tictac. Los tiempos son

especificado como múltiplos de períodos de ticks.

TickType_t es el tipo de datos utilizado para contener el valor de conteo de ticks y para

especificar tiempos.

TickType_t puede ser un tipo de 16 bits sin firmar o un tipo de 32 bits sin firmar

tipo, según la configuración de configUSE_16_BIT_TICKS dentro de FreeRTOSConfig.h.

Si configUSE_16_BIT_TICKS se establece en 1, TickType_t se define como uint16_t. Si

configUSE_16_BIT_TICKS se establece en 0, TickType_t se define como uint32_t.

El uso de un tipo de 16 bits puede mejorar en gran medida la eficiencia en arquitecturas de

8 y 16 bits, pero limita severamente el período de bloque máximo que se puede especificar. No

hay motivo para usar un tipo de 16 bits en uno de 32 bits.

arquitectura.

21
Machine Translated by Google
161204 Versión preliminar de FreeRTOS V8.xx Consulte http://www.FreeRTOS.org/FreeRTOS-V9.html para obtener información sobre FreeRTOS
V9.xx Consulte https://www.freertos.org/FreeRTOS-V10.html para obtener información sobre FreeRTOS V10.xx

Tabla 2. Tipos de datos específicos de puerto utilizados por FreeRTOS

Macro o typedef
utilizado tipo real

BaseType_t Esto siempre se define como el tipo de datos más eficiente para la arquitectura.

Por lo general, este es un tipo de 32 bits en una arquitectura de 32 bits, un tipo de 16 bits en una

arquitectura de 16 bits y un tipo de 8 bits en una arquitectura de 8 bits.

BaseType_t generalmente se usa para tipos de devolución que pueden tomar solo un tiempo muy

rango limitado de valores, y para booleanos de tipo pdTRUE/pdFALSE.

Algunos compiladores hacen que todas las variables char no calificadas no estén firmadas, mientras que otros las firman.

Por esta razón, el código fuente de FreeRTOS califica explícitamente cada uso de char con 'firmado' o 'sin firmar', a menos que

char se use para contener un carácter ASCII o un puntero a char.

se utiliza para apuntar a una cadena.

Los tipos int simples nunca se usan.

Nombres de variables

Las variables tienen el prefijo de su tipo: 'c' para char, 's' para int16_t (breve), 'l' int32_t (larga) y 'x' para BaseType_t y cualquier

otro tipo no estándar (estructuras, identificadores de tareas, colas). manejas,

etc.).

Si una variable no tiene signo, también tiene el prefijo 'u'. Si una variable es un puntero, también tiene el prefijo 'p'. Por ejemplo,

una variable de tipo uint8_t tendrá el prefijo 'uc' y una variable de

el puntero de tipo a char tendrá el prefijo 'pc'.

Nombres de funciones

Las funciones tienen el prefijo tanto del tipo que devuelven como del archivo en el que están definidas. Para

ejemplo:

• vTaskPrioritySet() devuelve un vacío y se define dentro de task.c.

• xQueueReceive() devuelve una variable de tipo BaseType_t y se define dentro de queue.c.

• pvTimerGetTimerID() devuelve un puntero a void y se define dentro de timers.c.

Las funciones de ámbito de archivo (privadas) tienen el prefijo 'prv'.

22
Machine Translated by Google

Formateo

Una pestaña siempre se establece en cuatro espacios.

Nombres de macros

La mayoría de las macros están escritas en mayúsculas y prefijadas con letras minúsculas que indican dónde

se define la macro. La Tabla 3 proporciona una lista de prefijos.

Tabla 3. Prefijos de macro

Prefijo Ubicación de la definición de macro

puerto (por ejemplo, portMAX_DELAY) portátil.h o

portmacro.h

tarea (por ejemplo, taskENTER_CRITICAL()) tarea.h

pd (por ejemplo, pdTRUE) projdefs.h

configuración (por ejemplo, configUSE_PREEMPTION) FreeRTOSConfig.h

err (por ejemplo, errQUEUE_FULL) projdefs.h

Tenga en cuenta que la API de semáforo está escrita casi en su totalidad como un conjunto de macros, pero sigue la

convención de nomenclatura de funciones, en lugar de la convención de nomenclatura de macros.

Las macros definidas en la Tabla 4 se usan en todo el código fuente de FreeRTOS.

Tabla 4. Definiciones de macros comunes

Macro Valor

pdVERDADERO 1

pdFALSO 0

pdPASS 1

pdFAIL 0

23
Machine Translated by Google
161204 Versión preliminar de FreeRTOS V8.xx Consulte http://www.FreeRTOS.org/FreeRTOS-V9.html para obtener información sobre FreeRTOS
V9.xx Consulte https://www.freertos.org/FreeRTOS-V10.html para obtener información sobre FreeRTOS V10.xx

Razones para la conversión excesiva de tipos

El código fuente de FreeRTOS se puede compilar con muchos compiladores diferentes, todos los cuales difieren

en cómo y cuándo generan alertas. En particular, diferentes compiladores quieren que la conversión sea

utilizado de diferentes maneras. Como resultado, el código fuente de FreeRTOS contiene más conversión de tipos

de lo que normalmente estaría garantizado.

24

También podría gustarte