CodeVision ตอนที่ 2

วันที่โพสต์: Apr 20, 2011 9:9:7 AM

CodeVision ตอนที่ 2

CodeVision ตอนที่ 1

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);

}