code optimization do keil

Software e Hardware para linha x51

Moderadores: 51, guest2003, Renie, gpenga

code optimization do keil

Mensagempor j.silvestre » 15 Mar 2007 10:23

Poderia o code optmization do keil dependendo do nivel escolhido ferrar
o código que vc escreveu ??? eu acho que sim. Alguem já passou por isso?




j.silvestre
j.silvestre
Byte
 
Mensagens: 260
Registrado em: 12 Out 2006 22:15

Mensagempor Viktor » 15 Mar 2007 17:35

Nunca passei por isso. É possível que isso esteja acontecendo, mas por outros motivos.
Viktor
Byte
 
Mensagens: 281
Registrado em: 12 Out 2006 11:33

Re: code optimization do keil

Mensagempor setyco93 » 17 Mar 2007 09:42

j.silvestre escreveu:Poderia o code optmization do keil dependendo do nivel escolhido ferrar
o código que vc escreveu ??? eu acho que sim. Alguem já passou por isso?


Já aconteceu comigo várias vezes, mas ainda não consegui descobrir o porque.
Teve um código que originalmente era escrito para o AVC51, quando modifiquei e compilei com o keil, compilava mas o funcionamento ficava muito estranho.
Dava a impressão que partes do código haviam sido modificados ou eliminados, só foi resolvido depois que abaixei o nivel de otimização.
Então acho que isso depende muito da forma como estruturamos o código.
Sergio

"Algo é só impossível até que alguém duvide e acabe provando o contrário." - Albert Einstein
setyco93
Nibble
 
Mensagens: 57
Registrado em: 16 Nov 2006 14:37
Localização: Maringá - PR

Mensagempor lucflores » 17 Mar 2007 15:11

Aproveitando o tópico, como faso para baixar ou aumentar o nível de optmization do keil???? valeu...
lucflores
Nibble
 
Mensagens: 90
Registrado em: 16 Nov 2006 15:39

Mensagempor setyco93 » 19 Mar 2007 14:46

lucflores escreveu:Aproveitando o tópico, como faso para baixar ou aumentar o nível de optmization do keil???? valeu...


Menu "Project"
Options for target 'target1'

clique na orelha "C51"

Na janela "Code Optimization" escolha em level o nivel de otimização desejado. Em "Emphasis" escolha "Favor Size" se quiser priorizar o tamanho (vai gerar .HEX menor, porem não necessáriamente o mais rápido) e "Favor Speed" prioriza a velocidade (Gera .HEX mais rápido porem não necessáriamente o menor).
Sergio

"Algo é só impossível até que alguém duvide e acabe provando o contrário." - Albert Einstein
setyco93
Nibble
 
Mensagens: 57
Registrado em: 16 Nov 2006 14:37
Localização: Maringá - PR

Mensagempor lucflores » 20 Mar 2007 09:00

Ok, Obrigado
lucflores
Nibble
 
Mensagens: 90
Registrado em: 16 Nov 2006 15:39

Mensagempor j.silvestre » 11 Abr 2007 15:35

senhores

Confirmado dependendo do nivel de optimization escolhido o keil ferra o seu código... diminui o numero de variaveis na data e do código gerado mas te quebra as pernas. um nivel seguro qu eu achei foi o nivel 3.
veja um exemplo onde deu pau até o nivel 4:

unsigned char u,d,c,m; //unidade ,dezena ,centena ,milhar
val = val * 10;//
//val =(unsigned char) val;

d=val/10;
d= d % 10;
d= (d + 0x30);


c=val/100;
c=c % 10;
c=c+'0';

ele deixava o valor do C e do D iguais e não somava o 0x30.


j.silvestre
j.silvestre
Byte
 
Mensagens: 260
Registrado em: 12 Out 2006 22:15

Mensagempor Maurício » 11 Abr 2007 19:25

Salve, Silvestre.

As variáveis que vc criou são usadas em outro lugar depois dos cálculos que são feitos nelas, ou vc só criou este programa para testes ?

Se o caso é o de testes, os compiladores otimizam mesmo o uso da memória. Se uma posição puder ser ocupada por outra variável, o compiladoor vai usar essa posição para a nova variável. Talvez por isso, que suas duas variáveis possuam o mesmo valor.

Agora, se o seu programa USA realmente as variáveis que vc criou, se o compilador conseguiu alocar espaço para elas, então, elas terão seus valores corretos.

[]'s

RETI.
"Não leve a vida tão à sério, afinal, nenhum de nós sairá vivo, dela!"
Avatar do usuário
Maurício
Word
 
Mensagens: 678
Registrado em: 14 Out 2006 17:23
Localização: São Paulo - SP

Mensagempor j.silvestre » 11 Abr 2007 20:09

Grande Mauricio blz ???

Eram variaveis locais, mas tinham que manter, o seu valor diferente até o
final da função...e não mantiveram... no nivel 8 entre data e idata o keil
reservou 117,2 bytes, no nivel 3 reservou 123,2 bytes. depois eu refiz a função de outra maneira com mais variveis locais e funcionou no nivel 8.
mas se eu fizer daquele jeito:

d=d %10;
d= d+0x30;

c= c/10;
c= c+0x30;

dá pau na certa.

