Passando valores ascii

Discussão sobre linux para plataformas Intel x86 ou x64 (PC)

Moderadores: 51, guest2003, Renie, gpenga

Passando valores ascii

Mensagempor MTC » 15 Out 2008 15:24

Seguinte, montei uma interface com ADC e Pic, e recebo os dados via RS232 no linux, programado em C. Vou armazenando os dados na memoria e qdo saio do programa ai gravo em arquivo ascii.

To precisando conforme os dados vao sendo adquiridos ir mostrando eles em um grafico do tipo XY, e pra isso quero usar SW pronto, tipo gnuplot, xpplot ou xygraph, ou algum outro.

O probrema em questao é: como ir passando os dados conforme vao sendo coletados para o segundo programa. Alguns destes SWs tem a opcao de ler arquivo em intervalos para acompanhar o crescimento do mesmo, mas ai vem outro problema: tenho que ler cada valor, abrir o arquivo ascii e fechar ele, nisso perco tempo (a amostragem do dac eh de 1khz) e tive uns erros de acesso pelo arquivo estar sendo usado pela aquisicao de dados.

Tem alguma opcao de ir passando os valores lidos pra alguma variavel de ambiente do shell, tipo: ECHO $VARIAVEL ????


Alguem tem alguma ideia????

ps.: tem q usar um SW de grafico pronto, nada de perder tempo, pode ser xlib, gtk, perl.

[]1s
MTC
Byte
 
Mensagens: 159
Registrado em: 20 Out 2006 18:13

Mensagempor joao » 15 Out 2008 16:28

simples...

Use a linguagem de programaçào expect!
Com ela vc pode rodar um programa qualquer desses de gráfico e ficar lendo uma variavel local ou arquivo e passar para o programa como vc estivesse digitando no teclado o valor.

Existe também o perl expect que faz a mesma coisa, mas em perl. Eu aconselho a usar esta última, pois é bem mais simples de se usar e mais entendível o código. Além do que, a parte de leitura do arquivo é bem simples e vc pode fazer algo multithead com ele! Enquanto um carinha le, o outro escreve no programa.

Tente fazer um prog e dai se tiver dúvidas, fale comigo. Só não posso lhe dar um programa pronto porque estou meio sem tempo, mas acho que em menos de 2 dias vc termina isso.

[]'s
Avatar do usuário
joao
Byte
 
Mensagens: 463
Registrado em: 17 Out 2006 08:21

Mensagempor MTC » 16 Out 2008 08:10

Oi Joao, realmente eh bem interessante a ling expect, da pra automatizar um aporrada de coisas. No momento achei meio trabalhoso aprender perl pra tentar resolver.
Na minha aplicacao, to precisando fazer 2 progs em C se comunicarem unidirecionalmente. O problema principal é poder abrir e fechar para leitura/escrita um arquivo ascii sem sincronizacao entres os sws.

To vendo alguma coisa em Sockets para isso. Parece complicado, mas vou tentar implementar.

[ ]`s
MTC
Byte
 
Mensagens: 159
Registrado em: 20 Out 2006 18:13

Mensagempor joao » 16 Out 2008 10:28

Ola MTC,

Eu ainda recomendo perl para fazer isso...
Ao invés de sockets, vc pode usar memória compartilhada ou arquivos compartilhados, com pemrissão de leitura/escrita, o que significa que se alguém está lendo/escrevendo, o outro não pode escrever/ler.

Perl é muito facil de aprender!

Vc disse que o problema é a sincronização entre os dois sws, mas como vc fará para passar esses valores para o GNUPlot por exemplo? Só com expect da vida ou algo parecido...

De qualquer maneira, estude semáforos para resolver o seu problema de sinalização entre leitura e escrita. Porque o é com isso que vc resolve. Vc terá que ter memória compartilhada para fazer isso.

Em perl tem pronto... :roll:

Ok, ok, sei que to te pentenhando para usar perl, mas se vai fazer em C, tenta fazer ai e qualquer dúvida pergunta ai que tentamos achar mais sobre o assunto. Por sinal, vc pode usar o comando fork no seu programa para fazer esses "dois" programas que vc disse. Com o fork vc cria duas "threads" mas sendo o mesmo processo. E dai fica fácil trabalhar com memória compartilhada nele.

[]'s
Avatar do usuário
joao
Byte
 
Mensagens: 463
Registrado em: 17 Out 2006 08:21

Mensagempor xultz » 16 Out 2008 11:35

Sockets pod eparecer complicado, mas acredito que seja o caminho mais adequado para teu programa. Depois você pode até brincar de fazer os programas se conversarem via internet :)
98% das vezes estou certo, e não estou nem aí pros outros 3%.
Avatar do usuário
xultz
Dword
 
Mensagens: 3001
Registrado em: 13 Out 2006 18:41
Localização: Curitiba

Mensagempor msamsoniuk » 16 Out 2008 12:35

MTC escreveu:Oi Joao, realmente eh bem interessante a ling expect, da pra automatizar um aporrada de coisas. No momento achei meio trabalhoso aprender perl pra tentar resolver.
Na minha aplicacao, to precisando fazer 2 progs em C se comunicarem unidirecionalmente. O problema principal é poder abrir e fechar para leitura/escrita um arquivo ascii sem sincronizacao entres os sws.

To vendo alguma coisa em Sockets para isso. Parece complicado, mas vou tentar implementar.

[ ]`s


sockets eh simplao! basta vc ser um cara modular e usar o netcat:

nc -s -p 8000 | programa_destino &
programa_fonte | nc localhost -p 8000 &


se vc quiser, pode chamar de dentro mesmo com popen(), daih mantem stdin e stdout para outros fins.

outra opcao eh usar uma fifo:

mkfifo fofo
programa_destino < fofo &
programa_origen > fofo &

e fechou! se quiser chamar de dentro, usa fopen().
Avatar do usuário
msamsoniuk
Dword
 
Mensagens: 2935
Registrado em: 13 Out 2006 18:04


Voltar para Linux ( x86 ou x64 )

Quem está online

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

x