Ajuda em C parte 2

corduroy

Membro
Boa tarde,

Continuo com 1 problema para guardar dados que recebo da porta série para ficheiro. Usei algumas indicaçoes que me deram aqui no forum acerca de ficheiros, mas nao sei se usei isto correctamente. Vou deixar o codigo para que alguem me ajude por favor:

==========================================================

#include <bios.h>
#include <conio.h>
#include <stdio.h>
#include <stdlib.h>

#define COM2 1
#define DATA_READY 0x100
#define TRUE 1
#define FALSE 0

#define SETTINGS ( 0x16 | 0x00 | 0x03 | 0x00)

int main(void)


{ int in, out, status, DONE = FALSE;


FILE *pf;

bioscom(0, SETTINGS, COM2);/* inicializacao*/
printf("... BIOSCOM [ESC] to exit ...\n");
while (!DONE)
{
status = bioscom(3, 0, COM2);/*ha dados para mostrar?*/
if (status & DATA_READY) /*bit 8 a 1 ?*/
if ((out = bioscom(2, 0, COM2) & 0x7F) != 0)


printf("%x", out);

/*Escrever para Ficheiro*/

if((pf = fopen("arquivo.txt", "w")) == NULL) /* Abre arquivo para escrita */
{
printf("Erro na abertura do arquivo");
exit(1);
}
if(fwrite(&out, sizeof(int), 1,pf) != 1) /* Escreve os dados de out */
printf("Erro na escrita do arquivo");
fclose(pf); /* Fecha o arquivo */
/*Final de escrever ficheiro*/


if (kbhit()) /* se qualquer tecla pressionada*/
{
if ((in = getch()) == '\x1B') /* se a tecla for esc*/
DONE = TRUE;/* interrompa-se*/
bioscom(1, in, COM2); /*avisa o transmit.exe*/
}
}

return 0;
}

================================================
Portanto, preciso de guardar os dados devolvidos pelo printf (que coloquei a bold) atraves da variavel out. Os dados sao recebidos em hexadecimal.

Fico muito grato a quem me puder ajudar.

1 abraço.
 
corduroy disse:
if(fwrite(&out, sizeof(int), 1,pf) != 1) /* Escreve os dados de out */
printf("Erro na escrita do arquivo");
fclose(pf); /* Fecha o arquivo */

penso que te referes a este pedaço de código. mas axo que em vez de testares de o fwrite é = a 1 tenta = a -1. Porque tu estas a por que se a gravação for sucesso, diz erro na escrita do ficheiro. De resto ano tou a ver problema.
Até axo k nao necessitas de testar esse fwrite pk se der algum erro ao gravar o compilador já te avisa. Mas diz alguma coisa.
 
Bom dia,

Caro Hipnoted, muito obrigado na mesma mas nao resultou...

Poderá ter a ver com má declaraçao das variáveis? Outra hipotese que me apontaram, foi a de guardar out num array de dados e so dps transpor para ficheiro. Como sou mt "verde" nisto, nao faço ideia como trabalhar com arrays. Alguem me pode ajudar?

Muito obrigado e um abraço
 
Pois.... Para quem é um pouco verde em C, metes-te numa programação muito avançada...

E sei umas coisas em C, bastantes, mas o código que estás a tentar escrever é para profissionais com muitos e completos conhecimentos em C e algo mais.

Mas se voltares a precisar diz.
 
Pois... Não é nada facil, mas faz parte do meu projecto de final de curso e tenho mm que desenvolver este codigo para poder avançar...:'(

Substituí o fwrite por 1 fprintf e ja guarda os valores de out no ficheiro arquivo.txt.

Outra coisa que ainda nao consegui perceber é a conjunção em if ((out = bioscom(2, 0, COM2) & 0x7F) != 0).

Alguem sabe para que serve o valor 0x7F?
 
Outra coisa que ainda nao consegui perceber é a conjunção em if ((out = bioscom(2, 0, COM2) & 0x7F) != 0).

Ver se os ultimos 7 bits da linha estao a 0 e atribui à variavel out o valor devolvido pela funcao bioscom


Comeca por tentar fazer uma coisa mt simples, em vez de guardares num ficheiro tenta enviar para o ecra os dados.


Depois de fazeres isso em condicoes aconselho-te a leres por ai alguns exemplos:
http://www.phanderson.com/files/file_write.html

Comeca por coisas mais simples e depois vai aumentando o nivel de dificuldade mas isso q tas a fazer, no meu entender nao e' assim tao complicado como ja foi dito aqui na thread
 
Boa tarde,

Muito obrigado a todos pela ajuda disponibilizada. Desisti do C, comecei a estudar umas coisas em Java e consegui elaborar o programa que precisava para comunicar com a porta série. Revelou-se bastante mais simples do que estava a ser com C.... De momento o meu problema encontra-se resolvido.
De qualquer maneira e mais uma vez, muito obrigado pela ajuda.
Espero poder retribuir de alguma forma.

:banjump:Um abraço!
 
Back
Topo