#include <stdio.h>

#define HIT_NUM    5

int main()
{
  #if HIT_NUM==5
    puts("매크로 상수 HIT_NUM은 현재 5입니다.");
  #else
    puts("매크로 상수 HIT_NUM은 현재 5가 아닙니다.");
  #endif
  return 0;
}

컴파일 할때 바로 디파인 하는 방법 CL -DHIT_NUM=5 파일이름.C



 #include <stdio.h>

#define STRING_JOB(A, B)  #A "의 직업은 " #B "입니다."

int main()
{

  printf("%s \n", STRING_JOB(김재성,김연아전남편));
  printf("%s \n", STRING_JOB(김재성,손연재현남편));

  return 0;
}

김재성의 직업은 김연아전남편입니다.

김재성의 직업은 손연재현남편입니다.


분할컴파일


메인.c

 #include <stdio.h>


void test(void);

extern int iNum;    //외부파일에 iNum이 선언되어있음
int main()
{
  iNum = 100;    //외부에 int iNum;이라고 외부에 정의되어
        //있어서 대입가능함.   
  printf("%d \n", iNum);  //100나옴
  test();      //테스트함수에서 1증가하고돌아옴
  printf("%d \n", iNum);  //101나옴
  

  return 0;
}

테스트.c 

static int iNum;  //전역변수에 쓰면 다른곳에서 쓸수없게 만듬

void test(void)
{
  ++iNum;
}



'C언어' 카테고리의 다른 글

C와C++ 컴파일 할때 함수이름 주의  (0) 2014.09.30
20140428 파일입출력 함수  (0) 2014.04.28
20140428 USART통신  (0) 2014.04.28
20140425 파일열고닫기  (0) 2014.04.25
20140422 링크드함수 삽입.삭제  (0) 2014.04.22
by 날라차숑 2014. 4. 30. 17:13






'디지털회로' 카테고리의 다른 글

20140508 인터럽트  (0) 2014.05.08
CDS  (0) 2014.05.07
20140425  (0) 2014.04.25
20140424 USART  (0) 2014.04.24
20144022 문자열 숫자, 출력하기  (0) 2014.04.22
by 날라차숑 2014. 4. 30. 15:50


 #include <stdio.h>


int main(int iarg, char * cparg[])
{
  FILE * src;
  FILE * des;
  int ch;

  if(3!=iarg)
  {
    printf("사용법 : main4.c 원본파일 사본파일 \n");
    return 0;
  }

  src = fopen(cparg[1],"rt"); 읽기모드
  if(src==0)
  {

    puts("can't open a original file");
    return -1;  
  }
  des = fopen(cparg[2],"wt"); 쓰기모드
  
  if(des==0)
  {

    puts("can't open a copyfile");
    fclose(src);
    return -1;
  }

  while((ch=fgetc(src))!=EOF) src에 들어가있는 아스키코드값을 하나하나씩 출력
    fputc(ch, des);
  if(feof(src)!=0)      
    puts("copy completed");    //파일의 끝이면 0이 아닌값 반환
  else
    puts("copy failed");    //파일의 끝이아니면 0값 반환
  fclose(src);
  fclose(des);
}


 #include <stdio.h>

//#pragma pack(1) 프라그마 쓰면 1byte트씩 하나씩하나씩 차곡차곡 들어가는거 아시져?
struct smart
{
  int iNum;
  char A;
  int iNum2;
  char B;
  short C;
};
//#pragma pack(4)

int main()
{
//  int iNum=0x41424344;
  struct smart test;
  struct smart test2;

  FILE * fp;
  fp = fopen("AA.bin","wb");

  test.iNum = 0x41424344;
  test.A = 'Z';
  test.iNum2 = 0x45464748;
  test.B = 'Y';
  test.C = 0x494A;  

//  fwrite(&iNum,4,1,fp);
  fwrite(&test,sizeof(struct smart),1,fp);   //혹은 sizeof(test)로 해도됨
  fclose(fp);

  fp = fopen("AA.bin","rb");    
  fread(&test2,sizeof(struct smart),1,fp);  //fp를 읽어서 
  fclose(fp);


  printf("struct smart'size: %d \n"sizeof(struct smart)); 스마트구조체 크기

  printf("%08X \n", test2.iNum);
  printf("%c \n", test2.A);
  printf("%08X \n", test2.iNum2);
  printf("%c \n", test2.B);
  printf("%08X \n", test2.C);

  return 0;
}




