Conversão de PRG para HEX, é possível?

Fórum sobre outras linguagens de programação.

Moderador: Moderadores

MauricioPF
Usuário Nível 1
Usuário Nível 1
Mensagens: 5
Registrado em: 16 Abr 2013 15:33
Localização: Araguaina

Conversão de PRG para HEX, é possível?

Mensagem por MauricioPF »

Pessoal sou bom conhecedor da linguagem Clipper e razoavel em C.

Sei que a conversão diretamente do C para o HEX é relativamente simples dependendo apenas de determinados compiladores.

Minha pergunta é:
Existe algum compilador que converte o Clipper (PRG) para o "C" e dêste para o HEX?

O meu objetivo final é gravar o programa HEX em microcontrolador destinado a automatização de torno mecânico.

O usual é escrever estes programas em "C", converte-los para HEX e grava-los no microcontrolador; mas, isso tem-me causado um baita sufoco, pois como disse, não domino o "C" como domino o Clipper... Daí a minha necessidade urgente da solução em tela.

Não sei se me expliquei bem. Fico à disposição dos amigos para outras informações que se fizerem necessárias.
Obrigado
Avatar do usuário
Pablo César
Usuário Nível 7
Usuário Nível 7
Mensagens: 5312
Registrado em: 31 Mai 2006 10:22
Localização: Curitiba - Paraná

Conversão de PRG para HEX, é possível?

Mensagem por Pablo César »

Olá Mauricio, seja bem vindo ao fórum !

Pelo que eu sei o compilado Harbour transforma o código xBase (código Clipper por assim dizer) em PCode. E utiliza dentro do código que gera parte em linguagem C.

Mas eu não entendi direito quanto ao converter em Hexadecimal. Porque converter o código em Hexadecimal não é o suficiente e sim a interpretação em linguagem de máquina para Hexadecimal ou binário que é o mais acertado em dizer.

No entanto estou curioso em saber qual seria a sua ideia para evitar a programação na liguagem em xBase.

Hà tempos atrás eu tinha visto outra forma de programação, mas não lembro direito para buscar e apresentar pra vocês.
Um clip-abraço !

Pablo César Arrascaeta
Compartilhe suas dúvidas e soluções com todos os colegas aqui do fórum.
Evite enviar as dúvidas técnicas por MPs ou eMails, assim todos iremos beneficiar-nos.
MauricioPF
Usuário Nível 1
Usuário Nível 1
Mensagens: 5
Registrado em: 16 Abr 2013 15:33
Localização: Araguaina

Conversão de PRG para HEX, é possível?

Mensagem por MauricioPF »

Obrigado, Pablo Cesar pela atenção.

Vou tentar melhorar minha exposição. Preciso fazer o seguinte:

1. Criar um programa qualquer em Clipper, por exemplo: GIRAR.PRG. Neste programa crio um loop para simular o giro de um motor através de incremento numérico;
2. Em seguida converteria o GIRAR.PRG em GIRAR.C através de um conversor que ando a procurar;
3. Finalmente, nova conversão, desta vez do GIRAR.C para GIRAR.HEX que é a linguagem de máquina referida por você.

Este programa em linguagem de máquina seria transferido para o MICROCHIP de um dispositivo eletrônico ligado a um torno mecânico que, por sua vez, realizaria o trabalho programado inicialmente em Clipper! Isto já está sendo feito, porém tenho que modificar o programa constantemente conforme o trabalho a realizar;

Como disse, sou conhecedor da programação em Clipper tendo criado há anos um sistema completo de contabilidade para minha empresa – oficina mecânica – que “roda” até hoje sem problemas.

Agora, automatizando um torno mecânico e outra máquinas em pleno funcionamento, com programas escritos em “C” encontro dificuldades para criar rotinas que as considero fáceis em Clipper, por isso, estou a procurar um meio fazê-lo com a ferramenta que domino razoavelmente bem.

Eis o motivo de minha busca. Programei em Clipper puro mas não conheço as novidades existentes. Gostaria de entender o que o xBase faz e como faz para gerar o módulo “C” e daí para a linguagem de máquina é simples: o programa PIC CCS faz isso fácil, fácil.

Fico no aguardo de novidades colocando-me a disposição para novas informações.
Abrçs.
Mauricio
Avatar do usuário
Pablo César
Usuário Nível 7
Usuário Nível 7
Mensagens: 5312
Registrado em: 31 Mai 2006 10:22
Localização: Curitiba - Paraná

Conversão de PRG para HEX, é possível?

Mensagem por Pablo César »

Eu tenho entendido que para transferir um programa para um MICROSHIP, teria que ser algo bem simples e que seria feito em uma linguagem de baixo nível. Lingaugem C é baixo nível mas nem tanto, você precisaria de Assambler algo assim. Pois Clipper e Harbour é de Alto nível e não iria adianta tentar gravar o programa no MICROSHIP, seja pelo espeaço e seja pela necessidade de processamento. Portanto teria que ser uma linguagem de baixo nível mesmo. Não vejo solução com Harbou, Clipper nem em C.
Um clip-abraço !

Pablo César Arrascaeta
Compartilhe suas dúvidas e soluções com todos os colegas aqui do fórum.
Evite enviar as dúvidas técnicas por MPs ou eMails, assim todos iremos beneficiar-nos.
Avatar do usuário
fladimir
Colaborador
Colaborador
Mensagens: 2445
Registrado em: 15 Nov 2006 20:21

Conversão de PRG para HEX, é possível?

Mensagem por fladimir »

Colega eu fiz um código chamado gira.prg pelo q eu entendi do teu problema assim:

Código: Selecionar todos

PROC MAIN
   n:=1
   FOR n:=1 to 1000
   NEXT
RETURN NIL
Depois eu compilei assim: hbmk2 -inc gira.prg
Depois eu abri o arquivo q ele gera em C q eu não entendo e o conteúdo é esse aki:

Código: Selecionar todos

/*
 * Harbour 2.1.0rc2 (Rev. 16438)
 * Microsoft Visual C++ 15.0.30729 (32-bit)
 * Generated C source from "gira.prg"
 */

#include "hbvmpub.h"
#include "hbinit.h"


HB_FUNC( MAIN );
HB_FUNC_EXTERN( QOUT );


HB_INIT_SYMBOLS_BEGIN( hb_vm_SymbolInit_GIRA )
{ "MAIN", {HB_FS_PUBLIC | HB_FS_FIRST | HB_FS_LOCAL}, {HB_FUNCNAME( MAIN )}, NULL },
{ "N", {HB_FS_PUBLIC | HB_FS_MEMVAR}, {NULL}, NULL },
{ "QOUT", {HB_FS_PUBLIC}, {HB_FUNCNAME( QOUT )}, NULL }
HB_INIT_SYMBOLS_EX_END( hb_vm_SymbolInit_GIRA, "gira.prg", 0x0, 0x0003 )

#if defined( HB_PRAGMA_STARTUP )
   #pragma startup hb_vm_SymbolInit_GIRA
#elif defined( HB_DATASEG_STARTUP )
   #define HB_DATASEG_BODY    HB_DATASEG_FUNC( hb_vm_SymbolInit_GIRA )
   #include "hbiniseg.h"
#endif

HB_FUNC( MAIN )
{
	static const HB_BYTE pcode[] =
	{
		36,2,0,122,83,1,0,36,3,0,122,165,83,1,
		0,25,24,36,4,0,176,2,0,109,1,0,20,1,
		36,3,0,109,1,0,23,21,83,1,0,93,232,3,
		15,28,230,36,6,0,100,110,7
	};

	hb_vmExecute( pcode, symbols );
}
Agora se isso resolve em C já ta pronto, agora teria q algum especialista em C analisar...

Depois se da pra jogar isso pra HEX seria outro passo, mas primeiro temos q avaliar se a parte do C acima esta Ok...

Se estiver vamos ver a outra etapa ai depois de conseguirmos vc testa se dará certo e fala pra gente... (fiquei curioso)

