Otimizar código

Programação C em geral

Moderadores: 51, guest2003

Otimizar código

Mensagempor vtrx » 26 Jul 2021 07:04

Alguém tem uma ideia para otimizar o código abaixo?
Tentou usar um loop encaixado,pois os valores são múltiplos,mas não funcionou no Hardware.
Compilador CCS.

Código: Selecionar todos
                     for(d=0;d<8;d++)
                       {                       
                        scroll_buf[d+256]>>=1;
                        if(bit_test(scroll_buf[d+248],0)==1){bit_set(scroll_buf[d+256],7);}                     
                        scroll_buf[d+248]>>=1;
                        if(bit_test(scroll_buf[d+240],0)==1){bit_set(scroll_buf[d+248],7);}
                        scroll_buf[d+240]>>=1;
                        if(bit_test(scroll_buf[d+232],0)==1){bit_set(scroll_buf[d+240],7);}
                        scroll_buf[d+232]>>=1;
                        if(bit_test(scroll_buf[d+224],0)==1){bit_set(scroll_buf[d+232],7);}
                        scroll_buf[d+224]>>=1;
                        if(bit_test(scroll_buf[d+216],0)==1){bit_set(scroll_buf[d+224],7);}
                        scroll_buf[d+216]>>=1;
                        if(bit_test(scroll_buf[d+208],0)==1){bit_set(scroll_buf[d+216],7);}
                        scroll_buf[d+208]>>=1;
                        if(bit_test(scroll_buf[d+200],0)==1){bit_set(scroll_buf[d+208],7);}
                        scroll_buf[d+200]>>=1;
                        if(bit_test(scroll_buf[d+192],0)==1){bit_set(scroll_buf[d+200],7);}
                        scroll_buf[d+192]>>=1;
                        if(bit_test(scroll_buf[d+184],0)==1){bit_set(scroll_buf[d+192],7);}
                        scroll_buf[d+184]>>=1;
                        if(bit_test(scroll_buf[d+176],0)==1){bit_set(scroll_buf[d+184],7);}
                        scroll_buf[d+176]>>=1;
                        if(bit_test(scroll_buf[d+168],0)==1){bit_set(scroll_buf[d+176],7);}
                        scroll_buf[d+168]>>=1;
                        if(bit_test(scroll_buf[d+160],0)==1){bit_set(scroll_buf[d+168],7);}
                        scroll_buf[d+160]>>=1;
                        if(bit_test(scroll_buf[d+152],0)==1){bit_set(scroll_buf[d+160],7);}
                        scroll_buf[d+152]>>=1;
                        if(bit_test(scroll_buf[d+144],0)==1){bit_set(scroll_buf[d+152],7);}
                        scroll_buf[d+144]>>=1;
                        if(bit_test(scroll_buf[d+136],0)==1){bit_set(scroll_buf[d+144],7);}
                        scroll_buf[d+136]>>=1;
                        if(bit_test(scroll_buf[d+128],0)==1){bit_set(scroll_buf[d+136],7);}
                        scroll_buf[d+128]>>=1;                       
                        if(bit_test(scroll_buf[d+120],0)==1){bit_set(scroll_buf[d+128],7);}                               
                        scroll_buf[d+120]>>=1;
                        if(bit_test(scroll_buf[d+112],0)==1){bit_set(scroll_buf[d+120],7);}                     
                        scroll_buf[d+112]>>=1;
                        if(bit_test(scroll_buf[d+104],0)==1){bit_set(scroll_buf[d+112],7);}
                        scroll_buf[d+104]>>=1;
                        if(bit_test(scroll_buf[d+96],0)==1){bit_set(scroll_buf[d+104],7);}
                        scroll_buf[d+96]>>=1;
                        if(bit_test(scroll_buf[d+88],0)==1){bit_set(scroll_buf[d+96],7);}
                        scroll_buf[d+88]>>=1;
                        if(bit_test(scroll_buf[d+80],0)==1){bit_set(scroll_buf[d+88],7);}
                        scroll_buf[d+80]>>=1;
                        if(bit_test(scroll_buf[d+72],0)==1){bit_set(scroll_buf[d+80],7);}
                        scroll_buf[d+72]>>=1;
                        if(bit_test(scroll_buf[d+64],0)==1){bit_set(scroll_buf[d+72],7);}
                        scroll_buf[d+64]>>=1;
                        if(bit_test(scroll_buf[d+56],0)==1){bit_set(scroll_buf[d+64],7);}
                        scroll_buf[d+56]>>=1;
                        if(bit_test(scroll_buf[d+48],0)==1){bit_set(scroll_buf[d+56],7);}
                        scroll_buf[d+48]>>=1;
                        if(bit_test(scroll_buf[d+40],0)==1){bit_set(scroll_buf[d+48],7);}
                        scroll_buf[d+40]>>=1;
                        if(bit_test(scroll_buf[d+32],0)==1){bit_set(scroll_buf[d+40],7);}
                        scroll_buf[d+32]>>=1;
                        if(bit_test(scroll_buf[d+24],0)==1){bit_set(scroll_buf[d+32],7);}
                        scroll_buf[d+24]>>=1;
                        if(bit_test(scroll_buf[d+16],0)==1){bit_set(scroll_buf[d+24],7);}
                        scroll_buf[d+16]>>=1;
                        if(bit_test(scroll_buf[d+8],0)==1){bit_set(scroll_buf[d+16],7);}
                        scroll_buf[d+8]>>=1;
                        if(bit_test(scroll_buf[d],0)==1){bit_set(scroll_buf[d+8],7);}
                        scroll_buf[d]>>=1;                       
                       }   