'C언어' 카테고리의 다른 글

C와C++ 컴파일 할때 함수이름 주의  (0) 2014.09.30
20140430 분할컴파일  (0) 2014.04.30
20140428 USART통신  (0) 2014.04.28
20140425 파일열고닫기  (0) 2014.04.25
20140422 링크드함수 삽입.삭제  (0) 2014.04.22
by 날라차숑 2014. 4. 28. 16:49

 #ifndef _USART_H_

#define _USART_H_

#include "smart.h"

#define UDR0      (*((volatile unsigned char *)0x2C))
#define UCSR0A    (*((volatile unsigned char *)0x2B))
#define UCSR0B    (*((volatile unsigned char *)0x2A))
#define UCSR0C    (*((volatile unsigned char *)0x95))
#define UBRR0H    (*((volatile unsigned char *)0x90))
#define UBRR0L    (*((volatile unsigned char *)0x29))

#define UDR1      (*((volatile unsigned char *)0x9C))
#define UCSR1A    (*((volatile unsigned char *)0x2B))
#define UCSR1B    (*((volatile unsigned char *)0x9A))
#define UCSR1C    (*((volatile unsigned char *)0x9D))
#define UBRR1H    (*((volatile unsigned char *)0X98))
#define UBRR1L    (*((volatile unsigned char *)0x99))

//UCSRnA~C First
#define RXC    7  수신완료비트  
#define TXC    6  전송완료비트
#define UDRE   5  
#define FE     4  프레임에러비트
#define DOR    3  데이터오버런
#define UPE    2  패리티 오류비트
#define U2X    1  1들어가면 속도 두배
#define MPCM   0  병렬처리 멀티모드

#define RXCIE  7 인터럽트 활성화
#define TXCIE  6
#define UDRIE  5
#define RXEN   4  
#define TXEN   3  
#define UCSZ2  2 캐릭터사이즈
#define RXB8   1
#define TXB8   0

#define UMSEL  6
#define UPM1   5
#define UPM0   4
#define USBS   3
#define UCSZ1  2  레지스터B와 공유함,캐릭터 사이즈
#define UCSZ0  1
#define UCPOL  0
//UCSRnA~C End
#define BAUD 19200
#define UBRR  (((F_OSC)/((BAUD)*16L))-1)