[]´s
Sun Tzu há mais de três mil anos cita nas epígrafes de seu livro “A Arte da Guerra“:

“Concentre-se nos pontos fortes, reconheça as fraquezas, agarre as oportunidades e proteja-se contra as ameaças”.
“Se não é vantajoso, nunca envie suas tropas; se não lhe rende ganhos, nunca utilize seus homens; se não é uma situação perigosa, nunca lute uma batalha precipitada”
.


Até 2017    Desktop Console [ Legado ] Harbour | MinGW | DBF | CDX | FastReport | MySQL


Novos Projetos:

   Desktop Visual           Windev Desktop
   Celular Android/iOS   Windev Mobile
   WEB                            Windev Web


Sejamos gratos a Deus.
Avatar do usuário
Maligno
Membro Master
Membro Master
Mensagens: 6398
Registrado em: 06 Jul 2004 01:40
Localização: Londrina/PR

Conversão de PRG para HEX, é possível?

Mensagem por Maligno »

O compilador [x]Harbour apenas converte o código PRG para uma série de chamadas de função para empilhamento de opCodes que, posteriormente, são executados pela VM. Note a chamada da função hb_vmExecute(). Não existe conversão PRG para C. Havia, no tempo do guaraná com rolha, um conversor do tipo. Se não me falha a memória, chamava-se CodeBase. E funcionava, conforme relatos de alguns dinossauros que à época o testaram.

No caso do colega, a questão que ele tem é simples de responder: não dá. O HEX no caso é um código objeto inteligível para um certo processador, o que está no torno. O melhor caminho é usar C mesmo e compilar com o compilador que foi especialmente preparado para esse chip. A não quer, claro, que haja alguém disposto a criar um compilador XBase para esse chip.

O mais importante: mesmo que o OP esteja mais íntimo com XBase do que com C, é aconselhável aprender C, não só pelo compilador que já existe, mas também por um outro detalhe: nunca um torno vai usar um DBF ou coisa do tipo. Então, o que resta a usar do XBase é apenas a parte de estruturamento de código discreto. Então, na minha opinião, o melhor caminho é ganhar mais intimidade com C.
[]'s
Maligno
---
Não respondo questões técnicas através de MP ou eMail. Não insista.
As dúvidas devem ser postadas no fórum. Desta forma, todos poderão
se beneficiar das respostas.

---
Se um dia precisar de uma transfusão de sangue você perceberá como
é importante a figura do doador. Procure o hemocentro de sua cidade e
se informe sobre a doação de sangue, plaquetas e medula óssea. Doe!
Avatar do usuário
Duda 'Sgluber'
Usuário Nível 3
Usuário Nível 3
Mensagens: 148
Registrado em: 11 Mar 2013 21:57
Localização: Interior de São Paulo

Conversão de PRG para HEX, é possível?

Mensagem por Duda 'Sgluber' »

Maligno escreveu:O compilador [x]Harbour apenas converte o código PRG para uma série de chamadas de função para empilhamento de opCodes que, posteriormente, são executados pela VM. Note a chamada da função hb_vmExecute(). Não existe conversão PRG para C.
...
Maligno, uma curiosidade minha: o compilador Clipper tb faz algo similar ao q faz o compilador [x]Harbour?
Comecei pra valer nos tempos do MSX e nunca mais parei... grande caminhada! :-)
MauricioPF
Usuário Nível 1
Usuário Nível 1
Mensagens: 5
Registrado em: 16 Abr 2013 15:33
Localização: Araguaina

Conversão de PRG para HEX, é possível?

Mensagem por MauricioPF »

Aproveito o programa enviado pelo Fladimir para explicar meu objetivo.

1° PASSO:
Usando o seu exemplo em Clipper que conta 1 a 1000 denominado -> GIRA.PRG;
-------------------------------------------------------------------------

Código: Selecionar todos

PROC MAIN
 
n = 1

 FOR n:=1 to 1000

 NEXT

RETURN NIL
2° PASSO:
convertí o GIRA.PRG para -> GIRA.C; (não tenho o conversor, fi-lo manualmente)
-----------------------------------
Ficou assim:

Código: Selecionar todos

#include <stdio.h>

int main ()

{

int i;

for (i = 1; i <= 1000; i++)

return 0;

}
3°PASSO
Convertí GIRA.C para linguagem de maquina com o aplicativo Arduino para o -> GIRA.HEX;
----------------------------------------------------------------------------------------------------------
Este é o programa em linguagem de máquina que conta de 1 a 1000 oriundo do programa
do Fladimir. Este programa final seria gravado no microchip da maquina.

Ficou assim:

Código: Selecionar todos

:100000000C9434000C9451000C9451000C94510049
:100010000C9451000C9451000C9451000C9451001C
:100020000C9451000C9451000C9451000C9451000C
:100030000C9451000C9451000C9451000C945100FC
:100040000C9451000C9451000C9451000C945100EC
:100050000C9451000C9451000C9451000C945100DC
:100060000C9451000C94510011241FBECFEFD8E026
:10007000DEBFCDBF11E0A0E0B1E0E0EBF0E002C0F8
:1000800005900D92A030B107D9F711E0A0E0B1E0E2
:1000900001C01D92A030B107E1F70E9453000C94FB
:1000A00056000C94000080E090E00895F894FFCF93
:00000001FF
4° PASSO FINAL:
Gravar o GIRA.HEX no microchip contidO na placa eletronica da máquina:
----------------------------------------------------------------------
Não é necessário banco de dados e a gravação é feita por processo eletronico.

Os motores da maquina "leriam" as gravações contidas no CHIP e as transformariam
em movimentos mecanicos.

Este não é um processo inédito. Trata-se de Robótica e/ou Mecatrônica que utilizamos
em quase tudo à nossa volta tais como: portões eletronicos, celulares, maquinas de lavar
roupa, semáfaros de transito, torno CNC, microondas, automação residencial e até no
veículo estacionado em Marte!

Esta é a área em que atuo - de forma autodidata - no momento, no entanto, para programar
em C dependo de programadores experientes nesta linguagem, o que não é facil conseguir
no meio em que vivo - Araguaina-TO-, motivo pelo qual estou à procura de um conversor de Clipper para C.

Foi sugerido, com a autoridade que lhes são peculiar, dever estudar a linguagem C com
mais afinco; e, é o que estou a fazer no momento, no entanto, o Clipper seria um excelente
atalho ao meu propósito, pois os programas a serem elaborados seriam bem mais complexos
além de conterem interface com recursos eletronicos...

O C gerado pelo Harbour, enviado pelo Fladimir, clareou bastante, mas não serve ao meu
propósito, no entanto, estou estudando-o para a consecução de mais luz em meu complicado
projeto.

Agradeço a todos informando ter conseguido aqui informações valiosas ao meu objetivo,
inclusive descobrí o site do tempo do "guaraná com rôlha" - boa essa - que produz o CodeBase.
Editado pela última vez por rochinha em 21 Abr 2013 02:45, em um total de 1 vez.
Razão: Mensagem editada para colocar a tag [ code ]<br>Veja como utilizar esta tag: http://www.pctoledo.com.br/forum/faq.php?mode=bbcode#f2r1
Avatar do usuário
Maligno
Membro Master
Membro Master
Mensagens: 6398
Registrado em: 06 Jul 2004 01:40
Localização: Londrina/PR

Conversão de PRG para HEX, é possível?

Mensagem por Maligno »

Duda 'Sgluber' escreveu:Maligno, uma curiosidade minha: o compilador Clipper tb faz algo similar ao q faz o compilador [x]Harbour?
Sim, há uma conversão da mesma forma, de XBase para uma pilha de opCodes que depois também serão executados pela VM. Uma vantagem opcional do [x]Harbour é a possibilidade de escrever código C puro embutido dentro do próprio PRG. Aí, neste caso, claro, não há conversão.
[]'s
Maligno
---
Não respondo questões técnicas através de MP ou eMail. Não insista.
As dúvidas devem ser postadas no fórum. Desta forma, todos poderão
se beneficiar das respostas.

