C/Visual C - Cómo escribir y leer datos: Almacenamiento de Datos - C (Assembly)

 
Vista:

Cómo escribir y leer datos: Almacenamiento de Datos - C (Assembly)

Publicado por Roviale (3 intervenciones) el 16/07/2020 16:55:47
Buenas, por favor me ayudarían a leer datos para almacenar en memoría?
Este es el código que se supone debo implementar para leer y escribir.
Pero no sé si los puntero *strAmount, *strMobile, *strInvoice son asignados por arrData

1
2
3
4
5
6
7
8
9
10
#define FLASH_ADDR_USER_SPACE	0x10000
void flash_rw_sample(void)
{
	u8 arrData[] = *strAmount, *strMobile, *strInvoice;
	u32 dwSize = lark_flash_write(FLASH_ADDR_USER_SPACE, arrData, sizeof(arrData)); //write arrData into flash
	TRACE(TRACE_LVL_, "Wrote %d bytes into flash\r\n", dwSize); //if wrote successfully, dwSize shall be 19
	Memset_(arrData, 0, sizeof(arrData)); //clear arrData before reading the flash
	dwSize = lark_flash_read(FLASH_ADDR_USER_SPACE, arrData, sizeof(arrData)); //read flash at the address which arrData was stored
	TRACE_VALUE(TRACE_LVL_DEFAULT, arrData, dwSize); //if read successfully, print out "31 32 33 34 35 36 37 38 39 30 61 62 63 64 01 02 03 04 00"
}

Este es el código dónde se declaran las variables:

1
2
3
4
5
6
static Rc_t MenuTransactionAmountMobileRefN(Key_Num_t Key_Num, pu8 pTransBuffer)
{
	char strAmount[32] = {0}, strMobile[32] = {0}, strInvoice[32] = {0};
	u32 dwAmount = Key_Num, selLine = LCD_LINE_0;
	u32 AmountLen = format_amt_int_to_str(dwAmount, (pu8) "", true, (u8 *)strAmount);
	Rc_t rctResult = RC_QUIT;
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de Rodrigo
Val: 350
Bronce
Ha mantenido su posición en C/Visual C (en relación al último mes)
Gráfica de C/Visual C

Cómo escribir y leer datos: Almacenamiento de Datos - C (Assembly)

Publicado por Rodrigo (119 intervenciones) el 16/07/2020 17:58:53
Que es lo que se quiere decir con esta linea

1
u8 arrData[] = *strAmount, *strMobile, *strInvoice;

?
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Cómo escribir y leer datos: Almacenamiento de Datos - C (Assembly)

Publicado por Roviale (3 intervenciones) el 16/07/2020 18:01:33
Se dice que:

A arrData se le asignan los valores de los siguientes punteros. ¿No?
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Cómo escribir y leer datos: Almacenamiento de Datos - C (Assembly)

Publicado por Tom (619 intervenciones) el 16/07/2020 21:24:13
Y ¿ eso compila ? En caso afirmativo ¿ con qué compilador ?
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Cómo escribir y leer datos: Almacenamiento de Datos - C (Assembly)

Publicado por Roviale (3 intervenciones) el 16/07/2020 21:30:47
Si compila.

Es un SO para POS (Point of Sale) y compila con gcc arm64 make j4
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Rodrigo
Val: 350
Bronce
Ha mantenido su posición en C/Visual C (en relación al último mes)
Gráfica de C/Visual C

Cómo escribir y leer datos: Almacenamiento de Datos - C (Assembly)

Publicado por Rodrigo (119 intervenciones) el 16/07/2020 22:19:57
Estas usando el operador , (coma), en realidad estas asignando el ultimo valor
La intencion es asignarlos uno despues del otro? Uno en vez de otro?

Cualquiera sea la respuesta eso no es lo que haces.
Requieres hacer un loop, o bien hacer aritmetica de punteros para calcular la direccion donde vas a dejar los datos.

Como se define u8?

(Puede que me equivoque, pero ..) las variables que tienes a la derecha de la asignacion son arreglos de char, por lo que aplicarles el operador * de desreferenciacion estaria copiando el primer char del ultimo string.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Cómo escribir y leer datos: Almacenamiento de Datos - C (Assembly)

Publicado por Tom (619 intervenciones) el 17/07/2020 09:06:45
La línea en cuestión, teniendo en cuenta que *strAmount, *strMobile, *strInvoice no son variables conocidas en el scope de flash_rw_sample(), es lo mismo que esto:

1
2
3
u8 arrData[] = *strAmount;
u8 *strMobile;
u8 *strInvoice;
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Rodrigo
Val: 350
Bronce
Ha mantenido su posición en C/Visual C (en relación al último mes)
Gráfica de C/Visual C

Cómo escribir y leer datos: Almacenamiento de Datos - C (Assembly)

Publicado por Rodrigo (119 intervenciones) el 17/07/2020 13:47:29
Concuerdo con Tom y me desdigo a mi mismo.

Lo que dije del operador coma no aplica aqui.

Sera que existe la variable global strAmount ? No veo como puede compilar si no es asi, pues strAmount es local a la otra funcion.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Cómo escribir y leer datos: Almacenamiento de Datos - C (Assembly)

Publicado por Tom (619 intervenciones) el 17/07/2020 19:49:41
Sí, eso creo yo, o existe otra variable global, o se trata de funciones anidadas ... algo así como esto:

1
2
3
4
5
6
7
8
9
/* */
int main(int argc, char *argv[]) {
	char test1[32] = {0};
	char test2[32] = {0};
	char test3[32] = {0};
	int nested() {
		char test4[] = *test1, *test2, *test3; // redefined test2 & test3
	}
}

Pero en todo caso, esto tampoco parece que vaya a compilar:
u8 arrData[] = *strAmount;
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar