Clipper On Line • Ver Tópico - Conversão de PRG para HEX, é possível?
Página 1 de 2

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

MensagemEnviado: 16 Abr 2013 16:08
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

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

MensagemEnviado: 16 Abr 2013 20:48
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.

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

MensagemEnviado: 17 Abr 2013 15:49
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

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

MensagemEnviado: 17 Abr 2013 16:13
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.

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

MensagemEnviado: 17 Abr 2013 20:01
por fladimir
Colega eu fiz um código chamado gira.prg pelo q eu entendi do teu problema assim:

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:

/*
* 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

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

MensagemEnviado: 17 Abr 2013 20:49
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.

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

MensagemEnviado: 18 Abr 2013 09:47
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?

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

MensagemEnviado: 18 Abr 2013 17:30
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;
-------------------------------------------------------------------------
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:
#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:
: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.

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

MensagemEnviado: 19 Abr 2013 01:02
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.

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

MensagemEnviado: 19 Abr 2013 01:19
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.

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

MensagemEnviado: 19 Abr 2013 09:35
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

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

MensagemEnviado: 21 Abr 2013 03:07
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.

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

MensagemEnviado: 21 Abr 2013 12:46
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.

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

MensagemEnviado: 21 Abr 2013 16:33
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.

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

MensagemEnviado: 21 Abr 2013 22:07
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.

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

MensagemEnviado: 22 Abr 2013 10:41
por MauricioPF
Vocês foram fantásticos. Recebi todas as informações necessárias ao meu objetivo. Agradeço a todos pela colaboração.

Acho que vou criar outro problema: O José Quintas, mais acima, sugere criar um programa em Clipper que gere um programa em “C”. Lá vai a encrenca: alguém teria algo parecido com isso? Ou posso esquecer?...

A minha insistência neste assunto deve-se ao fato de eu gostar muito do Clipper, e, como até hoje ele não me decepcionou seria lógico que lhe fosse fiel até que se lhe esgotasse todos os recursos disponíveis.
Obrigado.

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

MensagemEnviado: 22 Abr 2013 15:36
por rochinha
Amiguinho,

O fator determinante nem seria a linguagem, mas talvez o tamanho. Os controladores podem possuir espaço para upload de código, mas são pequenos.

Um aplicativozinho simples de "Hello Word" feito em Summer 87, poderia facilmente tem mais de 200k de tamanho. Imagine um em Clipper 5.x ou Harbour. Nestes casos além do código em si, a compilação agrega o runtime.

O fato de voce fazer o upload de código em formato HEX é porque o próprio controlador irá executá-lo.

Se voce precisa(tentar) usar uma sintaxe parecida com Clipper(pelo afinidade), voce pode tentar usar o C3 Compiler(De Pago). Ele tem um compilador diferenciado e provávelmente crie código menor.

Mas é só uma tentativa, pois eu desconheço tanto o hardware que voce está usando quanto ao C3(C-Cube).

Se eu ainda tivesse meu hd intacto ou se pudesse baixar novamente o x2c poderiámos saber no que ele iria te ajudar.

Mas veja nos links postados, se alguma IDE pode lhe facilitar a vida, ou teste os exemplos e por prova e erro, obtenha conhecimento do que precisa e com o tempo voce irá ganhando intimidade com a linguagem usada. C no caso.

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

MensagemEnviado: 22 Abr 2013 16:48
por Maligno
Amiguinho Rochinha,

O OP não está querendo usar o código Clipper compilado (opCodes). Ele quer escrever em XBase, que ele domina, para depois compilar e ter na saída um código C equivalente. Esse conversor que mencionou, o tal X2C, desconheço. O que já vi que fazia isso era o tal de CodeBase (ou nome semelhante).

Mas o melhor caminho, a meu ver e como disse antes, é aprender C, já que praticamente nenhuma função Clipper poderá ser utilizada, porque provavelmente não haverá equivalente na biblioteca padrão do Arduino. Melhor usar o que tem e manter o foco nisso. Difícil no começo, mas com tempo e dedicação, qualquer um pode se tornar fluente em C. Eu próprio migrei de Clipper para C++. Lembro das dificuldades que enfrentei, mas faria tudo de novo. Vale a pena.

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

MensagemEnviado: 23 Abr 2013 12:46
por rochinha
Amiguinho,

X2c is an Xbase compiler that creates executable programs from Xbase source on any Unix or C platform. This is accomplished by creating C source from the Xbase source, compiling, and linking with included Xbase function libraries. Whilst the C source is considered an intermediate stage for X2c, it can be used and developed as any other C source. The X2c dialect of Xbase accepts virtually all statements from Borland (was Ashton-Tate), dBASE III PLUS, Computer Associates (was Nantucket), Clipper (Summer '87), and Microsoft (was Fox Software) FoxBASE (2.1). Selected Foxpro statements are also supported.


Voce deve ter visto algo sobre isto sim, mas talvez não se lembre, já que a ferramenta, site, desenvolvedor nem se encontram mais.

Assim como para mim pode ter passado batido que o CodeBase faça algo igual, já que eu só conhecia o mesmo por ser mais um motor de dados como Six, Apollo, Fortress, etc. Inclusive que o site da Hallogram é o unico que anuncia vender estas pérolas.

Eu não cheguei a usá-la na prática, mas tenho o instalador e está travado num HD de 1Tb por causa de uma maldita traça.

Com certeza esta seria, não uma solução, mas um paleativo, já que o caminho real é programar na lingua mais apropriada para o periférico.

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

MensagemEnviado: 25 Abr 2013 10:01
por MauricioPF
Muito bons os Links enviados. Visitei-os para obter subsídios ao meu escopo.
Depois desta discussão sobre o tema por mim proposto dou-me por satisfeito e agradeço a todos pelo empenho e dedicação à causa.
São ações dessa natureza que nos dão a certeza de que o Brasil vai bem!!!!
Obrigado a um abração a todos os colaboradores.

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

MensagemEnviado: 25 Mai 2013 10:25
por Pablo César
Encontrei o que eu estava falando...
Há tempos atrás eu tinha visto outra forma de programação, mas não lembro direito para buscar e apresentar pra vocês.
Neste tópico (em inglês) demostra um desenvolvimento que diz fazer em PWCT - Programming Without Coding Technology (Programação sem Tecnologia de códigos):

http://hmgforum.com/viewtopic.php?p=918#p918

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

MensagemEnviado: 14 Jun 2013 09:29
por bencz
Bom, para você fazer essa conversão para .hex, seria necessario um compilador de clipper/harbour que nao fosse um front-end do gcc, e então, gerase um código assembly do PIC que você está usando, o mais puro possivel, ou mesmo, gerar um código C e então compilar o código C com o sdcc ou qualquer outro compilador ai...

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

MensagemEnviado: 14 Jun 2013 09:37
por bencz
Caso esteja disposto, com um tanto de modificação, você se torna capaz de transformar este meu compilador:

https://gist.github.com/bencz/5174756

Em um simples compilador de Clipper/harbour que gera um C puro :)