Alguem tem uma sugestão para maximizar isso?

Software e Hardware para uC STM

Moderadores: andre_luis, 51

Alguem tem uma sugestão para maximizar isso?

Mensagempor Guri » 06 Ago 2019 00:19

Onde NumCaracter, representa o tamanho do buffer de textos que esta numa array.
Sg0, 1, 2 e 3, são arrays contendo os textos (no caso são 5 caracteres).
TempBuffRx, é o Buffer de comparação, onde há um texto também de 5 caracteres.
Sgf0, são flags de sinalização, para saber se a comparação é IGUAL(1) ou DIFERNTE (0).
SgCounter, é uma variavel char que serve como identificador externo.

Eu fiz a rotina individualmente para cada caso (nesse exemplo são 4 rotinas checando TEMPBUFFRX que é uma string com 5 caracteres), como eu estou "mexendo" com textos, não consegui desenvolver o raciocínio para fazer isso tudo em uma única chamada, coisa do tipo FOR. É possível integrar essas 4 rotinas em uma única, assim economizo memória.
Eu citei 4 rotinas de exemplo, porém vou utilizar 200 rotinas iguais a esta... :oops:

Agradeço todas as dicas...

cpp code
//------------------------------------------------------      
// ETAPA 0:
//------------------------------------------------------
for(z=0;z<NumCaracter;z++)
{if(TempBuffRx[z]==Sg0[z])
{Sgf0=1;}else{Sgf0=0;z=NumCaracter;}
}
if(Sgf0==1){SgCounter=0;}
//------------------------------------------------------
// ETAPA 1:
//------------------------------------------------------
for(z=0;z<NumCaracter;z++)
{if(TempBuffRx[z]==Sg1[z])
{Sgf1=1;}else{Sgf1=0;z=NumCaracter;}
}
if(Sgf1==1){SgCounter=1;}
//------------------------------------------------------
// ETAPA 2:
//------------------------------------------------------
for(z=0;z<NumCaracter;z++)
{if(TempBuffRx[z]==Sg2[z])
{Sgf2=1;}else{Sgf2=0;z=NumCaracter;}
}
if(Sgf2==1){SgCounter=2;}
//------------------------------------------------------
// ETAPA 3:
//------------------------------------------------------
for(z=0;z<NumCaracter;z++)
{if(TempBuffRx[z]==Sg3[z])
{Sgf3=1;}else{Sgf3=0;z=NumCaracter;}
}
if(Sgf3==1){SgCounter=3;}
DEUS SEJA LOUVADO
GURI (VonNilmam)
Guri
Byte
 
Mensagens: 457
Registrado em: 25 Abr 2010 09:05
Localização: Minas Gerais

Re: Alguem tem uma sugestão para maximizar isso?

Mensagempor denis » 06 Ago 2019 07:41

Guri,

Não olhei com calma, mas acho que se você trocar Sg0,1,2,3 e Sgf0,1,2,3 por um ponteiro você consegue criar uma única função onde os parâmetros de entrada e saída são dinâmicos.
denis
Byte
 
Mensagens: 257
Registrado em: 06 Mar 2007 12:29
Localização: Americana - SP

Re: Alguem tem uma sugestão para maximizar isso?

Mensagempor Red Neck Guy » 06 Ago 2019 08:14

cpp code
unsigned char MalaDeGarupaEBombacha(unsigned short int *pBufA,unsigned short int *pBufB,unsigned short int lenght){
unsigned char result = 1;

for(unsigned short int i=0;i<lenght;i++)
if(pBufA[i] != pBufB[i]){
result = 0;
break;
}

return result;
}


//nas tuas chamadas de função (Na teoria da computação ou são funções ou são procedimentos, hoje em dia rotina é coisa de logistica ou coisas que tu faz todo dia e deixam a tua vida um tédio)
unsigned short int *pBufs[4] = {Sg0,Sg1,Sg2,Sg3};

for(unsigned char i=0;i<4;i++){
if(MalaDeGarupaEBombacha(TempBuffRx,pBufs[i])){
SgCounter = i;
}
}


obs.: Havia um erro no meu código, mas já está ok agora
ASM51 descanse em paz!
Avatar do usuário
Red Neck Guy
Dword
 
Mensagens: 1968
Registrado em: 12 Out 2006 22:24

Re: Alguem tem uma sugestão para maximizar isso?

Mensagempor tcpipchip » 06 Ago 2019 08:42

Gaucho = MalaDeGarupaEBombacha
------------------------------------------
http://www.youtube.com/tcpipchip
Avatar do usuário
tcpipchip
Dword
 
Mensagens: 6560
Registrado em: 11 Out 2006 22:32
Localização: TCPIPCHIPizinho!

Re: Alguem tem uma sugestão para maximizar isso?

Mensagempor Guri » 06 Ago 2019 11:39

Agradeço a atenção de vocês.

Vou tentar implementar as dicas! :shock:
Antes preciso entender o funcionamento da "bonbacha"... :mrgreen:
DEUS SEJA LOUVADO
GURI (VonNilmam)
Guri
Byte
 
Mensagens: 457
Registrado em: 25 Abr 2010 09:05
Localização: Minas Gerais

Re: Alguem tem uma sugestão para maximizar isso?

Mensagempor Guri » 09 Ago 2019 22:54

Consegui resolver de outra forma,

Eu aproveito para corrigir um erro de digitação na minha postagem, na verdade eu queria MINIMIZAR o programa e não MAXIMIZAR :roll: Peço desculpas!

