Divulgação Xmega

Software e Hardware para ATMEL

Moderadores: 51, guest2003, brasilma

Mensagempor vtrx » 18 Nov 2009 11:45

O problema da linguagem C para microcontroladores é igual ao Windows no Pc,todo mundo pode usar sem pensar muito,mas isto exige muita frequencia de trablaho e muita memória.
É uma grande jogada para os fabricantes de µC,mas um grande retrocesso na forma de pensar.Deste modo os fabricantes de µC podem 'previnir' seu faturamento,pois sabem que vão ter que por a disposição componentes mais velozes e com mais memoria,e isto leva um tempo a produzir,mas enquanto isto,alguns programadores estão tentando 'otimizar' seu código ou ficando na espera de um µC mais' possante'.
Se não me engano,a linguagem C é apenas usada realmente em µC,pois para sistema operacional é usado no mínimo o C++.Não se assustem se tiver que aprender outra linguagem brevemente...
Agora,reinventar a roda,não é tentar fazer algo em C,quando ja se faz ha muito tempo e mais eficaz em ASM?
Será que estamos numa 'nova era' de podagem mental nos Brazucas?
Djalma,sobre o seu comentario,não é que o C usa ASM,é que ASM é oque todo compildar tem que gerar,mas é muito difícil otimizar pois o compilador não 'pensa' como um humano,mesmo sabendo que muitos tem um 'pensamento' do tamanho de um compilador.
Sorte dos que tem facilidade de ja 'dizer' ao µC oque deve fazer.
Avatar do usuário
vtrx
Dword
 
Mensagens: 2239
Registrado em: 20 Abr 2008 21:01

Mensagempor chipselect » 18 Nov 2009 11:59

Djalma, o que vc quer dizer com "simplicidade"? Seria comandos extremamente simples como são os mnemônicos, tão simples que fica difícil fazer algo mais complexo ou seria facilidade de programação?

Se a linguagem C não for mais simples de usar que ASM, não tem sentido dela existir.

Também não é realmente necessário utilizar a representação textual em assembly para gerar o código objeto, mas isso é feito como opcional por vários compiladores porque permite o programador analisar melhor o que o compilador gera, e também para permitir que o programador possa melhorar manualmente o resultado, caso seja preciso. Obviamente isso depende de como foi feito o compilador, a especificação do C não opina muito sobre esses detalhes.
chipselect
Word
 
Mensagens: 744
Registrado em: 16 Out 2006 18:50

Mensagempor Djalma Toledo Rodrigues » 18 Nov 2009 12:27

Não fui eu quem disse.

Mas, fui eu quem li

RobL escreveu: Mas se sua rotina quiser testar todos os flags pode sim com
simplicidade maior que em assembly.

E comentei :

Simplicidade maior que em ASM, creio ser impossível.

JC Fim
JNC Fim

JZ Fim
JNZ Fim

Fim: End


¡ Aff ! Como diz o Fabim rs

.
Editado pela última vez por Djalma Toledo Rodrigues em 18 Nov 2009 13:20, em um total de 5 vezes.
Avatar do usuário
Djalma Toledo Rodrigues
Dword
 
Mensagens: 2334
Registrado em: 03 Ago 2008 13:22

Mensagempor msamsoniuk » 18 Nov 2009 12:36

opa, eu tenho interesse sim! quantos vc vai comprar e quanto vai ser o preço? unico inconveniente dele eh que acho que precisa daquele BDM de 1 fio... ou sera que tem como programar o JM32 direto pela USB? :)

Jozias del Rios escreveu:É, eu não conhecia essas implementações. São bem legais! Vivendo, conhecendo e aprendendo! Obrigado Samsoniuk.

Então minha conclusão sobre "rotate" é que eles realmente são opcionais, embora se há implementado no processador, eu não gostaria de trabalhar numa linguagem que me ajude a subir de nivel mas ao mesmo tempo me limite no domínio mais baixo. Ainda fico mais bravo ainda com o fato de não poder usar os flags diretamente a partir dos resultados das contas.... sei que isso não seria portável, mas... vontade é vontade, gosto é gosto hehehe