---
Se um dia precisar de uma transfusão de sangue você perceberá como
é importante a figura do doador. Procure o hemocentro de sua cidade e
se informe sobre a doação de sangue, plaquetas e medula óssea. Doe!
Avatar do usuário
Maligno
Membro Master
Membro Master
Mensagens: 6398
Registrado em: 06 Jul 2004 01:40
Localização: Londrina/PR

Conversão de PRG para HEX, é possível?

Mensagem por Maligno »

para programar em C dependo de programadores experientes nesta linguagem, o que não é facil conseguir no meio em que vivo - Araguaina-TO-, motivo pelo qual estou à procura de um conversor de Clipper para C.
É como eu havia comentado: se for para usar o Clipper como ponte, acho que é melhor esquecer. Conquiste sua independência de outros profissionais, aprendendo C, que é uma linguagem relativamente fácil. Esse argumento se fortalece ainda mais se você tem a intenção de se desenvolver para trabalhar mais nesse segmento que, normalmente, exige o conhecimento de linguagens como C. Logo, XBase, nessa área, não tem futuro algum.
[]'s
Maligno
---
Não respondo questões técnicas através de MP ou eMail. Não insista.
As dúvidas devem ser postadas no fórum. Desta forma, todos poderão
se beneficiar das respostas.

---
Se um dia precisar de uma transfusão de sangue você perceberá como
é importante a figura do doador. Procure o hemocentro de sua cidade e
se informe sobre a doação de sangue, plaquetas e medula óssea. Doe!
Avatar do usuário
Duda 'Sgluber'
Usuário Nível 3
Usuário Nível 3
Mensagens: 148
Registrado em: 11 Mar 2013 21:57
Localização: Interior de São Paulo

Conversão de PRG para HEX, é possível?

Mensagem por Duda 'Sgluber' »

Maligno escreveu:
Duda 'Sgluber' escreveu:Maligno, uma curiosidade minha: o compilador Clipper tb faz algo similar ao q faz o compilador [x]Harbour?
Sim, há uma conversão da mesma forma, de XBase para uma pilha de opCodes que depois também serão executados pela VM. Uma vantagem opcional do [x]Harbour é a possibilidade de escrever código C puro embutido dentro do próprio PRG. Aí, neste caso, claro, não há conversão.
Imagem
Comecei pra valer nos tempos do MSX e nunca mais parei... grande caminhada! :-)
Avatar do usuário
rochinha
Administrador
Administrador
Mensagens: 4664
Registrado em: 18 Ago 2003 20:43
Localização: São Paulo - Brasil
Contato:

Conversão de PRG para HEX, é possível?

Mensagem por rochinha »

Amiguinhos,

No tempo do "guaraná com rôlha" tinha muita coisa legal mesmo.

Mas falando em transformar uma coisa para outra, lembro que no MS-DOS tinha um comando/aplicativo que transformava .EXE em .BIN. Era conhecido como exe2bin

Com certeza voce não quiz dizer arquivos Hexa e sim arquivos BINários.

Em relação ao utilitário que transformava código xBase em C, o nome era X2C

Infelizmente seu download já não existe mais e meu hd com esta relíquia tá travado com a placa em curto.

Como os amigos salientaram anteriormente, para o trabalho com microcontroladores o melhor é o Assembler e como C é mais fácil de aprender e lidar opte por usá-lo.

Literatura é o que não falta e mestres idem.
OPS! LINK QUEBRADO? Veja ESTE TOPICO antes e caso não encontre ENVIE seu email com link do tópico para [url=mailto://fivolution@hotmail.com]fivolution@hotmail.com[/url]. Agradecido.

@braços : ? )

A justiça divina tarda mas não falha, enquanto que a justiça dos homens falha porque tarda.
Avatar do usuário
Maligno
Membro Master
Membro Master
Mensagens: 6398
Registrado em: 06 Jul 2004 01:40
Localização: Londrina/PR

Conversão de PRG para HEX, é possível?