Avatar do usuário
vtrx
Dword
 
Mensagens: 2239
Registrado em: 20 Abr 2008 21:01

Re: Otimizar código

Mensagempor cfreund » 26 Jul 2021 12:22

O que o código deveria fazer?
Cláudio F
Avatar do usuário
cfreund
Word
 
Mensagens: 672
Registrado em: 14 Out 2006 14:02
Localização: São Paulo

Re: Otimizar código

Mensagempor vtrx » 26 Jul 2021 13:11

cfreund escreveu:O que o código deveria fazer?

O código faz o seguinte;
1-desloca a variavel scroll_buf[d+256] a direita,d+256 é a posição de memoria.
2-Verificar qual o o bit da variavel anterior(diferença de 8 endereços) e seta ou não o bit da variável deslocada.
Faz isso sucessivamente em 256 posições.
O algorítmico seria ir deslocando oito variáveis por vez.
É uma rotina para acerto de matrizes de Led.

Código: Selecionar todos
letter x:       letter y:       result x:   result y:
1000 0000  ->   1000 0101   =   0100 0000   0100 0100
1010 1010  ->   1111 1111   =   0101 0101   0111 1111
0000 0000  ->   0101 0101   =   0000 0000   0010 1010
1000 0000  ->   1001 1001   =   0100 1000   0100 1100
Avatar do usuário
vtrx
Dword
 
Mensagens: 2239
Registrado em: 20 Abr 2008 21:01

Re: Otimizar código

Mensagempor vtrx » 26 Jul 2021 13:14

vtrx escreveu:
cfreund escreveu:O que o código deveria fazer?

O código faz o seguinte;
1-desloca a variavel scroll_buf[d+256] a direita,d+256 é a posição de memoria.
2-Verificar qual o o bit da variavel anterior(diferença de 8 endereços) e seta ou não o bit da variável deslocada.
Faz isso sucessivamente em 256 posições.
O algorítmico seria ir deslocando oito variáveis por vez.
É uma rotina para acerto de matrizes de Led sem alterar o Hardware.

Código: Selecionar todos
letter x:       letter y:       result x:   result y:
1000 0000  ->   1000 0101   =   0100 0000   0100 0100
1010 1010  ->   1111 1111   =   0101 0101   0111 1111
0000 0000  ->   0101 0101   =   0000 0000   0010 1010
1000 0000  ->   1001 1001   =   0100 1000   0100 1100


O exemplo da figura acima seria de 4 posições mas na realidade são 8.
Imagine o esquema acima com 256 bytes.
Avatar do usuário
vtrx
Dword
 
Mensagens: 2239
Registrado em: 20 Abr 2008 21:01

Re: Otimizar código

Mensagempor andre_luis » 26 Jul 2021 13:38

vtrx escreveu:Alguém tem uma ideia para otimizar o código abaixo?
Tentou usar um loop encaixado,pois os valores são múltiplos,mas não funcionou no Hardware.
Compilador CCS.

