Jump to content
Silva Manuel

Função para guardar valores em Vectores

Recommended Posts

Silva Manuel

Olá a todos!

Eu escrevi esta função para guardar 1,2 ou 3 bytes num vector. Considerando os meus conhecimentos em C, esta foi a forma que consegui para fazer esta tarefa.

A minha questão é: será que existe uma forma mais eficiente de o fazer?



void save_data(uint8_t j, uint8_t num, uint8_t byte_1, uint8_t byte_2, uint8_t byte_3)
{
    if (num>=0)
	   {	
	   GPS_data[j]=byte_1;
		j++;
		num--;}

	if (num>=0)
	   {
		GPS_data[j]=byte_2;
		j++;
		num--;}

	if (num>=0)
		GPS_data[j]=byte_3;
}

Share this post


Link to post
Share on other sites
brunoais

Se conseguires restringir o nº que entra na função. Sim.

void save_data(uint8_t j, uint8_t num, uint8_t byte_1, uint8_t byte_2, uint8_t byte_3){
    switch(num){
	   
	   case 3:	
		GPS_data[j]=byte_1;
		j++;

	   case 2:	
		GPS_data[j]=byte_2;
		j++;

	   case 1:	
		GPS_data[j]=byte_3;
}

Senão... Não vejo maneira de otimiza-lo mantendo a assinatura.


"[Os jovens da actual geração]não lêem porque não envolve um telecomando que dê para mirar e atirar, não falam porque a trapalhice é rainha e o calão é rei" autor: thoga31

Life is a genetically transmitted disease, induced by sex, with death rate of 100%.

Share this post


Link to post
Share on other sites
RSFalcon7

só uma nota: provavelmente queres que a alteração do j seja visível fora da função, neste caso tens usar passagem por referencia (pelo nos tipos primitivos são assim, nunca usei este tipo, mas imagino que seja só uma limitação de memória)

Share this post


Link to post
Share on other sites
bubulindo

Mais uma dúvida de micros? :)

assim de repente, algo nesta forma devia funcionar


#define GPS_SIZE    120

int main()
{
char GPS_data[GPS_SIZE]; //imaginemos que o GPS manda 120 bytes. 
char Bytes[4]; //vector para guardar os bytes que queres
int number; 
getGPS_data(GPS_data);

save_data(3, GPS_data, Bytes);//fnucão para receber dados
}

char save_data(int num, char * data, char * save)
{
int i = 0;

if (i<=3)    {

     for (; i< num; i++)
          Bytes[i] = GPS_data[i];
     return i;
     }
return 0;
}

Esta é uma possibilidade para o que pretendes. Assim não tens problemas de reutilizacão de strings.

Outra hipótese é:

#include <string.h>

#define EVER ;;;

int main()    {
char GPS_data[GPS_SIZE]; //imaginemos que o GPS manda 120 bytes. 
char Bytes[4]; //vector para guardar os bytes que queres
int num; //numero de bytes a guardar 
getGPS_data(GPS_data);//fnucão para receber dados


strncpy(Bytes, GPS_data, num);

for(EVER);
}

Esqueci-me de dizer que deves verificar o tamanho da string que vais copiar para não dares cabo do programa.


include <ai se te avio>

Mãe () {

}

Share this post


Link to post
Share on other sites
Silva Manuel

Olá Bubulindo,

Obrigado pela sua sugestão. Devido a problemas particulares só agora tive oportunidade de ver a sua proposta.

Cumprimentos,

Manuel Silva

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.