วันที่โพสต์: Apr 20, 2011 9:9:7 AM
CodeVision ตอนที่ 2
Comments
เหมือนกันกับภาษาซี CodeVision ก็มีรูปแบบการเขียนคอมเมนท์ หรือ หมายเหตุ ของโปรแกรม เพื่อเอาไว้เขียนคำอธิบายโปรแกรม หรือสิ่งที่เราต้องการสื่อสารให้ผู้ที่มาอ่านโค๊ดของเราในภายหลัง หรือเอาไว้ให้เราอ่านเอง แต่ไม่ต้องการให้ Complier หรือตัวแปรภาษาโปรแกรม สนใจในส่วนนี้ เรามีรูปแบบการเขียน Comment สองรูปแบบคือ
รูปแบบที่ 1 /* This is comment */
หรือ
/* This is comment
This is comment
This is comment */
สามารถที่จะเขียนคอมเมนต์ หรือหมายเหตุ บรรทัดเดียว หรือหลายบรรทัดก็ได้
และ รูปแ่บบที่ 2 // This is comment
รูปแบบนี้ เขียนได้เพียงบรรทัดเดียว
Reversed Keywords หรือคำสงวน
คำสงวนพวกนี้ เป็๋นคำที่เป็นคำสั่งพิเศษ ที่โปรแกรมต้องการใช้ ห้ามให้เรานำคำเหล่านี้ ไปตั้งเป็นชื่อตัวแปร ซึ่งเราจะได้พบเห็นในตอนต่อๆ ไป คำสงวนเหล่านี้ ได้แก่
__eeprom enum static
__flash extern struct
__interrupt flash switch
__task float typedef
_bool for union
break goto unsigned
bit if void
bool inline volatile
case int while
char interrupt
const long
continue register
default return
defined short
do signed
double sizeof
eeprom sfrb
else sfrw
Identifiers
ในการตั้งชื่อตัวแปร ตัวใหญ่ กับตัวเล็ก ให้ความหมายที่ต่างกัน เราสามารถที่จะตั้งชื่อตัวแปรขึ้นต้นด้วย ตัวอักษา A...Z หรือ a.....z หรือใช้ตัว __ เครื่องหมาย underscore ในการนำหน้าชื่อตัวแปร ก็ได้
Data Types
ชนิดของข้อมูลแต่ละประเภท ใช้จำนวนหน่วยความจำที่แตกต่างกัน และให้ขอบเขตของค่าข้อมูลที่แตกต่างกันดังตารางด้านล่างนี้
Constants
ค่าคงที่ เป็นค่าที่เราประกาศแล้ว เป็นตัวเลขอาจจะเขียนอยู่ในรูปเลขฐานสิบ (เช่น 1234)
ถ้าต้องการเขียนให้อยู่ในรูปเลขฐานสอง เราจะเขียนได้เป็น 0b นำหน้าเลขฐานสอง เช่น 0b101001
ในเลขฐานสิบหก เราจะให้ 0x นำหน้าตัวเลขฐานสิบหก เช่น 0xff
หรือ ถ้าเป็นเลขฐานแปด เราจะใช้ 0 นำหน้า เช่น 077
ถ้าเราต้องการบอกให้ complier ทราบว่าเลขต่อไปนี้ เป็นข้อมูลชนิด unsigned integer เราอาจจะใส่ U ตามหลังเลข เช่น 1000U
ถ้าเป็นข้อมูลที่เป็น Long integer เราจะใช้ L ตามหลังตัวเลข เช่น 99L
สำหรับข้อมูลที่เป็น Unsigned long integer เราจะใช้ผสมกันระหว่าง U และ L เช่น 99UL
จำนวนที่เป็นเลขทศนิยม Floating point เราจะใช้ F ตามหลังเลขทศนิยม เช่น 1.234F
ค่าคงที่ ที่เป็นตัวอักขระ เราจะใช้เครื่องหมาย single quote เช่น 'a'
แต่ถ้าเป็นค่าคงที่ ทีเป็นข้อความ หรือ string เราจะใช้ double quote เช่น "Hello World"
เราสามารถประกาศตัวแปร constant ได้ทั่ง Global (เห็นทุกฟังก์ชัน) หรือแบบ Local (เห็นเฉพาะ ในฟังก์ชันที่ประกาศ) โดยใช้คำว่า cost นำหน้า ตัวแปรที่เราประกาศ ดูตัวอย่าง
/* Global constants declaration */
const char char_constant = 'a';
const int b=1234+5;
const long long_int_constant1 = 99L;
const long long_int_constant2 = 0x1000000;
const float pi = 3.14;
void main(void) {
/* Local constant declaration */
const long f = 2222222;
const float x = 1.5;
}
นอกจากนี้ เราสามารถประกาศตัวแปรค่าคงที่ ที่เป็น array ได้ด้วย โดยที่ index ตัวเลขมีลำดับเป็น 0 เช่น
const char string_constant2[] = "This is a string constant";
const int abc[3] = {1,2,3};
แต่ถ้าเราประกาศแบบนี้ จะทำให้ 2 ลำดับแรก มีค่าเป็น 1 และ 2 ลำดับที่เหลือ จะกลายเป็นเลขศูนย์ทั้งหมด
const int integer_array2[10] = {1,2};
หรือจะสร้างเป็น array หลายมิติก็ได้
const int multidim_array[2][3] = {{1,2,3},{4,5,6}};
ถ้าหากโปรแกรม CodeVision ถูกกำหนดที่เมนู Project|Configuration|C Complier|Code Generator|Store Global| Constant in FLASH Memory ถูกกำหนดเป็น Enable แล้ว ต้ัวแปร global constant เมื่อถูกประกาศแล้ว (มีคำว่า const หน้าตัวแปร) จะถูกเก็บไว้ที่ FLASH Memory เมื่อถูกคอมไำพล์ แต่ถ้าที่เมนู ถูกกำหนดไว้เป็น disabled ตัวแปรที่ประกาศเป็น const จะถูกเก็บไ้ว้ที่ RAM memory และตัวแปรที่เป็น Local constant จะถูกเก็บไว้ที่ RAM memory.
คำว่า flash หรือ _flash เมื่อนำมาใช้ในการประกาศตัวแปรที่เป็นค่าคงที จะเป็นการนำค่าของตัวแปรนั้นไปเก็บไว้ที่ FLASH memory ไม่ว่าเราจะไปตั้งค่าที่ Store Global Constant in FLASH memory หรือไม่ก็ตาม
รูปแบบ
flash <type definition> <identifier> = constant expression;
_flash <type definition> <identifier> = constant expression;
ตัวอย่าง
flash int integer_constant = 1234+5;
flash char char_constant = 'a';
flash long long_int_constant1 = 99L;
flash long long_int_constant2 = 0x1000000;
flash int integer_array1[] = {1,2,3};
flash char string_constant1[] = "This is a string constant located in FLASH";
ในกรณีที่เราต้องส่งค่าที่เป็น string เข้าไปในฟังก์ชัน เราจะต้องส่งค่าแบบ pointer เท่านั้น ในการส่งค่าเข้าไปนี้ เราสามารถที่จะสั่งให้ทำการเก็บค่าตัวแปรที่ส่งเข้าไปไว้ที่ memory โดยใช้ keyword constant ที่เราได้กล่าวไว้แล้วได้ ตัวอย่างการนำไปใช้งาน และประสิทธิภาพ
/* This function displays a string located in RAM. */
void display_ram(char *s){
}
/* This function displays a string located in FLASH. */
void display_ram(flash char *s){
}
/* This function displays a string located in EEPROM. */
void display_ram(eeprom char *s){
}
void main(void) {
/* ข้อความ "Hello world" จะถูกเก็บไว้ที่ FLASH memory โดย complier
แล้วจะทำการ copy ไปไว้ที่ส่วนเริ่มต้นของโปรแกรม นั่นคือ RAM เำื่พื่อให้
ตัวแปร pointer เข้ามาใช้งานได้ เพื่อนำเข้าข้อมูลส่งเข้าไปใน function
โค๊ดตัวอย่างนี้ ให้ประสิทธิภาพของโปรแกรมค่อนข้างต่ำ เพราะว่า FLASH และ
RAM memory ถูกนำไปใช้ทั้งคู่ */
display_ram("Hello world");
/* ข้อความ "Hello world" จะถูกเก็บไว้ที่ FLASH memory เท่านั้น
เป็นตัวอย่างการเขียนโปรแกรมที่ดี โค๊ดมีประสิทธิภาพดี */
display_flash("Hello world");
/* ข้อความ "Hello world" จะถูกเก็บไว้ที่ EEPROM memory เท่ีานั้น.
โค๊ดมีประสิทธิภาพมากที่สุด เพราะ FLASH memory ไม่ได้ถูกนำมาใช้เพื่อการนี้เลย */
display_eeprom("Hello world");
while (1);
}