Placa de desarrollo: K210 AIRV R3 versión widora
Entorno de desarrollo: kendryte IDE official
Documentos de referencia necesarios: Guía de programación del SDK independiente v0.5.0 y esquema de Widora
(1) En este episodio, pruebe el sistema de archivos para abrir sus propios archivos
Primero lea un.txt y obtenga la longitud dentro de v_fileinfo.fsize
Luego imprime lo que lees
Comente primero el siguiente código y pruébelo por separado
Ve todo en uno
Se informa un error. V_fileinfo.fsize no se puede inicializar. No quiero usar mem para asignar, así que solo uso la constante fija 128 (se recomienda usar la asignación dinámica de memoria, no uso el fijo)
El efecto es bueno, lo leí todo
Continuar leyendo el siguiente documento
Lo acabo de leer aquí y no obtengo información
El puerto serie no se imprime, prueba que los chinos no pueden ser reconocidos, no sé cómo resolver el problema del reconocimiento chino.
Entonces no puedo usar chino
(2) Entonces probemos y leamos mp3
Yo también puedo leerlo, pero no sé si se lee el contenido.
Escriba a un.txt a continuación (escriba directamente sin leer, espere a que el lector lea)
No está mal esta vez, escribir en chino está bien
Cambiar los nombres de los archivos a todos en inglés
Lea la imagen de abajo
No se puede leer el contenido, la razón debería ser que el obtenido es de 8 bits, pero la imagen no es de 8 bits sino de 32 bits, por lo que no funcionará
Solo fui a aprender una ola de calloc de memoria dinámica, recuerda liberar para liberar la matriz después de usar
El aprendizaje del sistema de archivos está completo, nos vemos la próxima vez
Resumen
Crear carpeta
char *dir = "jwdeng1995";
ret = f_mkdir(dir);
Obtenga el tamaño del archivo (se puede mostrar otra información en FILINFO, aquí solo se usa .fsize)
char *path = "jwdeng1995/test.txt";
printf("/*******************sd read write test*******************/\n");
uint32_t v_ret_len = 0;
FILINFO v_fileinfo;
if ((ret = f_stat(path, &v_fileinfo)) == FR_OK) {
printf("%s length is %lld\n", path, v_fileinfo.fsize);
} else {
printf("%s fstat err [%d]\n", path, ret);
}
Abra el documento y envíe el contenido
if ((ret = f_open(&file, path, FA_READ)) == FR_OK) {
char v_buf[128] = {0};
ret = f_read(&file, (void *)v_buf, 128, &v_ret_len);
if (ret != FR_OK) {
printf("Read %s err[%d]\n", path, ret);
} else {
printf("Read :> %s %d bytes lenth\n", v_buf, v_ret_len);
}
f_close(&file);
}
Escribir documentación
if ((ret = f_open(&file, path, FA_CREATE_ALWAYS | FA_WRITE)) != FR_OK) {
printf("open file %s err[%d]\n", path, ret);
return ret;
} else {
printf("Open %s ok\n", path);
}
uint8_t hello[1024]= "阿斯打扫打扫打扫打扫打扫";
ret = f_write(&file, hello, sizeof(hello), &v_ret_len);
if (ret != FR_OK) {
printf("Write %s err[%d]\n", path, ret);
} else {
printf("Write %d bytes to %s ok\n", v_ret_len, path);
}
f_close(&file);
Espacio de asignación de memoria dinámica para impresión en matriz
char *v_buf = calloc(v_fileinfo.fsize, sizeof(char));
//用完free掉
free(v_buf);
v_buf = NULL;
En esta sección no se proporciona ningún código ni ingeniería.