Saltar a contenido

C与STM32常用宏定义

# Definiciones de macros comunes en C para STM32

En el desarrollo de sistemas embebidos, es importante utilizar definiciones de macros comunes que mejoren la compatibilidad y portabilidad del proyecto.

## Evitar la definición repetida de archivos de encabezado

```c
#ifndef COMDEF_H
#define COMDEF_H

// Contenido del archivo de encabezado

#endif

Tipos de datos personalizados

Es conveniente definir tipos de datos personalizados para evitar discrepancias en la cantidad de bytes de tipos de datos debido a diferencias entre plataformas y compiladores. Esto facilita la portabilidad del código.

typedef unsigned char boolean; /* Tipo de valor booleano */
typedef unsigned long int uint32; /* Valor sin signo de 32 bits */
typedef unsigned short uint16; /* Valor sin signo de 16 bits */
typedef unsigned char uint8; /* Valor sin signo de 8 bits */
typedef signed long int int32; /* Valor con signo de 32 bits */
typedef signed short int16; /* Valor con signo de 16 bits */
typedef signed char int8; /* Valor con signo de 8 bits */

Obtener un byte o palabra en una dirección específica

#define MEM_B( x ) ( *( (byte *) (x) ) )
#define MEM_W( x ) ( *( (word *) (x) ) )

Obtener el valor máximo / mínimo

#define MAX( x, y ) ( ((x) > (y)) ? (x) : (y) )
#define MIN( x, y ) ( ((x) < (y)) ? (x) : (y) )

Calcular el tamaño de un arreglo

#define ARR_SIZE( a ) ( sizeof( (a) ) / sizeof( (a[0]) ) )

Convertir la primera letra a mayúscula

#define UPCASE( c ) ( ((c) >= 'a' && (c) <= 'z') ? ((c) - 0x20) : (c) )

Verificar si un carácter es un dígito decimal

#define DECCHK( c ) ((c) >= '0' && (c) <= '9')

Verificar si un carácter es un dígito hexadecimal

#define HEXCHK( c ) ( ((c) >= '0' && (c) <= '9') ||\
((c) >= 'A' && (c) <= 'F') ||\
((c) >= 'a' and (c) <= 'f') )

Referencias y Agradecimientos

Dirección original del artículo: https://wiki-power.com/
Este artículo está protegido por la licencia CC BY-NC-SA 4.0. Si desea reproducirlo, por favor indique la fuente. ```

Este post está traducido usando ChatGPT, por favor feedback si hay alguna omisión.