PS: Sobre o Flexis, me interessei bastante. Falei com o Denis@Informat e pedi amostras/cotações dos modelos mais baratos. Vc tambem tem interesse em algum? veja MCF51JM32VLD (LQFP-44) (esse que provavelmente será trazido). Se vc tambem quiser unidades, acho que pode baratear.

Abraços
Avatar do usuário
msamsoniuk
Dword
 
Mensagens: 2935
Registrado em: 13 Out 2006 18:04

Mensagempor msamsoniuk » 18 Nov 2009 12:55

nao tem segredo o compilador C gerar o codigo de maquina diretamente, visto que o montador asm tambem eh escrito em C e ele nao precisa realmente gerar o arquivo asm intermediario.

se vc pegar um asm como o do 68000, que eh cheio de firulas e abstracoes, passar de C direto para codigo de maquina eh uma economia consideravel.

e afinal, se asm fosse bom, o montador asm e o sistema operacional eram feitos em asm! hehehe :)

Djalma Toledo Rodrigues escreveu:
RobL escreveu:Veja um exemplo com ROR gerado pelo GCC AVR
Mas se sua rotina quiser testar todos os flags pode sim com simplicidade maior que em assembly.

Dizer que rotate é opcional é similar a dizer que subtração também seria pois podemos realizá-la por uma soma. Depende, há momentos em que rotate será mais eficiente e o compilador irá usá-lo, como na rotina acima.

Simplicidade maior que em ASM, creio ser impossível.

C é tão bom mas, tão bom, que usa o Assembly . rs
.
Avatar do usuário
msamsoniuk
Dword
 
Mensagens: 2935
Registrado em: 13 Out 2006 18:04

Mensagempor EvandroPic » 18 Nov 2009 13:05

Marcelo Samsoniuk escreveu:e afinal, se asm fosse bom, o montador asm e o sistema operacional eram feitos em asm! hehehe :)


Muito pelo contrário...
Se os programadores fossem bons, só programariam em ASM... :lol:
EvandroPic
Byte
 
Mensagens: 120
Registrado em: 28 Out 2008 15:28

Mensagempor msamsoniuk » 18 Nov 2009 13:13

mas veja que C nao eh uma linguagem qualquer! para entender isso, vc tem q conhecer melhor a historia da linguagem C! :)

http://www.jakeo.com/words/clanguage.php

veja que a linguagem C nao eh qualquer linguagem... ela foi projetada para escrever sistemas operacionais! e a influencia disso foi gigantesca, falo pelo qual praticamente todo sistema operacional moderno eh escrito em C. o grande motivo eh usar codigo jah disponivel em plataformas unix espalhadas por todo lado... e ironicamente ateh o windows depende disso para existir! :)

vtrx escreveu:O problema da linguagem C para microcontroladores é igual ao Windows no Pc,todo mundo pode usar sem pensar muito,mas isto exige muita frequencia de trablaho e muita memória.
É uma grande jogada para os fabricantes de µC,mas um grande retrocesso na forma de pensar.Deste modo os fabricantes de µC podem 'previnir' seu faturamento,pois sabem que vão ter que por a disposição componentes mais velozes e com mais memoria,e isto leva um tempo a produzir,mas enquanto isto,alguns programadores estão tentando 'otimizar' seu código ou ficando na espera de um µC mais' possante'.
Se não me engano,a linguagem C é apenas usada realmente em µC,pois para sistema operacional é usado no mínimo o C++.Não se assustem se tiver que aprender outra linguagem brevemente...
Agora,reinventar a roda,não é tentar fazer algo em C,quando ja se faz ha muito tempo e mais eficaz em ASM?
Será que estamos numa 'nova era' de podagem mental nos Brazucas?
Djalma,sobre o seu comentario,não é que o C usa ASM,é que ASM é oque todo compildar tem que gerar,mas é muito difícil otimizar pois o compilador não 'pensa' como um humano,mesmo sabendo que muitos tem um 'pensamento' do tamanho de um compilador.
Sorte dos que tem facilidade de ja 'dizer' ao µC oque deve fazer.
Avatar do usuário
msamsoniuk
Dword
 
Mensagens: 2935
Registrado em: 13 Out 2006 18:04

Mensagempor msamsoniuk » 18 Nov 2009 13:34

pois eh, eu procurei uma referencia comparativa, cliquei na primeira e olha que interessante:

