Advertisement
elektronek

Ukazka prenosu double hodnot po bytech pres (i2c,usart,spi atd)

Nov 2nd, 2020 (edited)
1,608
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 2.18 KB | None | 0 0
  1. /* Inspirace pro Martin M Klain a dalsi co resi prenos vetsich ciselnych hodnot */
  2. #include <stdio.h>
  3. #include <stdint.h>
  4. #include <stdlib.h>
  5. #include <string.h>
  6.  
  7. // stanovime velikost double
  8. unsigned long velikost=sizeof(double);
  9. // Vysilaci strana
  10. double i1, i2, i3;
  11. // prijimaci strana
  12. double yy1,yy2,yy3;
  13.  
  14. // Pevne definice nebudeme delat - alokujeme nize dynamicky
  15. // uint8_t TXBUFFER[velikost*3]; // Udelame si vysilaci buffer pro vsechny hodnoty
  16. // uint8_t RXBUFFER[velikost*3]; // Udelame si prijimaci buffer pro vsechny hodnoty
  17.  
  18.  
  19. int main()
  20. {
  21.     printf("Double je velky %lu byte\n",velikost);
  22.     uint8_t* TXBUFFER = malloc(velikost*3); // alokace bufferu v pameti
  23.     uint8_t* RXBUFFER = malloc(velikost*3);
  24.     printf("Velikost alokace TX %lu\n",sizeof(TXBUFFER)); // pozor vraci jen velikost adresy
  25.     printf("Velikost alokace RX %lu\n",sizeof(RXBUFFER));
  26.     i1 = 123456.78;   // Double hodnota 1
  27.     i2 = 554433.22;   // Double hodnota 2
  28.     i3 = 876543.21;   // Double hodnota 3
  29.     printf("Puvodni double hodnoty\n");
  30.     printf("%f\n",i1); // cvicne si je vypiseme
  31.     printf("%f\n",i2); // cvicne si je vypiseme
  32.     printf("%f\n",i3); // cvicne si je vypiseme
  33.  
  34.     // Plmime do bufferu postupne vsechny hodnoty s posunem o velikost double
  35.     memcpy((double *)TXBUFFER,       &i1,velikost);
  36.     memcpy((double *)(TXBUFFER+velikost),    &i2,velikost);
  37.     memcpy((double *)(TXBUFFER+(2*velikost)),&i3,velikost);
  38.  
  39.     // zde by probehl prenos po i2c, usartu, spi nebo cimkoliv po bytech
  40.     printf("Odvysilame buffer...\n\n");
  41.     for (uint8_t a=0; a<(3*velikost); a++)
  42.     {
  43.         printf("%02x ",TXBUFFER[a]);
  44.     }
  45.     printf("\n\n");
  46.     // Po odvysilani se prijme na strane prijmu do bufferu opet
  47.  
  48.     // My si ho ukazkove zkopirujeme  
  49.     memcpy(RXBUFFER,TXBUFFER,velikost*3);
  50.     printf("Prijaty buffer...\n");
  51.  
  52.     // Do ukazatelu na double plnime prijate hodnoty s posuny o velikost double
  53.     memcpy(&yy1, (double *)RXBUFFER,        velikost);
  54.     memcpy(&yy2, (double *)(RXBUFFER+velikost), velikost);
  55.     memcpy(&yy3, (double *)(RXBUFFER+(2*velikost)), velikost);
  56.  
  57.     printf("Prijate double hodnoty\n");
  58.     printf("%f\n",yy1);
  59.     printf("%f\n",yy2);
  60.     printf("%f\n",yy3);
  61.  
  62.     free(TXBUFFER); // Uvolnime buffery z pameti
  63.     free(RXBUFFER);
  64.    
  65.     return 0;
  66. }
  67.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement