memcpy komutu

Başlatan yamak, 28 Haziran 2011, 17:01:25

yamak

Arkadaşlar ccs c için yazılmış glcd kütüphanesi hi-tech e uyarlamaya çalışyorum fakat memcpy diye bi komut var derleyici o komutta hata veriyo. string.h ve stdlib.h kütüphanelerinin ikisini de kullandım fakat hata düzelmedi. Acaba memcpy komutu için hangi kütüphaneyi kullanmalıyım.

Klein

"string.h" dosyasında deklare edilmiş olmalı.  Kütüphanenin yolu ile ilgili ayarlarda bir sıkıntı olmasın?

yamak

tırnak içinde de denedim küçük büyük işaretleri içinde de değişen bişey olamadı. Şöyle bir hata veriyo.
"(468) undefined symbol "_memcpy" in FNCALL record"

yamak

ya çıldırmak üzereyim verdiğiniz fonksiyonları direkt .c uzantılı dosyaya kopyaladım kütüphane falan çağırmadım. Ama yine aynı hatayı veriyo

yamak

Arkadaşlar tekrar uğraşmaya başladım bu konu ile ama yine aynı sorun string.h ı include ediyorum ama hata veriyo hi-tech keil da hata vermiyo ama hi tech de veriyo. daha önce böyle bi sorunla karşılaşan var mı?

arslan74

Merhaba,

Hi-Tech Ansi C standarında bir derleyici normalde öyle bir hata vermemesi gerekir.
Ama Microchip'in C18 derleyicisin de memcpy değişik versiyonları var. Microchip, Hi-Tech'i satın aldıktan sonra kendisine uydurmuş olabilir.


memcpy
memcpypgm
memcpypgm2ram
memcpyram2pgm   

Function:  Copy the contents of the source buffer into the destination buffer. 
Include:  string.h

Prototype:  void * memcpy(
             void * dest,
             const void * src,
             size_t memsize );
rom void * memcpypgm(
             rom void * dest,
             const rom void * src,
             sizerom_t memsize );
void * memcpypgm2ram(
             void * dest,
             const rom void * src,
             sizeram_t memsize );
rom void * memcpyram2pgm(
             rom void * dest,
             const void * src,
             sizeram_t memsize );

Arguments:  dest
Pointer to destination array.
src
Pointer to source array.
memsize
Number of bytes of src array to copy into dest. 
Remarks:  This function copies the first memsize number of bytes in src to the array dest. If src and dest overlap, the behavior is undefined. 
Return Value:  This function returns the value of dest. 
File Names:  memcpy.asm
memcpyp2p.asm
memcpyp2r.asm
memcpyr2p.asm


Kaynak: hlpC18Lib




yamak

Arkadaşlar hi tech de debug yaptım düzeldi. Neden debug yapmadan önce böyle bi hata veriyodu anlamadım.  ???

EMG81

#7
Üstesinden gelmene sevindim.

void * memcpy(void * dst, const void * src, unsigned int count);

Birisi bana;
Şu çarpma işaretlerinin ne işe yaradığını
Parantez içinde tam olarak ne olduğunu
Genel olarak bu kodun ne işe yaradığını

Anlatabilirmi ?

yamak

#8
Öncelikle teşekkür ederim. Pointer olarak adlandırılıyo. bellekten yer ayırmaya yarıyo. örneğin şöyle bi fonksiyon olsun. fonksiyon(char* a,char* b); bu fonksiyona parametre gönderirken adres göndermek zorundasınız. Fonksiyonları parametreleri pointer tipli olmasının nedeni genelde gönderilen parametre değerinin fonksiyon içinde değiştirilmesi istenmesidir. yani kısacağı direkt adrese ulaşmak istendiği zaman * işareti kullanılıyo. bir örnek daha vereyim:
int i;
int *j
i=5;
j=&i;
printf("%d",*j);
buradaki işlem sonucu ekrana 5 yazar çünkü ilk olarak i ye 5 değeri yükledik sonra i'nin adresini j yükledik sonra j adresindeki veriyi ekrana yazdırdık.burada j' pointer olarak tanımlamakla j adres gösteriyo oldu *j de j adresindeki veriyi. bir de void* dst olarak belirtilerek te *dst ye herhangi bir türden gösterici atanabilsin diye. yani char,int vb türlerden göstericiler bu değişkene atanabilir.