Escrever variaveis no Sd Card com LPC 1768

Software e Hardware para linha ARM

Moderadores: 51, guest2003, Renie, gpenga

Mensagempor jonowsky » 29 Out 2010 07:52

cortex escreveu:
Nossa, da declaração de uma variavel não volátil para um datalogger :D

cortex, como comentamos, crie um arqivo e salve varivel, data, hora + 0x13

O 0x13 é só um enter depois da inserção dos dados. Caso vá visualizar isso com um editor de textos depois, seria interessante salvar os dados em caracter ascii para facilitar a visualização...


hehe me expressei bem mal mesmo!!

Fabim tendi!

seguinte: eu sei criar um arquivo txt, diretório, acessar o arquivo, etc... mas olha só, eu escrevo por exemplo uma frase neste arquivo, até ai blz! eu abro meu arquivo no pc e tá la a frese que eu escrevi, ai quando eu mando meu programa escrever o valor de uma variavel ele escreve, mas quando abro o arquivo ficam aparecendo caracteres tipo unicode sacam? alguem sabe me dizer aonde eu to comendo barriga nessa história?
[/quote]

Assim cortex, quando você cria um arquivo texto e grava por exemplo o texto "cortex" esta gravando o seguinte:

byte 0 -> 0x63 'c'
byte 1 -> 0x6F 'o'
byte 2 -> 0x72 'r'
byte 3 -> 0x74 't'
byte 4 -> 0x65 'e'
byte 5 -> 0x78 'x'

ou seja, ele grava o valor correspondente ao caracter ascii, sendo assim, se tiveres uma varivel que esta com valor 0x28 por exemplo e gravar no arquivo, quando for visualizar verá '(' que é seu caracter correspondente na tabela ascii. Por isso falei na mensagem anterior que você deve converter sua variavel para ascii. Deixa eu tentar lhe ajudar...

Valor da variavel x = 59

grave (x/10 + 0x30)
grave ( x - ((int)(x/10) * 10)) + 0x30

observe que eu somo 0x30 ao valor que é o valor ascii onde começam os numeros...

http://www.cs.utk.edu/~pham/ascii_table.jpg

baixe o PsPad e abra seu arquivo... vai ver que o valor da sua variavel está la...

http://www.pspad.com/en/
Avatar do usuário
jonowsky
Byte
 
Mensagens: 148
Registrado em: 26 Mai 2009 15:18
Localização: Rio Grande do Sul

Mensagempor Djalma Toledo Rodrigues » 29 Out 2010 10:12

fabim escreveu: ... Na liby que eu uso, eu consigo entrar na estrutura e descobrir em qual setor a os dados do arquivo que eu criei começam!! ai fiote, só macetiar na unha, igual expliquei a cima!!! ...

Na Trilha Zero esta a Tabela de Alocação.

Mas, nada impede de ter a própria se gravou sabendo a Trilha / Setor
só não pode é Desflagmentar, lógico

DJ
Avatar do usuário
Djalma Toledo Rodrigues
Dword
 
Mensagens: 2334
Registrado em: 03 Ago 2008 13:22

Mensagempor cortex » 01 Nov 2010 07:04

valeu jonowsky!!! vou tentar meter a unha por aqui!!!
cortex
Byte
 
Mensagens: 121
Registrado em: 27 Out 2010 10:32

Mensagempor fabim » 03 Nov 2010 07:03

cortex escreveu:valeu jonowsky!!! vou tentar meter a unha por aqui!!!


alá, querendo dar um de sabidão!! Tu nem sequer entendeu o que o cara disse !!! kkkk
Mano, ve só.
Sou responsável pelo que escrevo!!! E não pelo que você entende !!!
fabim
Dword
 
Mensagens: 5001
Registrado em: 16 Out 2006 10:18
Localização: aqui uái!!!?

Mensagempor cortex » 03 Nov 2010 07:11

[quote="fabim"][quote="cortex"]valeu jonowsky!!! vou tentar meter a unha por aqui!!![/quote]

