Robótica Livre
Gostaria de reagir a esta mensagem? Crie uma conta em poucos cliques ou inicie sessão para continuar.

Ir para baixo
Monica Moreno
Monica Moreno
Mensagens : 685
Data de inscrição : 03/03/2020
Idade : 15
Escola : Colegio Lindaura Ribeiro Lucas

Exercicio: 4.16 Resolvido Monica Empty Exercicio: 4.16 Resolvido Monica

Sáb Abr 20, 2024 10:34 am
/*
* CURSO DE ROBOTICA 2021
*
* Exercicio: 4.16
* Tema: Ponteiros e Volume de Dados
* Atividade: Comparar a performance de analise de vetor versus ponteiro
* Descrição: Usar um vetor do tamanho da memória e carregar com dados pela porta serial, medir o tempo da soma dos dados usando metodo de vetor e de ponteiro,
* Hardware: Inicializar a porta serial
* Comandos: Serial.begin(9600), Serial.println(); * ; & ;
* Dica1: Ponteiro é uma variável especial e guarda o endereço de uma posição de memória
* Dica2: Para declarar um ponteiro usa-se o operador *
* Dica3: * também é usado para acessar o conteudo do endereço
* Dica4: O operador & é usado para indicar o endereço de uma variável
* Dica5: A memória do Arduino nano tem 2048 bytes logo pode ser endereçada do 0x000 até 0x7FF
* Dica6: No Serial.print é possível formatar o dado usando (int) ou outro tipo. Ex. Serial.print((int)&p8bits);
* Dica7: Usar a função while() para leitura da porta serial até completar o vetor em todas as posições de memoria
* Dica8: Realizar a soma de todas as posições usando acesso diretamente aos elementos do vetor
* Dica9: Realizar a soma usando o ponteiro para acessar os elementos do vetor diretamente na memória
* Dica10: Cronometrar o tempo de execução das somas e comparar
*/

//DEFINICOES INICIAIS
#define TMAX 1500

//DECLARAcAO DE VARIAVEIS GLOBAIS
byte vetor1 (TMAX);//
byte *p ;//
bool carregado = 0;//
long cronometro;//
double soma = 0 ;//


//INICIALIZAÇÃO DO HARDWARE
void setup() {
Serial.begin(9600);//
*p = &vetor1[0];//
}

//FUNÇÕES COMPLEMENTARES


//PROGRAMA PRINCIPAL
void loop() {
//////////1a. parte para coletar os 1500 caracteres da porta serial
while(Serial.available()){
if(p < &vetor1[TMAX]){
*P = Serial.read();//
p ++;//
}else{
Serial.read();//
carregado = 1 ;//
}
Serial.print((int)(p - &vetor1[0]));//
Serial.print(" ");//
Serial.println(Serial.available());//
}
//////////2a. parte fazer a soma usando metodo de vetor.
if(carregado == 1){
cronometro = micros ();//
for(int count = 0 ; count < TMAX ; count ++){
soma += vetor1[count];//
}
Serial.print(micros() - cronometro);//
Serial.print(" Foi o tempo executado por vetor, e a soma =");//
Serial.println(soma);//
delay(1000);//
}
//////////3a. parte Soma usando ponteiro
soma = 0 ;//
cronometro = micros();//
for(p = &vetor1 [0]; p < &vetor1 (TMAX) ; p ++){
soma += *p;//
}
Serial.print(micros() - cronometro);//
Serial.print(" Foi o tempo executado por vetor, e a soma =");//
Serial.println(soma);//
delay(10000);//
//////////Para reiniciar os contadores
p = &vetor1[0];//
carregado= 0;//
soma = 0 ;//

delay (500);//
}
Ir para o topo
Permissões neste sub-fórum
Não podes responder a tópicos