Código: Selecionar todos
                     for(d=0;d<8;d++)
                       {                       
                        scroll_buf[d+256]>>=1;
                        if(bit_test(scroll_buf[d+248],0)==1){bit_set(scroll_buf[d+256],7);}                     
                        scroll_buf[d+248]>>=1;
                        if(bit_test(scroll_buf[d+240],0)==1){bit_set(scroll_buf[d+248],7);}
                        scroll_buf[d+240]>>=1;
                        if(bit_test(scroll_buf[d+232],0)==1){bit_set(scroll_buf[d+240],7);}
                        scroll_buf[d+232]>>=1;
                        if(bit_test(scroll_buf[d+224],0)==1){bit_set(scroll_buf[d+232],7);}
                        scroll_buf[d+224]>>=1;
                        if(bit_test(scroll_buf[d+216],0)==1){bit_set(scroll_buf[d+224],7);}
                        scroll_buf[d+216]>>=1;
                        if(bit_test(scroll_buf[d+208],0)==1){bit_set(scroll_buf[d+216],7);}
                        scroll_buf[d+208]>>=1;
                        if(bit_test(scroll_buf[d+200],0)==1){bit_set(scroll_buf[d+208],7);}
                        scroll_buf[d+200]>>=1;
                        if(bit_test(scroll_buf[d+192],0)==1){bit_set(scroll_buf[d+200],7);}
                        scroll_buf[d+192]>>=1;
                        if(bit_test(scroll_buf[d+184],0)==1){bit_set(scroll_buf[d+192],7);}
                        scroll_buf[d+184]>>=1;
                        if(bit_test(scroll_buf[d+176],0)==1){bit_set(scroll_buf[d+184],7);}
                        scroll_buf[d+176]>>=1;
                        if(bit_test(scroll_buf[d+168],0)==1){bit_set(scroll_buf[d+176],7);}
                        scroll_buf[d+168]>>=1;
                        if(bit_test(scroll_buf[d+160],0)==1){bit_set(scroll_buf[d+168],7);}
                        scroll_buf[d+160]>>=1;
                        if(bit_test(scroll_buf[d+152],0)==1){bit_set(scroll_buf[d+160],7);}
                        scroll_buf[d+152]>>=1;
                        if(bit_test(scroll_buf[d+144],0)==1){bit_set(scroll_buf[d+152],7);}
                        scroll_buf[d+144]>>=1;
                        if(bit_test(scroll_buf[d+136],0)==1){bit_set(scroll_buf[d+144],7);}
                        scroll_buf[d+136]>>=1;
                        if(bit_test(scroll_buf[d+128],0)==1){bit_set(scroll_buf[d+136],7);}
                        scroll_buf[d+128]>>=1;                       
                        if(bit_test(scroll_buf[d+120],0)==1){bit_set(scroll_buf[d+128],7);}                               
                        scroll_buf[d+120]>>=1;
                        if(bit_test(scroll_buf[d+112],0)==1){bit_set(scroll_buf[d+120],7);}                     
                        scroll_buf[d+112]>>=1;
                        if(bit_test(scroll_buf[d+104],0)==1){bit_set(scroll_buf[d+112],7);}
                        scroll_buf[d+104]>>=1;
                        if(bit_test(scroll_buf[d+96],0)==1){bit_set(scroll_buf[d+104],7);}
                        scroll_buf[d+96]>>=1;
                        if(bit_test(scroll_buf[d+88],0)==1){bit_set(scroll_buf[d+96],7);}
                        scroll_buf[d+88]>>=1;
                        if(bit_test(scroll_buf[d+80],0)==1){bit_set(scroll_buf[d+88],7);}
                        scroll_buf[d+80]>>=1;
                        if(bit_test(scroll_buf[d+72],0)==1){bit_set(scroll_buf[d+80],7);}
                        scroll_buf[d+72]>>=1;
                        if(bit_test(scroll_buf[d+64],0)==1){bit_set(scroll_buf[d+72],7);}
                        scroll_buf[d+64]>>=1;
                        if(bit_test(scroll_buf[d+56],0)==1){bit_set(scroll_buf[d+64],7);}
                        scroll_buf[d+56]>>=1;
                        if(bit_test(scroll_buf[d+48],0)==1){bit_set(scroll_buf[d+56],7);}
                        scroll_buf[d+48]>>=1;
                        if(bit_test(scroll_buf[d+40],0)==1){bit_set(scroll_buf[d+48],7);}
                        scroll_buf[d+40]>>=1;
                        if(bit_test(scroll_buf[d+32],0)==1){bit_set(scroll_buf[d+40],7);}
                        scroll_buf[d+32]>>=1;
                        if(bit_test(scroll_buf[d+24],0)==1){bit_set(scroll_buf[d+32],7);}
                        scroll_buf[d+24]>>=1;
                        if(bit_test(scroll_buf[d+16],0)==1){bit_set(scroll_buf[d+24],7);}
                        scroll_buf[d+16]>>=1;
                        if(bit_test(scroll_buf[d+8],0)==1){bit_set(scroll_buf[d+16],7);}
                        scroll_buf[d+8]>>=1;
                        if(bit_test(scroll_buf[d],0)==1){bit_set(scroll_buf[d+8],7);}
                        scroll_buf[d]>>=1;                       
                       }   


Tenta isso:

Código: Selecionar todos
for(d=0;d<8;d++)
     {     
     for(e=0;e<32;e++)
   {                    
   scroll_buf[d+(256-(8*e))]>>=1;
   if(bit_test(scroll_buf[d+(256-(8*(e+1)))],0)==1){bit_set(scroll_buf[d+(256-(8*e))],7);} 
   }
}
"Por maior que seja o buraco em que você se encontra, relaxe, porque ainda não há terra em cima."
Avatar do usuário
andre_luis
Dword
 
Mensagens: 5447
Registrado em: 11 Out 2006 18:27
Localização: Brasil - RJ

Re: Otimizar código

Mensagempor edsont » 26 Jul 2021 14:19

Antes de otimizar, se não funcionou, tem que ver como está organizada sua matriz de LEDs.
Os primeiros bytes são todas as linhas de todas as matrizes de LEDs ou são todas as linhas da primeira matriz ou ainda todas as colunas da primeira (ou última) matriz?
As matrizes estão mapeadas da direita para a esquerda ou da esquerda para a direita?
Se a sequencia estiver errada os bits dos "Carries" vão parar em lugar errado ou se perder.
Se for scroll de mensagem e estiver com os bits menos significativos para a direita na matriz, tem que fazer o shift para a esquerda, já que o texto tem que correr para a esquerda, a não ser que seja texto em árabe.
Avatar do usuário
edsont
Word
 
Mensagens: 555
Registrado em: 22 Mai 2007 17:19
Localização: Araraquara-SP Brasil - Terra - Sistema Solar - Via Láctea

Re: Otimizar código

Mensagempor vtrx » 26 Jul 2021 14:22

Avatar do usuário
vtrx
Dword
 
Mensagens: 2239
Registrado em: 20 Abr 2008 21:01

Re: Otimizar código

Mensagempor vtrx » 26 Jul 2021 19:13

aluis-rcastro escreveu:
vtrx escreveu:Alguém tem uma ideia para otimizar o código abaixo?
Tentou usar um loop encaixado,pois os valores são múltiplos,mas não funcionou no Hardware.
Compilador CCS.