Então, eu estava querendo pegar um TEXTO com 5 caracteres e fazer a comparação dele com o BUFFER circular que recebia pela serial.

E tinha feito uma rotina de comparação para cada TEXTO...isso ficava na RAM como palavra fixa. Aí estava meu ERRRO.

Ao invés de fazer isso, acabei por colocar todos os TEXTOS para comparação em uma tabela na FLASH, ai criei um PONTEIRO x e y, sendo o x = posição do TEXTO e o y a quantidade de caracteres contidos nessa linha.

Aí fiz uma rotina FOR para endereçar a POSIÇÂO (x) e dentro desse FOR, fiz outro FOR que pegava os TEXTO da tabela, lendo os 5 caracteres e armazenando-os em um BUFFER temporário e assim fazia a compraração com o buffer vindo de RX...e usei só um FLAG para definir se eram iguais ou não...Funcionou beleza e bem rápidinha a rotina...e o melhor de tudo reduziu de 6kbytes para menos de 50bytes... :mrgreen:

As dicas foram muito úteis, pois abriram minha imaginação...Muito obrigado a todos os amigos.
DEUS SEJA LOUVADO
GURI (VonNilmam)
Guri
Byte
 
Mensagens: 457
Registrado em: 25 Abr 2010 09:05
Localização: Minas Gerais

Re: Alguem tem uma sugestão para maximizar isso?

Mensagempor Guri » 10 Ago 2019 00:02

Segue a rotina, se alguém também tiver esse problema, pode usar a rotina... :mrgreen:

cpp code
void   ScanRx()
{unsigned char TxtMidi[6];
for(MidiScroll=0;MidiScroll<512;MidiScroll++)
{
sprinti(TxtMidi,"Sg%d ",MidiScroll); // SCANEIA Sg0 ATÉ Sg 511.
for(z=0;z<NumCaracter;z++) // DETECTA O TEXTO DE CHAMADA
{if(TempBuffRx[z]==TxtMidi[z])
{CompareSg=1;}else{CompareSg=0;z=NumCaracter;} // Flag de Sinalização "igual ou diferente".
}
if(CompareSg==1){SgCounter=MidiScroll;MidiScroll=512;}// SAI DA ROTINA DE COMPARAÇÃO.

}
}
DEUS SEJA LOUVADO
GURI (VonNilmam)
Guri
Byte
 
Mensagens: 457
Registrado em: 25 Abr 2010 09:05
Localização: Minas Gerais

Re: Alguem tem uma sugestão para maximizar isso?

Mensagempor ze » 10 Ago 2019 18:25

Guri escreveu: MINIMIZAR o programa e não MAXIMIZAR

Agora que vc explicou... que tal se saísse da função ao achar primeiro caracter diferente? Não perde tempo comparando os d+ entende? Algo como
Código: Selecionar todos
bool void ScanRx(){ // bool, bit static bit, etc... verifique a sintaxe do seu compilador
//...
if(TempBuffRx[z]!=TxtMidi[z]) return 0;
}
return 1
}


Apesar que penso que já existe função de comparação de strings... Só não sei se eficiente quando a sua...
Avatar do usuário
ze
Dword
 
Mensagens: 1655
Registrado em: 05 Jun 2007 14:32

Re: Alguem tem uma sugestão para maximizar isso?

Mensagempor Guri » 11 Ago 2019 01:40

Obrigado ze.

Mas se observar, essa rotina faz justamente isso,

Temos uma tabela de comparação contendo strings com 5 caracteres cada, no total são 512 palavras com 5 caracteres cada... :roll:

A rotina começa, fazendo a comparação com o BUFFER, após achar a palavra na tabela que é igual a que esta no BUFFER, a rotina "ESCAPA" do loop, através do FLAG de sinalização...

Obrigado pela dica. :mrgreen:
DEUS SEJA LOUVADO
GURI (VonNilmam)
Guri
Byte
 
Mensagens: 457
Registrado em: 25 Abr 2010 09:05
Localização: Minas Gerais

Re: Alguem tem uma sugestão para maximizar isso?

Mensagempor Red Neck Guy » 11 Ago 2019 09:40

A função strstr da lib string.h faz essas comparações.
Dificilmente você fará algo mais otimizado do que ela.... Imagina que quem escreveu esse código já chegou no estado da arte da implementação.
ASM51 descanse em paz!
Avatar do usuário
Red Neck Guy
Dword
 
Mensagens: 1968
Registrado em: 12 Out 2006 22:24

Re: Alguem tem uma sugestão para maximizar isso?

Mensagempor ze » 12 Ago 2019 07:24

Observei que sim. Se observar a minha (nossa) é mais simplista não necessitando de flag e saindo rapidamente da função. Penso que atende no que tange o [errado] título do tópico.
Eu (eu) iria de Aquino.
Avatar do usuário
ze
Dword
 
Mensagens: 1655
Registrado em: 05 Jun 2007 14:32

Re: Alguem tem uma sugestão para maximizar isso?

Mensagempor Guri » 12 Ago 2019 18:47

Fico muito grato pelas dicas à todos os amigos.. :)
DEUS SEJA LOUVADO
GURI (VonNilmam)
Guri
Byte
 
Mensagens: 457
Registrado em: 25 Abr 2010 09:05
Localização: Minas Gerais


Voltar para STMicroelectronics

Quem está online

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

cron

x