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

  • 2 Replies
  • 1324 Views
*

Offline tha

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

*

Offline pa_ul

  • ***
  • 247
    • View Profile
Re: สอบถามโปรแกรม stm32 ต่อ eeprom
« Reply #1 on: March 14, 2014, 10:30:31 am »
ก่อนอื่นต้องบอกว่าในภาษา 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

*

Offline tha

  • *****
  • 1073
    • View Profile
Re: สอบถามโปรแกรม stm32 ต่อ eeprom
« Reply #2 on: March 14, 2014, 11:35:20 am »
พอจะเข้าใจแล้วครับ a มีหน่วยเป็นไบท์ (u8 Tx1_Buffer[] มีหน่วยเป็นไบท์ sizeof(*(a)) เลยเท่ากับ 1 ( 1 ไบท์)) ขอบคุณครับ