zápis adresy paměti

Wiring, C++, C, Java, ...
Pravidla fóra
Toto subfórum slouží k řešení obecných otázek kolem programování (konstrukce, knihovny, alokace paměti, ...)
Odpovědět
george9
Příspěvky: 1
Registrován: 02 črc 2018, 21:53
Reputation: 0

zápis adresy paměti

Příspěvek od george9 » 02 črc 2018, 22:47

zdravím,
mám začátečnický dotaz. Jsem samouk a několik projektů jsem již napsal. Ale nevím kde najít odpověď na triviální otázku. Označování adres paměti eeprom nebo Dallas čísly je mi jasný (paměťová buňka nebo adresa. Nerozumím zápisu 0x00. jedná se o adresu a ofset? Moc děkuji za odpověď.

Uživatelský avatar
gilhad
Příspěvky: 788
Registrován: 07 bře 2018, 11:22
Reputation: 0

Re: zápis adresy paměti

Příspěvek od gilhad » 02 črc 2018, 23:03

0x znamena, ze to co nasleduje je hexadecimalni cislo
00 je to cislo (jo, nula)

0x10 = 10 hexa = 16 dec
0x0A = A hexa = 10 dec
0x1A = 1A hexa = 26 dec
0x123 = 123 hexa = 291 dec (=1*256+2*16+3*1)

nekdy je pohodlnejsi zapsat cislo dekadicky
int minuts_in_hour = 60; // 0x3e vypada v tomto kontextu podivne
jindy je pohodlnejsi ho zapsat hexadecimalne
byte low_byte_of_my_data = my_data & 0xFF; // jasne jde napsat 255, ale vypada to divne
a nekdy je lepsi to zapsat treba binarne
#define FLAG_CISLO_1 0b00000001
#define FLAG_CISLO_2 0b00000010
#define FLAG_CISLO_3 0b00000100
#define FLAG_CISLO_4 0b00001000
#define FLAG_CISLO_5 0b00010000

byte moje_priznaky = FLAG_CISLO_1 | FLAG_CISLO_3 | FLAG_CISLO_5; // 0b10101 = 0x15 = 21 ale hexa a dec zapis toho moc nereknou

----

https://www.arduino.cc/reference/en/lan ... constants/

Bacha - Arduino knihovny (wiring) definuji konstanty jako B101 a podobne pro "jednodussi" zapis binarnich cisel. Ale protoze sam program je v cecku, tak spravny zapis binarnich konstant je 0b101 a tak podobne.

Arduino/hardware/arduino/avr/cores/arduino/binary.h je ten soubor, kde to spachali a zacina nejak takto:

Kód: Vybrat vše


#ifndef Binary_h
#define Binary_h

#define B0 0
#define B00 0
#define B000 0
#define B0000 0
#define B00000 0
#define B000000 0
#define B0000000 0
#define B00000000 0
#define B1 1
#define B01 1
#define B001 1
#define B0001 1
#define B00001 1
#define B000001 1
#define B0000001 1
#define B00000001 1
#define B10 2
#define B010 2
#define B0010 2
#define B00010 2
#define B000010 2
#define B0000010 2
#define B00000010 2
#define B11 3
#define B011 3
#define B0011 3
#define B00011 3
#define B000011 3
#define B0000011 3
#define B00000011 3
zatimco kdyz se podivam treba na libraries/Adafruit_Circuit_Playground/utility/Adafruit_CPlay_LIS3DH.h tak tam pouzivaji binarni cisla zapsana normalne

Kód: Vybrat vše


typedef enum
{
  LIS3DH_RANGE_16_G         = 0b11,   // +/- 16g
  LIS3DH_RANGE_8_G           = 0b10,   // +/- 8g
  LIS3DH_RANGE_4_G           = 0b01,   // +/- 4g
  LIS3DH_RANGE_2_G           = 0b00    // +/- 2g (default value)
} lis3dh_range_t;

typedef enum
{
  LIS3DH_AXIS_X         = 0x0,
  LIS3DH_AXIS_Y         = 0x1,
  LIS3DH_AXIS_Z         = 0x2,
} lis3dh_axis_t;


/* Used with register 0x2A (LIS3DH_REG_CTRL_REG1) to set bandwidth */
typedef enum
{
  LIS3DH_DATARATE_400_HZ     = 0b0111, //  400Hz 
  LIS3DH_DATARATE_200_HZ     = 0b0110, //  200Hz
  LIS3DH_DATARATE_100_HZ     = 0b0101, //  100Hz
  LIS3DH_DATARATE_50_HZ      = 0b0100, //   50Hz
  LIS3DH_DATARATE_25_HZ      = 0b0011, //   25Hz
  LIS3DH_DATARATE_10_HZ      = 0b0010, // 10 Hz
  LIS3DH_DATARATE_1_HZ       = 0b0001, // 1 Hz
  LIS3DH_DATARATE_POWERDOWN  = 0,
  LIS3DH_DATARATE_LOWPOWER_1K6HZ  = 0b1000,
  LIS3DH_DATARATE_LOWPOWER_5KHZ  =  0b1001,

} lis3dh_dataRate_t;


Odpovědět

Kdo je online

Uživatelé prohlížející si toto fórum: Žádní registrovaní uživatelé a 10 hostů