alá, querendo dar um de sabidão!! Tu nem sequer entendeu o que o cara disse !!! kkkk[/quote]

eu num tive é tempo pra entende ainda!!! kkk!! mas agradecendo jonowsky desde ja pela explicação do caminho das pedras!! valeu jonowsky!!!
cortex
Byte
 
Mensagens: 121
Registrado em: 27 Out 2010 10:32

Mensagempor fabim » 03 Nov 2010 08:05

Assim, um editor de texto só pode representar caracteres !!!
Estes caracteres se encontram na tabela asc, e não ocupam todas as 255 possiçoes possiveis com 1 byte. Haja visto que no windows são 16 bits e não 8... de possiveis chars.
quando você quer escrever um byte com o valor humano 32, você na verdade tem que escrever a string '32'.

"String"óóóóó!!!!!!!!! perai fabim como assim ?

hehehe...!! Mané !!!! Fabim diz:

Um valor digital, pode ser representando em linguagem de máquina de varias formas.
Imagine o seguinte valor em linguagem de maquina.
00001111
Este valor = ao valor de lógica humana de valor 15...
Os 0´s e 1´s representados a cima, são valor binario, linguagem de maquina.

Para que os humanos consigam interpretar melhor o valor, ele pode ser representando por strings, sendo estar como exemplo.
'"0x0f" => hex
"15" => dec

Observe que, quando esta entre " ", são strings, ou seja representação gráfica alfanumerica de um valor logico de maquina.

Para se representar alfanumericamente"não sei se existe a palavra", você precisa pegar as "letras", dentro da tabela ASCII.

http://www.sabereletronica.com.br/files ... RS-232.PDF

Observe a tabela.:

Veja que as representações graficas ASCII, referente a numeros fican entre o valor lógico: 48 e 57 Decimal>:
Equivale a dizer, que se você pegar um byte, digamos com o valor 49, e gravar no sd card, quando abrir o cartão no pc, vai aparecer a representação grafica "1", isso mesmo, o numero 1..


Observe sobre as letras!! a representação gráfica do alfabéto minusculo fica entre o valor decial <97 e 122>. "a ,...., z" !!!
Equivale a dizer, que se você pegar um byte, digamos com o valor 98, e gravar no sd card, quando abrir o cartão no pc, vai aparecer a representação grafica "b", isso mesmo, a letra b....

Agora vem o seguinte.
Suponha que você esteja gravando o valor de inteiros, para 32 bits.
O int para uC32bits = 32 bits, diferente de pic, e outros que é de 16 bits.

veja o valor 0xFEFA8127 hex, é uma representação logica da int, isso é " ", "0xFEFA8127", linguagem de humano!!!
Lembre-se que a int é formado por 4 bytes, que dariam 4 strings, ou 4 representações graficas da tabela ASCII.

vamos separar.
FEFA8127

Código: Selecionar todos
--------hex-----dec------asc
byte 3   FE    =   254   =   "■"
byte 2   FA    =   250   =   "ú"
byte 1   81    =   129   =   "°" ou "ü" -depende do editor
byte 0   27    =    39    =   " ' "
 

Aquele primeiro quadradinho, informa que o editor, ou display, ou seja lá o que, não consegue representar o caracter da tabela asc, solicitado pelo valor passado.


Ai, cansei. preciso continuar ?
Mano, ve só.
Sou responsável pelo que escrevo!!! E não pelo que você entende !!!
fabim
Dword
 
Mensagens: 5001
Registrado em: 16 Out 2006 10:18
Localização: aqui uái!!!?

Mensagempor cortex » 03 Nov 2010 09:08

ahhhhhnnnnn tendi fabim!!!

então eu to conseguindo escrever, é o editor que não consegue interpretar, pra isso tenho que utilizar o esquema de conversão +0x30!!

vamos lá então, vou ver o que eu consigo fazer aqui!!
cortex
Byte
 
Mensagens: 121
Registrado em: 27 Out 2010 10:32

Mensagempor jonowsky » 03 Nov 2010 09:11

