==========================================================================================

네트워크 

==========================================================================================

<C>


=꼬리삽입


1. 포인터 추가

2. 끝먼저 찾고 할당


-정렬안됨

-연결리스트중 쉬운 코드


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

typedef struct _node
{
    
int iNum;
    
struct _node * stNext; //자기참조포인터(*없으면 이론상 무한대 크기)
}node;

void Node_Print(node *);
void Node_Free(node *);

void Node_Init(node * stTemp)
{   
    
if(0 == stTemp)
    {
        
return;
    }

    printf(
"번호를 입력하시오\n");
    scanf(
"%d",&stTemp->iNum);
    stTemp-
>stNext = 0;
    
    
return;
}

node * Node_Insert1(node * stHead)
{
    node * stTemp 
= malloc(sizeof(node));
    Node_Init(stTemp);
    stHead 
= stTemp;    // 함수 종료시 stTemp와 stHead 소멸됨
    
    
return stHead;  // 종료전 stHead의 값을 리턴 => main()의 Head로 넣어줌
}


void Node_Insert2(node ** stHead)
{
    node * stTemp 
= 0;
    node * stESeeker; 
// END 찾기

    if(0 == stHead)
    {
        
return;
    }

    stTemp 
= malloc(sizeof(node));
    Node_Init(stTemp);

    
if(0 == *stHead) // 처음 한번만 동작
    {
        *stHead 
= stTemp;   // 함수종료시 stTemp와 stHead 소멸되어도
                            // 동적할당 받은메모리는 남아있으며 
                            // main()의 Head는 동적할당 받은 메모리를 가리킨다
        return;
    }
    
/*
    stTemp2 
= *stHead;
    while(stTemp2-
>stNext)
    {
        stTemp2 
= stTemp2->stNext;
    }
*/
        
    
    stESeeker 
= *stHead;
    
while(1// END 찾을때까지 반복
    {
        
if(0 == stESeeker->stNext) //END면
        {   
            stESeeker-
>stNext = stTemp;
            
break;
        }
        stESeeker 
= stESeeker->stNext;
    }
    
//stHead->stNext = stTemp;            
    //stTemp2->stNext = stTemp;            
    
    
return;
}

int main()
{
    node * Head 
= 0;
    
unsigned int uiCnt;
    
unsigned int uiInput;
//    node * Temp = 0;

/*
    Head 
= malloc(sizeof(node));
    Head-
>iNum = 100;
    Head-
>stNext =  malloc(sizeof(node));   
    Head-
>stNext->iNum = 200; // LINKED LIST(연결리스트) : 목록
    Head-
>stNext->stNext =  malloc(sizeof(node));
    Head-
>stNext->stNext->iNum = 300;
    Head-
>stNext->stNext->stNext = 0;
*/
//    head 
= node_insert1(head); // 포인터
    
    Node_Insert2(
&Head); // 더블포인터 - 1번 호출

    Node_Insert2(&Head); // 2번 호출

    Node_Insert2(&Head); // 3호출
   
    Node_Insert2(
&Head); // 4번 호출

    Node_Insert2(&Head); // 5호출
   
//    printf("input 자료 개수를 입력하시오\n");
//    scanf("%d",
&uiInput);

    //printf("%d-> ",Head->iNum);
    //printf("%d-> ",Head->stNext->iNum);
    //printf("%d-> ",Head->stNext->stNext->iNum);
    /*    Temp = Head;
          while(0 !
= Temp )
          {
            printf("%d-
> ",Temp->iNum);
            Temp 
= Temp->stNext;
          }
          printf("NULL\n"); //putchar('\n');
     */
    Node_Print(Head);
    
/*
       free(Head-
>stNext->stNext); // 반드시 끝에서부터 free
       free(Head-
>stNext);
       free(Head);
     */
    /*
       while(0 !
= Head)
       {
       Temp 
= Head->stNext;
       free(Head);
       Head 
= Temp;
       }
     */
    Node_Free(Head);
    
return 0;
}

void Node_Print(node * Temp)
{
    
while(0 != Temp )
    {
        printf(
"%d-> ",Temp->iNum);
        Temp 
= Temp->stNext;
    }
    printf(
"NULL\n"); //putchar('\n');
    return;
}

void Node_Free(node * Head)
{
    node * Temp;

    
while(0 != Head)
    {
        Temp 
= Head->stNext;
        free(Head);
        Head 
= Temp;
    }
    
return;
}











= 앞으로 삽입


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

typedef struct _node
{
    
int iNum;
    
struct _node * stNext; //자기참조포인터(*없으면 이론상 무한대 크기)
}node;

void Node_Print(node *);
void Node_Free(node *);

void Node_Init(node * stTemp)
{   
    
if(0 == stTemp)
    {
        
return;
    }

    printf(
"번호를 입력하시오\n");
    scanf(
"%d",&stTemp->iNum);
    stTemp-
>stNext = 0;
    
    
return;
}

node * Node_Insert1(node * stHead) 
// * 포인터
{
    node * stTemp 
= malloc(sizeof(node));
    Node_Init(stTemp);
    stHead 
= stTemp;    // 함수 종료시 stTemp와 stHead 소멸됨
    
    
return stHead;  // 종료전 stHead의 값을 리턴 => main()의 Head로 넣어줌
}


void Node_Insert2(node ** stHead) // 뒤로 삽입 -  ** 더블포인터
{
    node * stTemp 
= 0;
    node * stESeeker; 
// END 찾기

    if(0 == stHead)
    {
        
return;
    }

    stTemp 
= malloc(sizeof(node));
    Node_Init(stTemp);

    
if(0 == *stHead) // 처음 한번만 동작
    {
        *stHead 
= stTemp;   // 함수종료시 stTemp와 stHead 소멸되어도
                            // 동적할당 받은메모리는 남아있으며 
                            // main()의 Head는 동적할당 받은 메모리를 가리킨다
        return;
    }
/*
    stTemp2 
= *stHead;
    while(stTemp2-
>stNext)
    {
        stTemp2 
= stTemp2->stNext;
    }
*/
        
    
    stESeeker 
= *stHead;
    
while(1// END 찾을때까지 반복
    {
        
if(0 == stESeeker->stNext) //END면
        {   
            stESeeker-
>stNext = stTemp;
            
break;
        }
        stESeeker 
= stESeeker->stNext;
    }
    
//stHead->stNext = stTemp;            
    //stTemp2->stNext = stTemp;            
    
    
return;
}

void Node_Insert3(node ** stHead) // 앞으로 삽입
{
    node * stTemp 
= 0;

    
if(0 == stHead)
    {
        
return;
    }

    stTemp 
= malloc(sizeof(node));
    Node_Init(stTemp);

    stTemp-
>stNext = *stHead;
    *stHead 
= stTemp;
    
    
return;
}

int main()
{
    node * Head 
= 0;
    
unsigned int uiCnt;
    
unsigned int uiInput;
//    node * Temp = 0;

/*
    Head 
= malloc(sizeof(node));
    Head-
>iNum = 100;
    Head-
>stNext =  malloc(sizeof(node));   
    Head-
>stNext->iNum = 200; // LINKED LIST(연결리스트) : 목록
    Head-
>stNext->stNext =  malloc(sizeof(node));
    Head-
>stNext->stNext->iNum = 300;
    Head-
>stNext->stNext->stNext = 0;
*/
//    head 
= node_insert1(head); // 포인터
/*    
    Node_Insert2(
&Head); // 더블포인터 - 1번 호출

    Node_Insert2(
&Head); // 2번 호출

    Node_Insert2(
&Head); // 3호출
   
    Node_Insert2(
&Head); // 4번 호출

    Node_Insert2(
&Head); // 5호출
*/
    Node_Insert3(&Head);

    Node_Insert3(
&Head);

    Node_Insert3(
&Head);
//    printf("input 자료 개수를 입력하시오\n");
//    scanf("%d",
&uiInput);

    //printf("%d-> ",Head->iNum);
    //printf("%d-> ",Head->stNext->iNum);
    //printf("%d-> ",Head->stNext->stNext->iNum);
    /*    Temp = Head;
          while(0 !
= Temp )
          {
            printf("%d-
> ",Temp->iNum);
            Temp 
= Temp->stNext;
          }
          printf("NULL\n"); //putchar('\n');
     */
    Node_Print(Head);
    
/*
       free(Head-
>stNext->stNext); // 반드시 끝에서부터 free
       free(Head-
>stNext);
       free(Head);
     */
    /*
       while(0 !
= Head)
       {
       Temp 
= Head->stNext;
       free(Head);
       Head 
= Temp;
       }
     */
    Node_Free(Head);
    
return 0;
}

void Node_Print(node * Temp)
{
    
while(0 != Temp )
    {
        printf(
"%d-> ",Temp->iNum);
        Temp 
= Temp->stNext;
    }
    printf(
"NULL\n"); //putchar('\n');
    return;
}

void Node_Free(node * Head)
{
    node * Temp;

    
while(0 != Head)
    {
        Temp 
= Head->stNext;
        free(Head);
        Head 
= Temp;
    }
    
return;
}









=선형정렬(올림/내림)

1 -> 2 -> 3 ->....




==========================================================================================

AVR

==========================================================================================

=AVR2560




=차동입력 ADC


=ADC 2, 3 PIN 사용







=

<ADC.H>



<ADC.C>




<MAIN.C>




<CF - 책 소스>

- AVR제공 HEADER INCLUDE => ADCW 사용





============================================================================================

=결과(값이 두배로 나옴 / 기준전압보다 낮을 경우 (-)값 표시 안됨 -- 문제)



- 3V - 2V = [+1V] => 결과는 [+2V]로 표시됨



<책 소스>

- 4V - 3V = [+1V] => 결과는 [+2V]로 표시됨




-기준전압이 높을 경우 (-)표시 안됨

- 3V - 4V = [-1V] => [0V] 표시됨




'2015 스마트 콘트롤러 > 업무일지' 카테고리의 다른 글

20150514  (0) 2015.05.14
20150513  (0) 2015.05.13
20150511  (0) 2015.05.11
20150508  (0) 2015.05.08
20150507  (0) 2015.05.08
Posted by ahj333
,