Struktury, EEPROM, STM...

Tu możesz pisać o swoich problemach z pisaniem programów w języku C/C++ dla STM.
Awatar użytkownika
Antystatyczny
Geek
Geek
Posty: 1168
Rejestracja: czwartek 03 wrz 2015, 22:02

Re: Struktury, EEPROM, STM...

Postautor: Antystatyczny » czwartek 24 wrz 2015, 23:45

Kod: Zaznacz cały

#include <stdint.h>
#include <stdbool.h>    //definicja true i false

typedef struct{
   uint16_t    adc_res;
   uint8_t    adc_inc;
   uint32_t   adc_sp;
}TADC_C;

typedef struct{
   uint32_t ADC_G;
   uint32_t ADC_O;
   int32_t ADC_LM;
   int32_t ADC_Z;
}TADC_P;

TADC_C struktura1 =
{
    125, 255, 300
};

TADC_P struktura2;

void struct_copy(void *src, void *dst);

void main(void)         //punkt wejścia programu
{
    struct_copy(&struktura1, &struktura2);
   
    while(true)         //pętla nieskończona
    {
       
    }
   
    return;             //niewymagany rozkaz powrotu z funkcji.
}

void struct_copy(void *src, void *dst)
{
    /*
     *Tutaj, zależnie od tego, co chcesz zrobić, trzeba będzie odpowiednio kopiować/wyłuskiwać dane
     *z poszczególnych pól struktury src i odpowiednio zapisywać pola struktury dst. Tu już musisz dokładniej określić, o co chodzi.
     *Wolałbym nie nadużywać void *, a zamiast tego zrobić np. struct_copy(TADC_C * src, TADC_P *dst);
     * lub coś w ten deseń. Poza tym, jeśli ma być jedna funkcja kopiująca w obu kierunkach, zastanowiłbym
     * się nad stworzeniem jednego wspólnego typu strukturalnego zamiast dwóch róznych 
     */
}
"The true sign of intelligence is not knowledge but imagination" Albert Einstein.

Awatar użytkownika
Antystatyczny
Geek
Geek
Posty: 1168
Rejestracja: czwartek 03 wrz 2015, 22:02

Re: Struktury, EEPROM, STM...

Postautor: Antystatyczny » piątek 25 wrz 2015, 00:46

Można np. tak:

Kod: Zaznacz cały

/*
 * main.c
 *
 *  Created on: 25 wrz 2015
 *      Author: Anty
 */

#include<stdint.h>
#include<string.h>
#include<stdbool.h>

typedef struct{
   uint16_t    adc_res;
   uint8_t    adc_inc;
   uint32_t   adc_sp;
   uint32_t ADC_G;
   uint32_t ADC_O;
   int32_t ADC_LM;
   int32_t ADC_Z;
}adc_t;

adc_t struktura1 =
{
    .adc_res  = 125, .adc_inc = 255, .adc_sp = 300
};

adc_t struktura2;

void struct_copy(adc_t *src, adc_t *dst);


int main(void)
{
   struct_copy( &struktura1, &struktura2);
   while(true);
}

void struct_copy(adc_t *src, adc_t *dst)
{
   memcpy(dst, src, sizeof(adc_t));
}


No ale tak jak wspomniałem, musiałbym konkretniej wiedzieć, co chcesz kopiować, co jest ważne do zapisania itd.
"The true sign of intelligence is not knowledge but imagination" Albert Einstein.

Awatar użytkownika
Antystatyczny
Geek
Geek
Posty: 1168
Rejestracja: czwartek 03 wrz 2015, 22:02

Re: Struktury, EEPROM, STM...

Postautor: Antystatyczny » wtorek 07 cze 2016, 02:18

W sumie można by napisać funkcję kopiująca dane. Przyjmowałaby adres struktury źródłowej, adres początkowy, pod który ma być skopiowana oraz ilość bajtów to skopiowania.

Coś w stylu memcpy_E(void * src, void *dst, size_t size);

Jak będę tak daleko, to coś przedstawię (no chyba, że znajdę lepszy sposób)
"The true sign of intelligence is not knowledge but imagination" Albert Einstein.

Awatar użytkownika
Antystatyczny
Geek
Geek
Posty: 1168
Rejestracja: czwartek 03 wrz 2015, 22:02

Re: Struktury, EEPROM, STM...

Postautor: Antystatyczny » wtorek 07 cze 2016, 11:00

W takim razie chętnie spojrzę na Twoje rozwiązanie.
"The true sign of intelligence is not knowledge but imagination" Albert Einstein.

Awatar użytkownika
Antystatyczny
Geek
Geek
Posty: 1168
Rejestracja: czwartek 03 wrz 2015, 22:02

Re: Struktury, EEPROM, STM...

Postautor: Antystatyczny » wtorek 07 cze 2016, 11:18

A mógłbyś opublikować kod tej funkcji?
"The true sign of intelligence is not knowledge but imagination" Albert Einstein.


Wróć do „Programowanie STM w C/C++”

Kto jest online

Użytkownicy przeglądający to forum: Obecnie na forum nie ma żadnego zarejestrowanego użytkownika i 1 gość