Acho que preciso rever minha didática

:cry:
Avatar do usuário
jonowsky
Byte
 
Mensagens: 148
Registrado em: 26 Mai 2009 15:18
Localização: Rio Grande do Sul

Mensagempor cortex » 07 Dez 2010 10:38

ainda estou meio perdido na escrita do sd card!

na função da biblioteca está assim:


EmbeddedFileSystem efs;
File file_r,file_w;
esint8 err;
euint8 *buffer = " teste sd card";

err = file_fopen(&file_w,&efs.myFs,"testfile.txt",'a');
err = file_write(&file_w,strlen (buffer),buffer) == strlen(buffer);

até ai blz, escrevo o que está entre aspas no ponteiro buffer, ta escrevendo blz, abro no bloco de notas do computador e ta escrito teste sd card, ok! mas eu queria escrever o valor que está em uma variavel, é possivel fazer isso?

por exemplo

esint8 err;
int x=10;
euint8 *buffer = 'x';

err = file_fopen(&file_w,&efs.myFs,"testfile.txt",'a');
err = file_write(&file_w,strlen (buffer),buffer) == strlen(buffer);

é possivel fazer algo parecido? estou tentando fazer um data loger!
cortex
Byte
 
Mensagens: 121
Registrado em: 27 Out 2010 10:32

Mensagempor cortex » 07 Dez 2010 10:40

ainda estou meio perdido na escrita do sd card!

na função da biblioteca está assim:


EmbeddedFileSystem efs;
File file_r,file_w;
esint8 err;
euint8 *buffer = " teste sd card";

err = file_fopen(&file_w,&efs.myFs,"testfile.txt",'a');
err = file_write(&file_w,strlen (buffer),buffer) == strlen(buffer);

até ai blz, escrevo o que está entre aspas no ponteiro buffer, ta escrevendo blz, abro no bloco de notas do computador e ta escrito teste sd card, ok! mas eu queria escrever o valor que está em uma variavel, é possivel fazer isso?

por exemplo

esint8 err;
int x=10;
euint8 *buffer = 'x';

err = file_fopen(&file_w,&efs.myFs,"testfile.txt",'a');
err = file_write(&file_w,strlen (buffer),buffer) == strlen(buffer);

é possivel fazer algo parecido? estou tentando fazer um data loger!
cortex
Byte
 
Mensagens: 121
Registrado em: 27 Out 2010 10:32

Mensagempor cortex » 07 Dez 2010 10:43

ainda estou meio perdido na escrita do sd card!

na função da biblioteca está assim:


EmbeddedFileSystem efs;
File file_r,file_w;
esint8 err;
euint8 *buffer = " teste sd card";

err = file_fopen(&file_w,&efs.myFs,"testfile.txt",'a');
err = file_write(&file_w,strlen (buffer),buffer) == strlen(buffer);

até ai blz, escrevo o que está entre aspas no ponteiro buffer, ta escrevendo blz, abro no bloco de notas do computador e ta escrito teste sd card, ok! mas eu queria escrever o valor que está em uma variavel, é possivel fazer isso?

por exemplo

esint8 err;
int x=10;
euint8 *buffer = 'x';

err = file_fopen(&file_w,&efs.myFs,"testfile.txt",'a');
err = file_write(&file_w,strlen (buffer),buffer) == strlen(buffer);

é possivel fazer algo parecido? estou tentando fazer um data loger!
cortex
Byte
 
Mensagens: 121
Registrado em: 27 Out 2010 10:32

Mensagempor cortex » 07 Dez 2010 10:45

ainda estou meio perdido na escrita do sd card!

na função da biblioteca está assim:


EmbeddedFileSystem efs;
File file_r,file_w;
esint8 err;
euint8 *buffer = " teste sd card";

err = file_fopen(&file_w,&efs.myFs,"testfile.txt",'a');
err = file_write(&file_w,strlen (buffer),buffer) == strlen(buffer);

