สอบถามโปรแกรม stm32 ต่อ eeprom

Started by tha, March 14, 2014, 09:34:22 AM

Previous topic - Next topic

tha

อยากสอบถามวิธีการเช็ค size ของข้อมูลด้วยฟังชั่น
#define countof(a) (sizeof(a) / sizeof(*(a)))
(ในตัวอย่าง main.c ที่แนบมาด้วย)
คือผมไม่เข้าใจความหมายของฟังชั่นนี้ครับ ท่านใดพออธิบายได้บ้าง

pa_ul

ก่อนอื่นต้องบอกว่าในภาษา C การใช้ #define เพื่อทำงานคล้ายๆฟังก์ชั่นอย่างที่ถามมา จะเรียกว่าแมคโคร ไม่ใช่ฟังก์ชั่น เพราะหลังจากการคอมไพล์ มันจะเป็นโค้ดที่แทรกอยู่ ณ ตำแหน่งที่เรียกใช้ ไม่ได้เป็นฟังก์ชั่นแยกออกมาต่างหาก ที่จะถูกเรียกใช้ด้วยการ call

sizeof(a) จะให้ขนาดของตัวแปร a ในหน่วยไบท์
sizeof(*(a)) จะมอง a เป็น pointer ซึ่งเมื่อใส่ * นำหน้าเข้าไป จึงเป็นการชี้ไปที่ตัวแปรจริง ดังนั้น sizeof ตรงนี้จึงใหัค่าขนาดของ"ชนิด"ของตัวแปร

เมื่อจับหารกัน ก็จะได้จำนวนนับของตัวแปรนั้น

เช่น
ถ้า a ถูกกำหนดเป็น char a[10]  sizeof(a) จะเท่ากับ 10 และ sizeof(*(a)) จะเท่ากับ 1
ถ้า a ถูกกำหนดเป็น short a[10]  sizeof(a) จะเท่ากับ 20 และ sizeof(*(a)) จะเท่ากับ 2
ถ้า a ถูกกำหนดเป็น long a[10]  sizeof(a) จะเท่ากับ 40 และ sizeof(*(a)) จะเท่ากับ 4

tha

พอจะเข้าใจแล้วครับ a มีหน่วยเป็นไบท์ (u8 Tx1_Buffer[] มีหน่วยเป็นไบท์ sizeof(*(a)) เลยเท่ากับ 1 ( 1 ไบท์)) ขอบคุณครับ