CodeVisionAVR ANSI C Language 요점 정리
l CodeVisionAVR 특징
- Atmel AVR용 통합 환경 C 컴파일러.
통합 환경 내에 여러 가지 ISP 기능 포함.
통합 환경 내에 비동기 통신 터미널 기능 내장.
- 윈도우 95, 98, NT4.0, 2000 환경에서 동작
- 생성된 COFF파일은 AVR Studio를 사용하여 소스 레벨 디버깅 가능.
- 표준 라이브러리 외에 아래의 여러 가지 주변 소자 라이브러리 포함
문자형 LCD 모듈
Philips I2C 버스
온도 센서 소자(LM75, DS1820)
Real Time Clock 소자 지원(PCF8563,PCF8583, DS1302, DS1307)
Dallas 1 Wire 프로토콜
Thermometer/Thermostat (ds1621)
SPI
Delay 함수
Power management
- 자동 소스 생성 기능 내장
l 변수 / 함수 / 레벨의 이름(Identifiers) 지정
- 알파벳 문자(A..Z, a..z)와 숫자(0…9) 그리고 underscore(_)문자 사용 가능.
- 시작은 알파벳 문자나 underscore로 사용 가능.
- 대소문자 구분 있음.
- 최대 32문자까지 사용 가능.
l CodeVisionAVR의 데이터 타입
데이터 타입 |
크기(bit) |
범 위 |
Bit |
1 |
0,1 |
Char |
8 |
-128 ~ 127 |
Unsigned char |
8 |
0 ~ 255 |
Signed char |
8 |
-127 ~ 127 |
Int |
16 |
-32768 ~ 32767 |
Short int |
16 |
-32767 ~ 32767 |
Unsigned int |
16 |
0 ~ 65536 |
Signed int |
16 |
-32767 ~ 32767 |
Long int |
32 |
-2147483648 ~ 2147483647 |
Unsigned long int |
32 |
0 ~ 4294967295 |
Signed long int |
32 |
-2147483648 ~ 2147483647 |
Float |
32 |
-0.175e-38 ~ +0.402e38 |
Double |
32 |
-0.175e-38 ~ +0.402e38 |
l 주석(Comments) 처리
주석 시작 “/*”
주석 끝 “*/”
예: /* 이것은 주석 입니다 */
한 줄 주석 처리: “//”
예: // 이것도 주석입니다.
l 전처리(Preprocessor)
- <![endif]>파일 포함 처리:
#include <file name> /* 컴파일러 설치 사용 디렉터리에서 참조 */
#include “file name” /* 현재 작업 디렉터리에서 참조 */
- <![endif]>macro define:
#define ALFA 0xff /* ALFA 심볼을 0xff로 동일 처리 */
/* 소스 문에서 ALFA를 모두 0xff로 컴파일 처리 함 */
- <![endif]>파라미터를 가질 수 있음:
#define SUM(a,b) a+b
int i=SUM(2,3); /* i=2+3;으로 치환 처리 */
- 매크로 파라미터에 #을 사용하면 문자열로 치환:
#define PRINT_MESSAGE(t) printf(#t)
PRINT_MESSAGE(Hello); /* printf(“Hello”)와 동일 처리 */
- 두개의 파라미터가 ## 연산자로 하나로 합해 짐:
#define ALFA(a,b) a ## b
char ALFA(x,y)=1; /* char xy=1; 과 동일 처리 */
- 역 슬래시()를 사용하여 다음 줄까지 연장:
#define MESSAGE “This is a very
long text…”
- define 취소: #undef 사용
#undef ALFA
- 조건부 컴파일 처리 : #ifdef, #ifndef, #else, #endif
#ifdef macro_name
[문 1 그룹]
#else /* option */
[문 2 그룹]
#endif
설명: 만일 macro_name이 define 되어 있으면 [문 1 그룹]을 컴파일 하고, 그렇지 않으면 [문 2 그룹]을 컴파일 한다.
- 또 다른 조건부 컴파일 처리: #if, #elif, #else, #endif
#if expression1
[문 1 그룹]
#elif expression2
[문 2 그룹]
#else
[문 3 그룹]
#endif
설명: 만일 expression1이 true이면 [문 1 그룹]을 컴파일 하고,
그렇지 않고 만일 expression2가 true이면 [문 2 그룹]을 컴파일 하고,
그 외에는 [문 3 그룹]을 컴파일 한다.
- #error 문: 컴파일을 중지하고 에러 메시지를 표시.
예:
#error This is an error!
- #pragma 문: 컴파일러 특수 지시 문
#pragma warn- /* warning 디스어블 */
#pragma warn+ /* warning 인에이블 */
#pragma opt- /* 최적화 안 함 */
#pragma opt+ /* 최적화 함 */
#pragma savereg- /* 레지스터 저장 안 함 */
#pragma savereg+ /* 레지스터 저장 함 */
#pragma library mylib.lib /* 링크 라이브러리 지정 */
n 상수(Constants)
2진수 : 0b로 시작(예 0b101001)
16진수 : 0x로 시작 (예. 0xff)
8진수 : 0으로 시작 (예. 0777)
Unsigned integer 상수는 뒤에 U사용: (예, 10000U)
Long integer 상수는 뒤에 L사용: (예, 99L)
Unsigned Long integer 상수는 뒤에 UL사용: (예, 99UL)
Floating point 상수는 뒤에 F사용: (예, 1.234F)
문자 상수는 1중 따옴표로 처리: (예, ‘a’)
문자열 상수는 2중 따옴표로 처리: (예, “Hello world”)
(함수의 파라미터 안에 2중 따옴표 문자열이 있으면 FLASH 메모리에 놓임.)
행렬은 최대 8차까지 가능
n 변수(Variables)
전역(global) 변수와 지역(local) 변수가 있음.
전역(global) 변수 : 함수 외각에 선언, 프로그램 내의 모든 함수에서 사용 가능.
지역(local) 변수 : 함수 내부에 선언, 해당 함수 내에서만 사용 가능.
초기화하지 않은 전역 변수는 프로그램 초기에 0으로 초기화 됨.
예:
/* 전역 변수 선언 */
char a;
int b;
long c = 0x12345678; /* 초기화 */
void main(void){
/* 지역 변수 */
char d;
int e;
long f=22222222; /* 초기화 */
…
}
행렬 변수: 8차까지 가능, 0부터 시작, 초기화하지 않은 전역 행렬 변수 값은 0으로 초기화.
/* 전역 행렬 변수 */
int global_array1[32]; /* 모든 값이 0으로 초기화 */
int global_array2[]={1,2,3};
int global_array3[4]={1,2,3,4};
char global_array4[]=”This is a string”;
int multidim_array[2,3]={{1,2,3},{4,5,6}};
void main(void){
/* 지역 행렬 변수 */
int local_array[3]={11,22,33};
…
}
static 변수: 지역 변수라도 static 선언을 하면 값을 보존할 수 있다.
예:
int alfa(void){
static int n=1; /* static 변수 선언 */
return n++;
'AVR & ATmega' 카테고리의 다른 글
< ATMEGA128 교육용 Board > (0) | 2011.05.02 |
---|---|
CodeVisionAVR ANSI C Language 요점 정리(2) (0) | 2010.04.19 |
Step Motor ( DC12v 용 JSM-24F, 제일엔지니어링) 구동 Program (0) | 2007.11.08 |
Motion Controller(Atmega128) 기본 Program (0) | 2007.11.04 |
Codevision 사용시 주의 사항 (계속업데이트) (0) | 2007.03.05 |