Estoy tratando de escribir una matriz de tamaño, por ejemplo, uint16_t array[10000]
en una tarjeta SD usando la biblioteca FatFS usando la siguiente sintaxis:
f_write(&myFILE, array, sizeof(array), &testByte);
cuando intento escribir utilizando la sintaxis anterior, la matriz no se almacena en la tarjeta de memoria. ¿Cuáles son las otras formas en que puedo almacenar una matriz en la tarjeta SD?
En cambio, si uso f_printf
(bucle para matriz), puedo escribir datos en la tarjeta de memoria.
Mi preocupación es con f_printf
. Solo puedo escribir un valor a la vez que no es lo que estoy buscando.
Primero, no puedo escribir un entero usando f_write ie.,
int x=1234
f_write(&myFILE, &x, sizeof(x), &testByte);
Cuando uso la función anterior, se almacenan algunos valores ASCII aleatorios, como estos:
¹ ÿ × × Ø × × Ø
¿Algún consejo / sugerencia, por favor?
Código:
#include <stdio.h>
#include <stdlib.h>
#include "main.h"
#include "stm32f4xx_hal.h"
#include "fatfs.h"
ADC_HandleTypeDef hadc1;
SD_HandleTypeDef hsd;
TIM_HandleTypeDef htim2;
void SystemClock_Config(void);
static void MX_GPIO_Init(void);
static void MX_SDIO_SD_Init(void);
static void MX_ADC1_Init(void);
static void MX_TIM2_Init(void);
void sd_card(void);
unsigned long int i=0;
unsigned int adc_val=0;
uint16_t temp_value[10];
unsigned int testing=1234;
FATFS myFATFS;
FIL myFILE;
UINT testByte;
void HAL_ADC_ConvCpltCallback(ADC_HandleTypeDef* hadc)
{
/* Prevent unused argument(s) compilation warning */
UNUSED(hadc);
adc_val= HAL_ADC_GetValue(&hadc1);
}
void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim)
{
/* Prevent unused argument(s) compilation warning */
UNUSED(htim);
temp_value[i] =adc_val;
i++;
if(i==10)
{
f_write(&myFILE, temp_value, sizeof(temp_value), &testByte);
f_close(&myFILE);
}
}
int main(void)
{
HAL_Init();
SystemClock_Config();
MX_GPIO_Init();
MX_SDIO_SD_Init();
MX_FATFS_Init();
MX_ADC1_Init();
MX_TIM2_Init();
/* USER CODE BEGIN 2 */
//UINT testByte;
HAL_ADC_Start_IT(&hadc1);
HAL_TIM_Base_Start_IT(&htim2);
char myPath [] = "WRITE1.TXT";
char myData [] = "hello ashok f_write(&myFILE, array, sizeof(array), &testByte);
";
f_mount(&myFATFS,SDPath,1);
f_open(&myFILE, myPath, FA_WRITE | FA_CREATE_ALWAYS);
f_write(&myFILE, myData, sizeof(myData), &testByte);//writes hello ashok
f_printf(&myFILE, "%d",testing);
f_printf(&myFILE, "\r\n Hello world int x=1234
f_write(&myFILE, &x, sizeof(x), &testByte);
"); // must print hello world.
while (1)
{
}
}