void usart_init(void)
{
/*   방법1 !BAUD와 REGISTER값에 따라 값을 바꿔야함
  UBRR0H = 0x00;
  UBRR0L = 0x08; 
*/

//   방법2 !BAUD속도만 바꿔주면 된다.
  UBRR0H = UBRR >> 8;
  UBRR0L = UBRR;
  UCSR0A =  (0<<TXC)|(0<<U2X)|(0<<MPCM);
  UCSR0B =  (0<<RXCIE)|(0<<TXCIE)|(0<<UDRIE)|(1<<RXEN)|(1<<TXEN)|(0<<UCSZ2);
  UCSR0C =  (0<<UMSEL)|(1<<UPM1)|(0<<UPM0)|(0<<USBS)|(1<<UCSZ1)|(1<<UCSZ0);
}
void usart_tx(void)
{
  while(0==(UCSR0A &(1<<UDRE)));  // 1이 될 때까지 무한반복(전송이 가능해질때까지 대기)
  UDR0 = 'A';
  UDR0;
  

void usart_str(const char * cstring)
{
  while(0!=*cstring)
  {
  usart_tx(* cstring)
  cstring++
  }
}

#endif //_USART_H_



'C언어' 카테고리의 다른 글

20140430 분할컴파일  (0) 2014.04.30
20140428 파일입출력 함수  (0) 2014.04.28
20140425 파일열고닫기  (0) 2014.04.25
20140422 링크드함수 삽입.삭제  (0) 2014.04.22
20140421 링크드리스트  (0) 2014.04.21
by 날라차숑 2014. 4. 28. 12:40


 #include <stdio.h>


int main(void)
{
  FILE * src = fopen("src.txt""rt");   //Read 파일 오픈

  FILE * des = fopen("dst.txt""wt");   //Write파일 오픈

  int ch;

  if(src==0 || des==0)
  {
    puts("can't open a file");
    return -1;
  }

  while((ch=fgetc(src))!=EOF)      //src.txt에 있는 파일을 복사함
    fputc(ch, des);
  if(feof(src)!=0)      
    puts("copy completed");    //파일의 끝이면 0이 아닌값 반환
  else
    puts("copy failed");    //파일의 끝이아니면 0값 반환
  fclose(src);
  fclose(des);
}



 #include <stdio.h>


int main()
{
  char str[30];
  int ch;
  FILE * fp = fopen("simple.txt""rt");
  if(fp==0)    //fp가 널값이면
  {
    printf("can't open a file"); //열수없음
    return -1;
  }

  ch = fgetc(fp);    
  printf("%c \n", ch);
  ch = fgetc(fp); 
  printf("%c \n", ch);

  fgets(str, sizeof(str), fp); 
  printf("%s", str);
  fgets(str, sizeof(str), fp);
  printf("%s", str);

  fclose(fp);
  return 0;
}  



'C언어' 카테고리의 다른 글

20140428 파일입출력 함수  (0) 2014.04.28
20140428 USART통신  (0) 2014.04.28
20140422 링크드함수 삽입.삭제  (0) 2014.04.22
20140421 링크드리스트  (0) 2014.04.21
20140417 링크드리스트  (0) 2014.04.17
by 날라차숑 2014. 4. 25. 17:19



'디지털회로' 카테고리의 다른 글

CDS  (0) 2014.05.07
20140430 ADC제어  (0) 2014.04.30
20140424 USART  (0) 2014.04.24
20144022 문자열 숫자, 출력하기  (0) 2014.04.22
20140421 LCD2  (0) 2014.04.21
by 날라차숑 2014. 4. 25. 11:16




'디지털회로' 카테고리의 다른 글

20140430 ADC제어  (0) 2014.04.30
20140425  (0) 2014.04.25
20144022 문자열 숫자, 출력하기  (0) 2014.04.22
20140421 LCD2  (0) 2014.04.21
20140417 LCD  (0) 2014.04.17
by 날라차숑 2014. 4. 24. 13:58

#include "LINKEDLIST.H"


void node_print1(node * head)
{
  while(0!=head)
  {
    
    printf("%c->", head->data);
    head=head->next;
  }
  printf("\n");
}
void node_print(node * head)
{
  for(head; 0!=head; head=head->next)
  {
    printf("%c->", head->data);
  }
  printf("\n");

}
void node_free(node * head)
{
  node * temp;
  for(temp=head; 0!=head; temp=temp->next)
  {
    head = head->next;
    free(temp);
    printf("malloc was deleted \n");
  }

}
node* node_insert(node * head, char cdata)
{
  node * stpnew;
  node * stpfront;
  node * stprear;
  stpfront = head;
  stprear = head; 
  stpnew  = malloc(sizeof(node));
  stpnew->data = cdata;
  stpnew->next = 0;

  while(0!=stprear) //serching
  {
     if(stprear->data > stpnew->data) // 삽입할위치판단 
     {
        break;
     }
    stpfront = stprear;
    stprear = stprear->next; 
    
  }
  if(head!=stprear)
  {
    stpnew->next =stprear;
    stpfront->next =stpnew;
  }
  else
  {
    stpnew->next = head;
    head = stpnew;
  }
  return head;
}
node* node_del(node * head, char cdata)
{

  node * stpfront;
  node * stprear;
  stpfront = head;
  stprear = head; 


  while(0!=stprear) //serching
  {
     if(stprear->data == cdata) // 삽입할위치판단 
     {
        break;
     }
    stpfront = stprear;
    stprear = stprear->next; 
    
  }
  if0== stprear)
  {
      return head;
  }//없을때 
  else if(head !=stprear)
  {
    stpfront->next= stprear->next;
  }//중간 삭제
  else
  {
    head = head->next;
  }//앞삭제 
  free(stprear);
  
  return head;
}


'C언어' 카테고리의 다른 글

20140428 USART통신  (0) 2014.04.28
20140425 파일열고닫기  (0) 2014.04.25
20140421 링크드리스트  (0) 2014.04.21
20140417 링크드리스트  (0) 2014.04.17
20140406 링크드리스트 분할컴파일  (0) 2014.04.16
by 날라차숑 2014. 4. 22. 17:47

 #include <stdio.h>

#include "smart.h"

void inst_clear(void);
void inst_return(void);
void inst_entry(void);
void inst_display(void);
void inst_cursor(void);
void inst_function(void);
void data_a(void);
void lcd_init(void);

