https://github.com/joaoantoniocardoso/c_array_macros
Basic array macros for C
https://github.com/joaoantoniocardoso/c_array_macros
array-macros array-manipulations array2d array3d bare-metal c matrizes
Last synced: 9 months ago
JSON representation
Basic array macros for C
- Host: GitHub
- URL: https://github.com/joaoantoniocardoso/c_array_macros
- Owner: joaoantoniocardoso
- License: gpl-3.0
- Created: 2019-06-20T04:54:39.000Z (about 7 years ago)
- Default Branch: master
- Last Pushed: 2020-09-03T03:04:13.000Z (almost 6 years ago)
- Last Synced: 2025-04-09T20:17:43.813Z (about 1 year ago)
- Topics: array-macros, array-manipulations, array2d, array3d, bare-metal, c, matrizes
- Language: C
- Homepage:
- Size: 23.4 KB
- Stars: 3
- Watchers: 1
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
# c_array_macros
Este repositório contem um conjunto de macros em C para as operações fundamentais com vetores e matrizes.
# Sobre
ARRAY2D aqui são MATRIZES:
`x[k][i][j]`, onde:
**i** é a linha
**j** é a coluna
ARRAYND aqui são MATRIZES NO TEMPO:
Interpretar como um vetor(tempo) de matrizes(x,y):
`x[k][i][j]`, onde:
**i** é a linha
**j** é a coluna
**k** é a amostra no tempo
## Exemplo de uso
No arquivo *array2d_example.c* é realizada a operação matricial: E = A*B + C*d:
```
#include
#include "array_macros.h"
// Selects REVERSE or DIRECT order for processing loops:
#define SUM ARRAY2D_SUM_REVERSE
#define MUL ARRAY2D_MUL_REVERSE
#define GAIN ARRAY2D_GAIN_REVERSE
float A[2][3] = {
{0, 1, 2},
{3, 4, 5}
};
float B[3][2] = {
{0, 1},
{2, 3},
{4, 5}
};
float C[2][2] = {
{10, 12},
{16, 11}
};
float d = 2;
float E[2][2];
int main(void)
{
// Initialize local indexes (i,j,h) for array2d macros
ARRAY2D_INDEX_INIT();
// Temporary arrays
float T1[2][2], T2[2][2];
// T1 = A*B :
MUL(A, B, T1);
// T2 = C*d :
GAIN(C, d, T2);
// E = A*B + C*d = T1 * T2 :
SUM(T1, T2, E);
// PRINT
printf("RESULT:\n");
for(i = 0; i < ARRAY2D_ROWS(E); i++){
for(j = 0; j < ARRAY2D_COLS(E); j++){
printf("\tE[%d][%d] = %f\n", i, j,
E[i][j]);
}
}
return 0;
}
```
Para mais detalhes, o arquivo *array_macros_test.c* contém exemplos de utilização específicos de cada macro definida em *array_macros.h*, enquanto o arquivo *array_macros_development_test.c* realiza os mesmos tests SEM a utilização dos macros, utilizado para uma escrita mais fluida das macros durante o desenvolvimento.