Mensagem por Maligno »

Rochinha escreveu:lembro que no MS-DOS tinha um comando/aplicativo que transformava .EXE em .BIN. Era conhecido como exe2bin
Isso sim é do tempo do guaraná com rolha. :)))
Lembro disso. Ele transformava um EXE em COM (o bin). Mas tinha muitas restrições: nenhum segmento (data/code) poderia ter mais de 64Kb e não poderia haver um segmento de pilha. Ele só convertia um EXE para um programa COM menor, apenas modificando sua estrutura interna, encolhendo-a. Sem qualquer alteração no código. Pouco prático.
Rochinha escreveu:Com certeza voce não quiz dizer arquivos Hexa e sim arquivos BINários.
Acho que não exatamente. O compilador utilizado pelo Arduino, no que me consta, gera na saída um tipo de arquivo com extensão HEX, que será então carregado para o dispositivo alvo. É binário, mas...
Rochinha escreveu:para o trabalho com microcontroladores o melhor é o Assembler
Discordo. Sendo C uma linguagem de médio nível e havendo compiladores próprios para todos os microcontroladores, é mais fácil trabalhar com C, pois Assembly é de baixo nível, bem mais difícil de domar. O sacrifício da produtividade não compensa o pequeno ganho de performance. Na época do 8088 tudo bem. Mas hoje em dia não.
[]'s
Maligno
---
Não respondo questões técnicas através de MP ou eMail. Não insista.
As dúvidas devem ser postadas no fórum. Desta forma, todos poderão
se beneficiar das respostas.

---
Se um dia precisar de uma transfusão de sangue você perceberá como
é importante a figura do doador. Procure o hemocentro de sua cidade e
se informe sobre a doação de sangue, plaquetas e medula óssea. Doe!
Avatar do usuário
JoséQuintas
Administrador
Administrador
Mensagens: 20267
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP

Conversão de PRG para HEX, é possível?

Mensagem por JoséQuintas »

Acho que vai usar poucas funções do C, e talvez a melhor saída seja estudar o C mesmo.
Outra opção, mas que de qualquer forma vai ter que aprender o C, é criar um programinha em Clipper que te gere o fonte em C, pra quando ele for extenso.
José M. C. Quintas
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"

https://github.com/JoseQuintas/
Avatar do usuário
rochinha
Administrador
Administrador
Mensagens: 4664
Registrado em: 18 Ago 2003 20:43
Localização: São Paulo - Brasil
Contato:

Conversão de PRG para HEX, é possível?

Mensagem por rochinha »

Amiguinhos,

Tempos atrás quando quando assistia a um documentário tecnológico dominical, diga-se, Olhar Digital, vi uma matéria sobre um controlador chamado Arduino.

Não dei bola pois robótica ou controle de periféricos não é minha praia mas dei uma xeretada e encontrei alguma coisa sobre o mesmo, como kits eletrônicos para montar e testar, nem precisa ser tão técnico de eletrônica.

Outra coisa que encontrei sobre como programar o mesmo era o fato de poder usar um protocolo de comunicação, assim como usamos com impressoras, balanças, etc.

Trata-se do Firmata. Um firmware que será gravado no Arduíno e através de qualquer linguagem que possa se comunicar por portas enviar comandos para o mesmo.

Link relacionados:
http://firmata.org/wiki/Main_Page
http://playground.arduino.cc/Interfacing/Processing

O que é Firmata

Simulador de Arduino

Compilador Arduino OnLine

Para programar o Arduino usando C++ veja a apostila neste link.

E finalmente, para quem não sabe o que é este controlador, heis uma boa fonte de informação.

E pra terminar de vez mesmo:

Curso gratuito de Arduino.
OPS! LINK QUEBRADO? Veja ESTE TOPICO antes e caso não encontre ENVIE seu email com link do tópico para [url=mailto://fivolution@hotmail.com]fivolution@hotmail.com[/url]. Agradecido.

@braços : ? )

A justiça divina tarda mas não falha, enquanto que a justiça dos homens falha porque tarda.
Responder