20130423

________논리회로___________________________________________________________________________

 

 

 전가산기(Full Adder)

 

 

 

 

 

         

 

___________________________________________________________________________________________________

 

 

 

 

 

 

______ ARM________________________________________________________________________________________

 

   ldr               PC, = reset_handler

 

 ld (load) , r = (resister)       => 레지스터에 로드하라

 ※ PC(program counter) : code 영역의 주소를 넘겨주는 레지스터

                                      (다음에 실행할 명령의 로케이션이 기억되어있는 레지스터)

                                      (ARM : PC , INTEL : IP(Instruction porint), EIP(Extended Instruction porint[32비트 이상])

       

 어셈블리어 또는 cstartup.s  ,   lowlevel.c  ,  elf32-littlearm.lds  설명

 

 ※ cstartup.s (어셈블리어 파일)

 ※ CPU는 reset 할때마다 읽어들이는 특정주소가 있음. (ARM의 경우는 0번지)

 ※ lowlevel_init 함수는 ARM을 깨우는 함수

 ※ PLL(phase locked loop) : 기본적으로는 입력된 주파수와 같은 주파수로 VCO 발진하는 회로이다. 

                                          분주기(주파수를 1/n으로 하는 것)를 넣으면 VCO는 입력 주파수의 n배로 발진한다.

 ※ 체배기 : 입력 주파수의 정수배가 되는 주파수의 출력을 꺼내는 회로

 ※ Vector table(벡터 테이블) : 점프할수 있도록 점프 위치를 모아 정리해 놓은것

 ※ Elf32-littlearm.lds (링커가 쓰는 파일) , elf 는 파일을 저장하는 방식

 ※ ENTRY point (진입점) : 예> main함수

 ※ 메모리의 code영역을 임베디드에서는 text라고도 부름

 

 

______________________________________________________________________________________________________

 

 

 

 

 

 

_________C 수업__________________________________________________________________________________

 

 임시변수(temp) 를 이용한 연결 리스트의 작성

 

#include <stdio.h>
#include <stdlib.h>

 

typedef struct node
{
      char data;
      struct node *next;


}NODE;

 

int main()

{
       NODE *list, *temp;

 list = (NODE *) malloc (sizeof(NODE));                   // 동적할당 받아 그 주소를 list에 넣는다

 list->data ='a';                                                                    

 temp = list;                                                             // temp 에 첫번째 동적할당 받은 주소를 넣는다 

 temp->next = (NODE *) malloc (sizeof(NODE));      // 첫번째 동적할당받은 곳의 next에 두번째 동적할당받는다

 temp = temp->next;                                                // temp 두번째 동적할당받은 주소를 넣는다 

 temp->data = 'b';

 temp->next = (NODE *) malloc (sizeof(NODE));      // 두번째 동적할당 받은 곳의 next에 세번째 동적할당 받는다 

 temp = temp->next;                                                // temp 에 세번째 동적할당받은 주소를 넣는다 

 temp->data = 'c';

 temp->next = NULL;                                                // 세번째 동적할당 받은  next에 NULL을 넣는다.

 temp = list;                                                              // temp에 첫번째 동적할당 받은 주소를 다시 넣는다.

 

 while(temp != NULL)
 {
      printf("%5c\n", temp->data);    
      temp = temp->next;                                // temp 는 계속 다음 동적할당 받은 주소로 바뀌므로 a b c가 출력됨

 }
 
 temp = list;
 while(temp != NULL)       // 동적할당 해제
 {                                  
      list = list->next;
      free(temp);
      temp = list;
 }
 

 return 0 ;

}

 

 

 반복문을 이용한 연결리스트 

#include <stdio.h>
#include <stdlib.h>
#include <process.h>

 

typedef struct node
{
     char data;
     struct node *next;

 

}NODE;


int main()
{

 FILE *fp;
 
 NODE *temp = NULL, *list = NULL;

 char ch;

 

 if((fp = fopen ("d10-5.dat", "r")) == NULL)
 {
      printf("file open error!");
      exit(-1);
 }

 

 fscanf(fp, "%c", &ch);      // 파일에서 문자 읽어들인다

 

 while(!feof(fp))                // 파일의 끝을 만날때 까지 계속
 {
      temp = (NODE *) malloc (sizeof(NODE));    // 동적할당 받아 temp에 주소 넣는다

      temp->data = ch;                                     // 동적할당 받은 곳의 data에 파일에서 읽어들인 문자 넣는다 

      temp->next = list;                                     // 동적할당 받은 곳의 next에 list 값을 넣는다

      list = temp;                                              // list 에 temp값 넣는다
                                             // 결국 마지막 동적 할당의 next에는 그전에 만들어진 동적할당의 주소가 있고

                                                                   // 맨 처음 만들어진 동적할당의 next에는 NULL이 있게됨.

      fscanf(fp, "%c", &ch);                              // 파일에서 다음 문자를 읽어들인다
 }
 fclose(fp);

  
 temp = list;

 

 while(temp != NULL)            
 {
       printf("%c -> ", temp->data);  // 출력은 파일에 입력된 역순으로 출력됨.

       temp = temp->next;
 }
 

 printf("NULL\n");
 
 temp = list;

 while(temp != NULL) 
 {                                  
      list = list->next;
      free(temp);
      temp = list;
 }
 

 return 0;

}

 

 

 

 연결리스트를 인수로 넘겨받아 내용을 출력하는 함수

#include <stdio.h>
#include <stdlib.h>
#include <process.h>

 

typedef struct node
{
    char data;
    struct node *next;

 

}NODE;

 

void print_list (NODE *);


int main()
{

     FILE *fp;
 
     NODE *temp = NULL, *list = NULL;

     char ch;

 

     if((fp = fopen ("d10-5.dat", "r")) == NULL)
     {
           printf("file open error!");
           exit(-1);
     }

 

    fscanf(fp, "%c", &ch);

 

    while(!feof(fp))
    {
          temp = (NODE *) malloc (sizeof(NODE));

          temp->data = ch;

          temp->next = list;

          list = temp;
  

          fscanf(fp, "%c", &ch);
    }

    fclose(fp);

 

    print_list(list);   // print_list 함수 호출

 

    temp = list;

    while(temp != NULL) 
    {                                  
         list = list->next;
         free(temp);
         temp = list;
    }
 

 

     return 0;

}

 

                                                    // list에 있는 동적할당 주소를 넘겨받아

void print_list (NODE *head)            // NULL 이 나올때까지 연결된 리스트를 따라가며 data변수안의 값을 출력해준다
{                                                   // NULL을 만나면 NULL을 출력하고 함수가 종료됨
      if(head == NULL)
      {
             printf("NULL\n");
      }
      else
      {
           printf("%c ==> ", head->data);
           print_list(head->next);          // 재귀 호출

      }
}

 

_______________________________________________________________________________________________________

 

 

 

 

 

_____실습파일__________

 

10-4.c

 

10-5.c

 

d10-5.dat

_______________________

'스마트 컨트롤러 게시물' 카테고리의 다른 글

20130425  (0) 2013.04.25
20130424  (0) 2013.04.24
20130422  (0) 2013.04.22
20130419  (0) 2013.04.19
20130418  (0) 2013.04.18