até ai blz, escrevo o que está entre aspas no ponteiro buffer, ta escrevendo blz, abro no bloco de notas do computador e ta escrito teste sd card, ok! mas eu queria escrever o valor que está em uma variavel, é possivel fazer isso?

por exemplo

esint8 err;
int x=10;
euint8 *buffer = 'x';

err = file_fopen(&file_w,&efs.myFs,"testfile.txt",'a');
err = file_write(&file_w,strlen (buffer),buffer) == strlen(buffer);

é possivel fazer algo parecido? estou tentando fazer um data loger!
cortex
Byte
 
Mensagens: 121
Registrado em: 27 Out 2010 10:32

Mensagempor cortex » 07 Dez 2010 10:47

ainda estou meio perdido na escrita do sd card!

na função da biblioteca está assim:


EmbeddedFileSystem efs;
File file_r,file_w;
esint8 err;
euint8 *buffer = " teste sd card";

err = file_fopen(&file_w,&efs.myFs,"testfile.txt",'a');
err = file_write(&file_w,strlen (buffer),buffer) == strlen(buffer);

até ai blz, escrevo o que está entre aspas no ponteiro buffer, ta escrevendo blz, abro no bloco de notas do computador e ta escrito teste sd card, ok! mas eu queria escrever o valor que está em uma variavel, é possivel fazer isso?

por exemplo

esint8 err;
int x=10;
euint8 *buffer = 'x';

err = file_fopen(&file_w,&efs.myFs,"testfile.txt",'a');
err = file_write(&file_w,strlen (buffer),buffer) == strlen(buffer);

é possivel fazer algo parecido? estou tentando fazer um data loger!
cortex
Byte
 
Mensagens: 121
Registrado em: 27 Out 2010 10:32

Mensagempor cortex » 07 Dez 2010 10:51

ainda estou meio perdido na escrita do sd card!

na função da biblioteca está assim:


EmbeddedFileSystem efs;
File file_r,file_w;
esint8 err;
euint8 *buffer = " teste sd card";

err = file_fopen(&file_w,&efs.myFs,"testfile.txt",'a');
err = file_write(&file_w,strlen (buffer),buffer) == strlen(buffer);

até ai blz, escrevo o que está entre aspas no ponteiro buffer, ta escrevendo blz, abro no bloco de notas do computador e ta escrito teste sd card, ok! mas eu queria escrever o valor que está em uma variavel, é possivel fazer isso?

por exemplo

esint8 err;
int x=10;
euint8 *buffer = 'x';

err = file_fopen(&file_w,&efs.myFs,"testfile.txt",'a');
err = file_write(&file_w,strlen (buffer),buffer) == strlen(buffer);

é possivel fazer algo parecido? estou tentando fazer um data loger!
cortex
Byte
 
Mensagens: 121
Registrado em: 27 Out 2010 10:32

Mensagempor cortex » 07 Dez 2010 10:53

ainda estou meio perdido na escrita do sd card!

na função da biblioteca está assim:


EmbeddedFileSystem efs;
File file_r,file_w;
esint8 err;
euint8 *buffer = " teste sd card";

err = file_fopen(&file_w,&efs.myFs,"testfile.txt",'a');
err = file_write(&file_w,strlen (buffer),buffer) == strlen(buffer);

até ai blz, escrevo o que está entre aspas no ponteiro buffer, ta escrevendo blz, abro no bloco de notas do computador e ta escrito teste sd card, ok! mas eu queria escrever o valor que está em uma variavel, é possivel fazer isso?

por exemplo

esint8 err;
int x=10;
euint8 *buffer = 'x';

err = file_fopen(&file_w,&efs.myFs,"testfile.txt",'a');
err = file_write(&file_w,strlen (buffer),buffer) == strlen(buffer);

é possivel fazer algo parecido? estou tentando fazer um data loger!
cortex
Byte
 
Mensagens: 121
Registrado em: 27 Out 2010 10:32

AnteriorPróximo

Voltar para ARM

Quem está online

Usuários navegando neste fórum: Nenhum usuário registrado e 1 visitante

cron

x