http://www.netrino.com/Embedded-Systems ... Comparison

eu jah pensei como vc, ou seja, se o programador for realmente bom, asm deve ser muito melhor que C... mas na pratica isso nao se materializa! jah fiz testes de otimizacao de codigo C vs asm, mas nem usando o datasheet do processador para ver as tabelas de pares otimizados de instrucoes para otimizar o uso de pipelines eu consegui superar o codigo otimizado gerado pelo compilador. e em larga escala, para programas grandes, o programador asm realmente vai para o chinelo, pq o compilador nao cansa depois de horas e horas olhando tabelas de otimizacao.

acho que hoje em dia existe programa em C bem escrito e programa em C mal escrito, pq programa em asm e outras linguagens sempre vai ser mal escrito.

sera que vale a pena perder tempo otimizando o codigo inteiro? em um outro caso, a diferenca de codigo asm otimizado nao foi muito melhor que codigo C... e olha que eh um codigo curtissimo:

http://www.maplesoft.com/applications/v ... &view=html

e o conselho do cara eh bem claro:

"For loops repeating couple of million times, there is a minor difference between assembly language and C in terms of execution time, so it is simpler to write such a function in C."

EvandroPic escreveu:
Marcelo Samsoniuk escreveu:e afinal, se asm fosse bom, o montador asm e o sistema operacional eram feitos em asm! hehehe :)


Muito pelo contrário...
Se os programadores fossem bons, só programariam em ASM... :lol:
Avatar do usuário
msamsoniuk
Dword
 
Mensagens: 2935
Registrado em: 13 Out 2006 18:04

Mensagempor Djalma Toledo Rodrigues » 18 Nov 2009 13:37

Marcelo

O Interpretador Assembler existe muito antes do C
Código: Selecionar todos
O Assembly foi provavelmente a primeira linguagem de programação da história, surgida na década de 50, época em que os computadores ainda usavam válvulas. A idéia do Assembly é usar um comando em substituição a cada instrução de máquina.

Fonte: http://www.guiadohardware.net/termos/assembly

O INTEL 8080, praticamente o Primeiro µP, já tinha o seu Interpretador Assembler,
também da INTEL

Agora para Programas muito grandes reconheço que fica complicado, perde-se a noção,
ainda que programa estruturado.
.

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

ao

Mensagempor RobL » 18 Nov 2009 14:23

Caiu no vazio, discussão se C é melhor que Assembly.
Definitivamente são complementares. Há áreas na qual C não tem como usar, por isso há como usar assembly no C.

O C, assim como qualquer linguagem de alto nível é uma evolução natural do assembly. Não usá-lo é continuar lascando pedra.

Djalma, não sei o que você entende por simplicidade:
Testar um bit (ou flag)
em um PIC BTFSS nnnn

Em C poderia ser, por um if, etc, mas para tornar claro a simplicidade, poderia definir a palavra TESTA, FLAG e X e usar para todos os testes do programa, por exemplo escrever:
TESTA FLAG X (poderia até definir : testa o_flag simples )
O código gerado em um PIC seria exatamente : BTFSS nnnnn.
Qual o mais simples?
Percebeu a simplicidade de leitura do source por qualquer um ?
Ou será mais simples escrever 16 bits em uma instrução num 18F ?

Há outro detalhe, o compilador vigia um monte de problemas e até elimina instruções desnecessárias, como por exemplo carregar um número que já está carregado em algum registro. Simplesmente o compilador gera um MOV. C e similares, é a ferramenta.
RobL
Dword
 
Mensagens: 1546
Registrado em: 20 Fev 2007 17:56

Mensagempor EvandroPic » 18 Nov 2009 14:28

Djalma Toledo Rodrigues escreveu:Agora para Programas muito grandes reconheço que fica complicado, perde-se a noção,
ainda que programa estruturado.
.

É isso...
Não estou dizendo que a programação em Assembly gere um código mais leve pois mesmo em Assembly pode-se progamar com um algorítimo não o mais adequado ao problema. Mas se for o mais adequado, provavelmente será bem mais leve do que o código gerado em qualquer linguagem alto nível.
Mesmo assim, comercialmente é melhor programar em alto nível por razões conhecidas (portabilidade, tempo gasto na implementação... etc).
EvandroPic
Byte
 