isso foi o que eu consegui ver e provar que estava errado... mas comigo está acontecendo algumas coisas estranhas no nivel 8, tipo variaveis da classe extern as vezes da pau... por via das duvidas vou continuar no nivel 3. Como vc é o guru do Keil... testa ai e posta os resultados hehehe...

j.silvestre
j.silvestre
Byte
 
Mensagens: 260
Registrado em: 12 Out 2006 22:15

Mensagempor ijftec » 11 Abr 2007 20:22

Ola!
Por essas e outras ainda continuo com assembly. Não dá pau, é mais enxuto, usa pouca memória, temos domínio total da máquina....... e por ai a fora. No C cada programa que foi feito no Keil, não compila no XXX, o programa feito no YYY não compila no ZZZ.........
Viva o assembly!!!!!!!!!!!!!!
Visite
www.ijftec.com.br
Inácio
ijftec
Bit
 
Mensagens: 33
Registrado em: 21 Out 2006 06:24
Localização: Santa Cruz do Sul

Mensagempor Maurício » 11 Abr 2007 22:08

É isso aí, Inácio, assembly é O CANAL. Melhor linguagem de programação já lançada até agora.

Silvestre. Me manda o seu programa pra eu dar uma olhada e fazer uns testes. Apesar de que eu estou usando menos o Keil, eu sempre deixei a otimização no nível default. Os programas funcionam.... eu nem me preocupo! :lol: 8) :lol:

maucsa@hotmail.com

[]'s

RETI.
"Não leve a vida tão à sério, afinal, nenhum de nós sairá vivo, dela!"
Avatar do usuário
Maurício
Word
 
Mensagens: 678
Registrado em: 14 Out 2006 17:23
Localização: São Paulo - SP

Mensagempor Maurício » 11 Abr 2007 22:16

j.silvestre escreveu:...mas comigo está acontecendo algumas coisas estranhas...
j.silvestre


eheheheheh

Isso é porque vc ainda não usou o AVRStudio pro AVR.
Usa ele lá, e comprove que a frase "Eu era feliz e não sabia", é a mais pura verdade. :lol: :lol: :lol:

A vantagem é que é de greitis!! Isso já É uma grande vantagem !!! 8) :lol:

[]'s

RETI.
"Não leve a vida tão à sério, afinal, nenhum de nós sairá vivo, dela!"
Avatar do usuário
Maurício
Word
 
Mensagens: 678
Registrado em: 14 Out 2006 17:23
Localização: São Paulo - SP

Mensagempor j.silvestre » 18 Abr 2007 13:32

Mauricio estou postando uma pequena rotina aqui.


-----------------------------------------------------------------------------------------

#include<REG935.H>
void prepara_temp(float val );

void main(void)
{

prepara_temp(123.4);

while(1){}
}








void prepara_temp(float val )
{

float a;
unsigned char b,dec,uni,dez,cent;
b= val;
a = b;

a= val - b;
a = a *10;
dec = a;
dec = dec + '0';
uni = b % 10;
uni = uni + '0';
dez = b /10;
dez = dez % 10;
dez = dez + '0';
if(b >=100)
{
cent = b / 100;
cent = cent + '0';
}
else
{
b = 0;
}

while(1){}

}

-------------------------------------------------------------------------------------

compile no keil usando o nivel 8 de optimization... e depois o nivel 3.


he..he..


j.silvestre
j.silvestre
Byte
 
Mensagens: 260
Registrado em: 12 Out 2006 22:15

Mensagempor Maurício » 19 Abr 2007 04:51

j.silvestre.

Rodei o programa e rodou normal. O Keil não está estragando o código. Ele está fazendo a função pra qual ele foi programado, que é otimizar.
Experimente rodar esse programa no modo 0, e verifique o tamanho do código e o número de bytes ocupados por variáveis.

Variável que não vai ser utilizada, não precisa ser atendida. Não gera código, enfim, economiza uma memórinha. 8)
É assim que funciona.

[]'s

RETI.
"Não leve a vida tão à sério, afinal, nenhum de nós sairá vivo, dela!"
Avatar do usuário
Maurício
Word
 
Mensagens: 678
Registrado em: 14 Out 2006 17:23
Localização: São Paulo - SP

Mensagempor j.silvestre » 19 Abr 2007 09:40

Humm...

na verdade a rotina original era esta :

#include<REG935.H>
void prepara_temp(float val );
unsigned char buffer[8];
void main(void)
{

prepara_temp(123.4);

while(1){}
}








void prepara_temp(float val )
{

float a;
unsigned char b,dec,uni,dez,cent;
b= val;
a = b;

a= val - b;
a = a *10;
dec = a;
dec = dec + '0';
uni = b % 10;
uni = uni + '0';
dez = b /10;
dez = dez % 10;
dez = dez + '0';
if(b >=100)
{
cent = b / 100;
cent = cent + '0';
}
else
{
b = 0;
}

buffer[0] = dec;
buffer[1] = uni;
buffer[2] = cent;
while(1){}

}

no code optimization 8 ele salva BUFFER como zero; já no código 3 salva as variaveis corretas.

testa ai...


j.silvestre
j.silvestre
Byte
 
Mensagens: 260
Registrado em: 12 Out 2006 22:15

Próximo

Voltar para 8051

Quem está online

Usuários navegando neste fórum: Bing [Bot] e 1 visitante

x