Bir değişkeni uint8_t * tipinde yazma

Başlatan robikod, 11 Aralık 2019, 12:26:18

robikod

Pointerlar hakkında kafama takılan bir nokta var,
uint16_t tmp=0xfff şeklinde bir değişkenimiz olsun. Bu değeri ekrana yazdırırken, serialprint(" degisken = %d", (uint8_t *)temp) yazdığımda değer kaybolmadan ekrana yazılıyor yani 0xffff in değerini kaybetmemiş oluyorum. uint8_t yazmış olsaydım 256 elde edecektim.  uint8_t * ifadesi uint8_t tipinden değişkenleri tutan adress anlamında mı kullanılıyor, ya da adres boyutu olarak mı ? uint8_t * dediğimizde bu adrese 16 bitlik sayı yazabiliyor muyuz?

sımışka

#1
Öncelikle temp bir değişken olduğu için adresini cast ederken (uint8_t *)&temp operatörünü kullanman gerekiyor. Bu durumda çalıştığın mimari little
endian mi veya big endian mi olduğu önemli. 
Tam olarak ne yapmak istiyorsunuz , çalıştığınız mimari kaç bitlik ? 16 bitlik datayı 8 bitlik alanlarda mı saklamak istiyorsunuz ?

taydin

Evet değişkenin adresini almıyorsun, değişken içeriğini adres haline getiriyorsun. Yani serialprint, 0xfff adresindeki değeri okuyor ve o değer de herhalde silinmiş durumda olan flash bellek ve beklendiği gibi 0xffff içeriyor.
Timur Aydın (mekatronik.org)

robikod

Teşekkür ederim cevaplar için,
Sormak istediğim şey şuradan çıktı: 16 bitlik bir Register'ı SPI ile okumak yazmak istiyorum.

HAL_StatusTypeDef HAL_SPI_TransmitReceive_DMA(SPI_HandleTypeDef *hspi, uint8_t *pTxData, uint8_t *pRxData, uint16_t Size);
fonksiyonunda görüldüğü gibi Rx ve Tx data uint8_t * şeklinde gösterilmiş. Normalde getArray ve transmitArray 8 bitlik olarak kullanıyordum. Şimdi 16 bitlik olarak kullanmam gerekiyor. Bu yüzden getArray'i  ve transmitArray'i  uint16_t olarak tanımlarsam her hangi bir sorun olur mu doğru şekli ile okuyabilir miyim?
  HAL_SPI_TransmitReceive_DMA(&hspi1, (uint8_t *)getArray, (uint8_t *)transmitArray, (count));

sımışka

Spi konfigürasyon ayarlarında spi.Init.DataSize=SPI_DATASIZE_16BIT modu olması gerekiyor. Onu değiştirip deneyin, count kısmınıda güncelleyin.

OptimusPrime

+
uint8_t nin max degeri 255, 256 degil. 256 9bitlik bir sayi. ::ok
https://donanimveyazilim.wordpress.com || Cihân-ârâ cihân içredir ârâyı bilmezler, O mâhîler ki deryâ içredir deryâyı bilmezler ||