Código: Selecionar todos
                     for(d=0;d<8;d++)
                       {                       
                        scroll_buf[d+256]>>=1;
                        if(bit_test(scroll_buf[d+248],0)==1){bit_set(scroll_buf[d+256],7);}                     
                        scroll_buf[d+248]>>=1;
                        if(bit_test(scroll_buf[d+240],0)==1){bit_set(scroll_buf[d+248],7);}
                        scroll_buf[d+240]>>=1;
                        if(bit_test(scroll_buf[d+232],0)==1){bit_set(scroll_buf[d+240],7);}
                        scroll_buf[d+232]>>=1;
                        if(bit_test(scroll_buf[d+224],0)==1){bit_set(scroll_buf[d+232],7);}
                        scroll_buf[d+224]>>=1;
                        if(bit_test(scroll_buf[d+216],0)==1){bit_set(scroll_buf[d+224],7);}
                        scroll_buf[d+216]>>=1;
                        if(bit_test(scroll_buf[d+208],0)==1){bit_set(scroll_buf[d+216],7);}
                        scroll_buf[d+208]>>=1;
                        if(bit_test(scroll_buf[d+200],0)==1){bit_set(scroll_buf[d+208],7);}
                        scroll_buf[d+200]>>=1;
                        if(bit_test(scroll_buf[d+192],0)==1){bit_set(scroll_buf[d+200],7);}
                        scroll_buf[d+192]>>=1;
                        if(bit_test(scroll_buf[d+184],0)==1){bit_set(scroll_buf[d+192],7);}
                        scroll_buf[d+184]>>=1;
                        if(bit_test(scroll_buf[d+176],0)==1){bit_set(scroll_buf[d+184],7);}
                        scroll_buf[d+176]>>=1;
                        if(bit_test(scroll_buf[d+168],0)==1){bit_set(scroll_buf[d+176],7);}
                        scroll_buf[d+168]>>=1;
                        if(bit_test(scroll_buf[d+160],0)==1){bit_set(scroll_buf[d+168],7);}
                        scroll_buf[d+160]>>=1;
                        if(bit_test(scroll_buf[d+152],0)==1){bit_set(scroll_buf[d+160],7);}
                        scroll_buf[d+152]>>=1;
                        if(bit_test(scroll_buf[d+144],0)==1){bit_set(scroll_buf[d+152],7);}
                        scroll_buf[d+144]>>=1;
                        if(bit_test(scroll_buf[d+136],0)==1){bit_set(scroll_buf[d+144],7);}
                        scroll_buf[d+136]>>=1;
                        if(bit_test(scroll_buf[d+128],0)==1){bit_set(scroll_buf[d+136],7);}
                        scroll_buf[d+128]>>=1;                       
                        if(bit_test(scroll_buf[d+120],0)==1){bit_set(scroll_buf[d+128],7);}                               
                        scroll_buf[d+120]>>=1;
                        if(bit_test(scroll_buf[d+112],0)==1){bit_set(scroll_buf[d+120],7);}                     
                        scroll_buf[d+112]>>=1;
                        if(bit_test(scroll_buf[d+104],0)==1){bit_set(scroll_buf[d+112],7);}
                        scroll_buf[d+104]>>=1;
                        if(bit_test(scroll_buf[d+96],0)==1){bit_set(scroll_buf[d+104],7);}
                        scroll_buf[d+96]>>=1;
                        if(bit_test(scroll_buf[d+88],0)==1){bit_set(scroll_buf[d+96],7);}
                        scroll_buf[d+88]>>=1;
                        if(bit_test(scroll_buf[d+80],0)==1){bit_set(scroll_buf[d+88],7);}
                        scroll_buf[d+80]>>=1;
                        if(bit_test(scroll_buf[d+72],0)==1){bit_set(scroll_buf[d+80],7);}
                        scroll_buf[d+72]>>=1;
                        if(bit_test(scroll_buf[d+64],0)==1){bit_set(scroll_buf[d+72],7);}
                        scroll_buf[d+64]>>=1;
                        if(bit_test(scroll_buf[d+56],0)==1){bit_set(scroll_buf[d+64],7);}
                        scroll_buf[d+56]>>=1;
                        if(bit_test(scroll_buf[d+48],0)==1){bit_set(scroll_buf[d+56],7);}
                        scroll_buf[d+48]>>=1;
                        if(bit_test(scroll_buf[d+40],0)==1){bit_set(scroll_buf[d+48],7);}
                        scroll_buf[d+40]>>=1;
                        if(bit_test(scroll_buf[d+32],0)==1){bit_set(scroll_buf[d+40],7);}
                        scroll_buf[d+32]>>=1;
                        if(bit_test(scroll_buf[d+24],0)==1){bit_set(scroll_buf[d+32],7);}
                        scroll_buf[d+24]>>=1;
                        if(bit_test(scroll_buf[d+16],0)==1){bit_set(scroll_buf[d+24],7);}
                        scroll_buf[d+16]>>=1;
                        if(bit_test(scroll_buf[d+8],0)==1){bit_set(scroll_buf[d+16],7);}
                        scroll_buf[d+8]>>=1;
                        if(bit_test(scroll_buf[d],0)==1){bit_set(scroll_buf[d+8],7);}
                        scroll_buf[d]>>=1;                       
                       }   


Tenta isso:

Código: Selecionar todos
for(d=0;d<8;d++)
     {     
     for(e=0;e<32;e++)
   {                    
   scroll_buf[d+(256-(8*e))]>>=1;
   if(bit_test(scroll_buf[d+(256-(8*(e+1)))],0)==1){bit_set(scroll_buf[d+(256-(8*e))],7);} 
   }
}


Muito bom!
Funcionou igual ao 'original'.
Pelo tempo e respostas,posso te chamar de 'fera' :mrgreen:
Vou postar esta solução no Forum CCS,que estou aguardando alguma ideia.
Antes de testar essa rotina,um usuario me deu uma sugestão,mas não entendi direito:
Código: Selecionar todos
void scroll(int16 index)
{   
   scroll_buf[index] >>= 1;
   if(bit_test(scroll_buf[index-8],0)==1)
      scroll_buf[index]+=128;
}

      for(d=256;d>=0;d--)
      {
         scroll(d);     
      }

//d has to be a signed int16 to use like this
Avatar do usuário
vtrx
Dword
 
Mensagens: 2239
Registrado em: 20 Abr 2008 21:01

Re: Otimizar código

Mensagempor cfreund » 27 Jul 2021 17:39

vtrx escreveu:
cfreund escreveu:O que o código deveria fazer?

O código faz o seguinte;
1-desloca a variavel scroll_buf[d+256] a direita,d+256 é a posição de memoria.
2-Verificar qual o o bit da variavel anterior(diferença de 8 endereços) e seta ou não o bit da variável deslocada.
Faz isso sucessivamente em 256 posições.
O algorítmico seria ir deslocando oito variáveis por vez.
É uma rotina para acerto de matrizes de Led.


Isso é pra rolar a mensagem mostrada?

A curiosidade é por isso não me cheirar bem. Percebo muito tempo de CPU desperdiçado.
Cláudio F
Avatar do usuário
cfreund
Word
 
Mensagens: 672
Registrado em: 14 Out 2006 14:02
Localização: São Paulo

Re: Otimizar código

Mensagempor vtrx » 27 Jul 2021 19:02

cfreund escreveu:
vtrx escreveu:
cfreund escreveu:O que o código deveria fazer?

O código faz o seguinte;
1-desloca a variavel scroll_buf[d+256] a direita,d+256 é a posição de memoria.
2-Verificar qual o o bit da variavel anterior(diferença de 8 endereços) e seta ou não o bit da variável deslocada.
Faz isso sucessivamente em 256 posições.
O algorítmico seria ir deslocando oito variáveis por vez.
É uma rotina para acerto de matrizes de Led.


Isso é pra rolar a mensagem mostrada?

A curiosidade é por isso não me cheirar bem. Percebo muito tempo de CPU desperdiçado.
.

sim isso mesmo,mas como citei no post,essa matriz que estou usando tem ligações diferentes das mais antigas,isso que dizer que se eu usar um código 'padrão' e otimizado,terei que desconectar as matrizes,que ja vem de 4 em 4,e montá-las com os conectores 'virado',isso faria elas perderem o sentido de ja virem montadas.

Ainda falta 1 % para acertar a dica postada.
A ultima letra,se não for espaço,gera um rastro...
Na rotina 'gigante 'não gera o rastro na ultima letra deslocada.
Avatar do usuário
vtrx
Dword
 
Mensagens: 2239
Registrado em: 20 Abr 2008 21:01

Re: Otimizar código

Mensagempor tcpipchip » 28 Jul 2021 11:03

eu tive problema com rastro uma vez pq não dei o delay pequeno pq não dava CE do DISPLAY (4 displays de 7seg) no momento certo...então aparecia o 4 digito no primeiro (MIXADO)
------------------------------------------
http://www.youtube.com/tcpipchip
Avatar do usuário
tcpipchip
Dword
 
Mensagens: 6560
Registrado em: 11 Out 2006 22:32
Localização: TCPIPCHIPizinho!

Re: Otimizar código

Mensagempor cfreund » 28 Jul 2021 20:08

vtrx escreveu:sim isso mesmo,mas como citei no post,essa matriz que estou usando tem ligações diferentes das mais antigas,isso que dizer que se eu usar um código 'padrão' e otimizado,terei que desconectar as matrizes,que ja vem de 4 em 4,e montá-las com os conectores 'virado',isso faria elas perderem o sentido de ja virem montadas.

Ainda falta 1 % para acertar a dica postada.
A ultima letra,se não for espaço,gera um rastro...
Na rotina 'gigante 'não gera o rastro na ultima letra deslocada.


Uma alternativa seria preparar o buffer de certa forma que seja necessário apenas avançar um ponteiro quando enviar os dados para o display. Penso que, seria possível fazer que cada byte do buffer representasse uma coluna do display. Rotina de scroll ficaria bem reduzida, por ex.:

Código: Selecionar todos
uchar buffer[100*8+1], *ptr_buffer;

void scroll()
{
    if (*buffer == 0)
        return;

    for (u = 0; u < 32; ++u)
    {
        display_write(*ptr_buffer++);

        if (*ptr_buffer == 0)
            ptr_buffer = buffer;
    }
}


O maior bônus seria economia de RAM.
Cláudio F
Avatar do usuário
cfreund
Word
 
Mensagens: 672
Registrado em: 14 Out 2006 14:02
Localização: São Paulo


Voltar para Visual C++/C/C++/C#

Quem está online

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

x