int main(void)
{

  lcd_init();
  data_a();
  data_a();
  data_a();
  data_a();
  data_a();
  

  
  while(1);
  {
  
  }        
  return 0;
}

void data_a(void)
{
  volatile unsigned int uicnt;
  DDRA = (1<<PIN_RS)|(1<<PIN_RW)|(1<<PIN_E);
  DDRC = 0xFF;
  PORTA = (0<<PIN_E);

  PORTA=(1<<PIN_RS)|(0<<PIN_RW)|(0<<PIN_E);
  DELAY(10000);
  PORTA=PORTA|(1<<PIN_E);
  DELAY(500);
  PORTC='A';
  DELAY(10000);
  PORTA=PORTA&~(1<<PIN_E);
  DELAY(500);
  
}
void lcd_init(void)
{
  volatile unsigned int uicnt;
  DELAY(500);
//  inst_function();
  lcd_inst(INST_FUNCTION);
//  inst_entry();
  lcd_inst(INST_ENTRY);
//  inst_cursor();
  lcd_inst(INST_CURSOR);
//  inst_display();
  lcd_inst(INST_DISPLAY);
//    inst_clear();
  lcd_inst(INST_CLEAR);
//  inst_return();
  lcd_inst(INST_RETURN);
}


문자열을 출력하는 함수를 선언하자
void
 lcd_str(const char * cstring)

{


  while(0!=*cstring)
    {
      lcd_data(*cstring);
      ++cstring;
    }
}


숫자를 출력하는 함수를 선언하자
void
 lcd_num(unsigned char ucnum)
{
  static unsigned char ucbuffer[] = "123";
  ucbuffer[0]='0'+(ucnum/100);        //백단위 자리수 구하기
  ucbuffer[1]='0'+((ucnum%100)/10);   //십단위 자리수 구하기
  ucbuffer[2]='0'+(((ucnum%100)%10)); //일단위 자리수 구하기
  lcd_str(ucbuffer);
}


'디지털회로' 카테고리의 다른 글

20140425  (0) 2014.04.25
20140424 USART  (0) 2014.04.24
20140421 LCD2  (0) 2014.04.21
20140417 LCD  (0) 2014.04.17
20140409 WinAVR설치  (0) 2014.04.09
by 날라차숑 2014. 4. 22. 10:27

main.c

 #include "LINKEDLIST.H"


int main()
{
  node * head = 0;
  head = malloc(sizeof(node));
  head->data = 'b';
  head->next = malloc(sizeof(node));
  head->next->data = 'd';
  head->next->next = 0;

  node_print(head);
  head = node_insert(head, 'c');
  head = node_insert(head, 'e');
  node_print(head);

  node_free(head);  
  return 0;
}

linkedlist.c

 #include "LINKEDLIST.H"


void node_print1(node * head)
{
  while(0!=head)
  {
    
    printf("%c->", head->data);
    head=head->next;
  }
  printf("\n");
}
void node_print(node * head)
{
  for(head; 0!=head; head=head->next)
  {
    printf("%c->", head->data);
  }
  printf("\n");

}
void node_free(node * head)
{
  node * temp;
  for(temp=head; 0!=head; temp=temp->next)
  {
    head = head->next;
    free(temp);
    printf("malloc was deleted \n");
  }

}
node* node_insert(node * head, char cdata)
{
  node * stpnew;
  node * stpfront;
  node * stprear; //변수선언
  stpfront = head;
  stprear = head; 
  stpnew  = malloc(sizeof(node));
  stpnew->data = cdata;
  stpnew->next = 0;

  while(0!=stprear) //stp가 들어가기 위한 위치를 찾아라.
  {

      첫번째 포문 아래의 stprear의 데이터는 b이다. stpnew의 데이터는 C이다

          if실행이 안된다.

     두번째 포문 stprear의 data는 d 참 반복문을 빠져나온다.
     if(stprear->data > stpnew->data) // 삽입할위치판단 
     {
        break;
     }
    stpfront = stprear; stprear가 가리키는 곳을 stpfront도 가리킨다.

    stprear = stprear->next; 그다음 stprear->next 즉 d를 가리킨다.
    
  }
  stpnew->next =stprear;  stprear의 주소를 stpnew->next에 넣어준다.
  stpfront->next =stpnew; stpfont->next에 넣어주면 stpfront - stpnew - stprear 트로이카 탄생
  return head;
}


 


by 날라차숑 2014. 4. 21. 17:51