Mensagens: 120
Registrado em: 28 Out 2008 15:28

Mensagempor brasilma » 18 Nov 2009 14:39

Caros colegas, creio que posso ajudar a resumir a questão.

Já fiz coisas muito trabalhosas em assembly, que talvez alguns nem tivessem disposição para tentar (fiz pois não tinha outro jeito), como o sistema de cálculos de uma interface estatística. Nele existe raiz quadrada, multiplicação, divisão tudo em 24bits!!! Além é claro das interfaces gráficas, entrada e saída de dados, comunicação simultãnea a dois dispositivos seriais.

Antes que em assembly se possa começar a escrever o aplicativo de fato, é necessário escrever todas as rotininhas básicas, e isto leva tempo.

Se você muda de uP tem de desenvolver novamente toda sua bibliotéca.

O C, apesar de consumir mais recursos do uP minimiza este problema, ou seja, você muda de uma plataforma para outra - guardadas algumas particularidades - muito mais rapidamente, e isto é extremamente desejável na velocidade em que estão sendo lançados novos dispositivos.

Iniciei com os AVRs diretamente em C, sem ter de me preocupar com suas características estruturais/funcionais internas, foi um grande salto.

Abraços.
" A Teoria orienta e a Prática decide" ;-)
Avatar do usuário
brasilma
Dword
 
Mensagens: 3621
Registrado em: 11 Out 2006 15:39
Localização: Planeta Terra

Mensagempor msamsoniuk » 18 Nov 2009 15:55

que nada, na decada de 40 vc jah podia usar plankalkul:

http://www.cassao.eti.br/portal/plankalkul

o 8080 eh modernao! o unix jah rodava em maquinas bem mais antigas :)

Djalma Toledo Rodrigues escreveu:Marcelo

O Interpretador Assembler existe muito antes do C
Código: Selecionar todos
O Assembly foi provavelmente a primeira linguagem de programação da história, surgida na década de 50, época em que os computadores ainda usavam válvulas. A idéia do Assembly é usar um comando em substituição a cada instrução de máquina.

Fonte: http://www.guiadohardware.net/termos/assembly

O INTEL 8080, praticamente o Primeiro µP, já tinha o seu Interpretador Assembler,
também da INTEL

Agora para Programas muito grandes reconheço que fica complicado, perde-se a noção,
ainda que programa estruturado.
.

.
Avatar do usuário
msamsoniuk
Dword
 
Mensagens: 2935
Registrado em: 13 Out 2006 18:04

Mensagempor RobL » 18 Nov 2009 16:31

É verdade que com o conjunto do assembly, com o assembler, como se conhece hoje é mais novo (em torno de 50) que o programa citado pelo Marcelo.
Mas os mnemonicos, foram a primeira implementação natural para substituir os binarios de cada instrução. Isto é tão natural quanto relacionar o número de telefone a um nome ou conjunto de letras. Mas isto não é ainda, a linguagem assembly que incorporou várias melhorias, como as diretivas o link editor, etc.
Como todo bloco sempre termina em um jump condicional ou incondicional, o macaco viu logo que poderia condensar mais a codificação, tal como qualquer processo matemático, como uma condensação de uma idéia, por exemplo o símbolo de operações diversas, soma, integral, etc. Por ser uma condensação de idéias, para alguns começa a dificultar em vez de facilitar.
Por isso digo, C e similares, é a evolução natural, ou seja, a condensação facilitadora para se tratar mais facilmente um sistema cheio de detalhes, mas como um todo.
Não é a toa que a tal linguagem( plankalkul), já bem ampla, com loops, etc, é de 1942 !!!
Acrescento, como o Marcelo colocou muito bem : Vale conhecer a história do C, é muito esclarecedora, inclusive em relação as outras linguagens.
RobL
Dword
 
Mensagens: 1546
Registrado em: 20 Fev 2007 17:56

Mensagempor Djalma Toledo Rodrigues » 18 Nov 2009 17:17

Roberto

Porque não ADA de 1842 ?
.
Avatar do usuário
Djalma Toledo Rodrigues
Dword
 
Mensagens: 2334
Registrado em: 03 Ago 2008 13:22

AnteriorPróximo

Voltar para AVR

Quem está online

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

cron

x