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

네트워크 

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


<C>


=교환법칙 ( 이런 문법을 허용함)

#include <stdio.h>

int main()
{
  
int A[5= {12345};

  printf(
"A[2] : [%d]\n", A[2]);
  printf(
"2[A] : [%d]\n"2[A]);
  
return 0;
}






=2차원 배열

-int A[3][4];




주소

&A[1][2]

A[1]+2

*(A+1)+2


*(&A[1][2])    => A[1][2]

*(A[1]+2)      

*(*(A+1)+2)    




=2차원 배열의 초기화

#include <stdio.h>

int main(void)
{
  
int i, j;

  
//2차원 배열 초기화의 예 1
  int arr[3][3]={
    {
123},
    {
456},
    {
789}
  };
  
  
//2차원 배열 초기화의 예 2
  int arr2[3][3]={
    {
1},
    {
45},
    {
789}
  };

  
//2차원 배열 초기화의 예 3
  int arr3[3][3]={1,2,3,4,5,6,7};

  
for(i=0; i<3; ++i)
  {
    
for(j=0; j<3;++j)
    {
      printf(
"%d ", arr[i][j]);
    }
    printf(
"\n");
  }
  printf(
"\n");
  
  
for(i=0; i<3; ++i)
  {
    
for(j=0; j<3;++j)
    {
      printf(
"%d ", arr2[i][j]);
    }
    printf(
"\n");
  }
  printf(
"\n");

  
for(i=0; i<3; ++i)
  {
    
for(j=0; j<3;++j)
    {
      printf(
"%d ", arr3[i][j]);
    }
    printf(
"\n");
  }

  
return 0;  
}








=2차원 배열 초기화시

int A[][]={1, 2, 3, 4, 5, 6, 7, 8};

int A[][]={1, 2, 3, 4, 5, 6, 7, 8};

int A[][]={1, 2, 3, 4, 5, 6, 7, 8};


=3차원 배열 => 주로 오락에 사용(2차원 map)





=3차원 배열

#include <stdio.h>

int main(void)
{
  
int mean = 0, i, j;
  
int record[3][3][2]={
    {
      {
7080},  //A학급 학생 1의 성적
      {9490},  //A학급 학생 2의 성적
      {7085}  //A학급 학생 3의 성적
    },
    {
      {
8390},  //B학급 학생 1의 성적
      {9560},  //B학급 학생 2의 성적
      {9082}  //B학급 학생 3의 성적
    },
    {
      {
9889},  //C학급 학생 1의 성적
      {9994},  //C학급 학생 2의 성적
      {9187}  //C학급 학생 3의 성적
    },
  };

  
for(i = 0; i < 3; ++i)
    
for(j = 0; j < 2; ++j)
      mean +
= record[0][i][j];
  printf(
"A 학급 전체 평균: %g \n", (double)mean/6);

  mean 
= 0;
  
for(i = 0; i < 3; ++i)
    
for(j = 0; j < 2; ++j)
      mean +
= record[1][i][j];
  printf(
"B 학급 전체 평균: %g \n", (double)mean/6);

  mean 
= 0;
  
for(i = 0; i < 3; ++i)
    
for(j = 0; j < 2; ++j)
      mean +
= record[2][i][j];
  printf(
"C 학급 전체 평균: %g \n", (double)mean/6);

  
return 0;
}







=포인터의 포인터

#include <stdio.h>

int main()
{
  
int A = 3;
  
int * P = &A;
  
int ** PP = &P;
  
int ***PPP = &PP;

  printf(
"&A  : [%08X] \n"&A);
  printf(
"&P  : [%08X] \n"&P);
  printf(
"&PP : [%08X] \n\n"&PP);

  printf(
"A  : [%08X] \n", A);    // A의 값
  printf("P  : [%08X] \n", P);    // P의 값 = A의 주소
  printf("PP : [%08X] \n\n", PP);   // PP의 값 = P의 주소

//  printf("A  : [%08X] \n", A);    // A의 값
  printf("*P  : [%08X] \n", *P);   // P의 값(A의 주소)찾아감 => A의 값
  printf("*PP : [%08X] \n\n", *PP);//  PP의 값(P의 주소)찾아감 => A의 주소

//  printf("A  : [%08X] \n", A);    // A의 값
//  printf("*P  : [%08X] \n", *P);    // P의 값(A의 주소)찾아감 
=> A의 값
  printf("**PP : [%08X] \n\n", **PP); // PP의 값(P의 주소)찾아감 (A의 주소) 찾아감 => A의 값

  printf("***PPP : [%08X] \n\n", ***PPP);// PPP의 값(PP의 주소)찾아감...

  return 0;
}







=더블 포인트 변수

#include <stdio.h>

int main(void)
{
  
double num =3.14;
  
double * ptr = &num;
  
double **dptr = &ptr;
  
double *ptr2;

  printf(
"%9p %9p \n", ptr, *dptr);
  printf(
"%9g %9g \n", num, **dptr);
  ptr2 
= *dptr; // ptr2 = ptr 과 같은문장
  *ptr2 = 10.99;
  printf(
"%9g %9g \n", num, **dptr);

  
return 0;
}






=포인터 변수 대상의 Call-by-reference

#include <stdio.h>

void SwapIntPtr(int *p1, int *p2)
{
  
int * temp = p1;
  p1 
= p2;
  p2 
= temp;
  
return;
}

int main(void)
{
  
int num1 = 10, num2 = 20;
  
int *ptr1, *ptr2;
  ptr1 
= &num1, ptr2 = &num2;
  printf(
"*ptr1, *ptr2: %d %d \n", *ptr1, *ptr2);

  SwapIntPtr(ptr1, ptr2);
  printf(
"*ptr1, *ptr2: %d %d \n", *ptr1, *ptr2);
  
  
return 0;
}








<Raspberry Pi>

-도면

https://www.raspberrypi.org/model-b-revision-2-0-schematics/


-DC

R - 전류 방해

L - 선 연결

C -선 끊김


-AC

R - 전류 방해

L - 저항으로 작용

C - 선 연결


-















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

AVR 

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

=AVR2560


=다중 인터럽트


인터럽트 2개 서로 상반되게


INT4 : Count Up

INT5 : Count Down


인터럽트 중 다른 인터럽트 발생







= SREG : I => 1 (인터럽트 허용 ENABLE) => 인터럽트(INT 5) 발생/요청/허용/루틴 실행O => I => 0 (인터럽트 허용 DISABLE) => 다른 인터럽트(INT 4) 발생/요청/불가/루틴 실행X => 인터럽트(INT 5) 루틴 RETURN => I => 1 (인터럽트 허용 ENABLE) => 다른 인터럽트(INT 4) 발생/요청/허용/루틴 실행O


= 다중 인터럽트 가능하도록 인터럽트(INT 5) 발생/요청/허용/루틴 실행O => I => 0 (인터럽트 허용 DISABLE) => I => 1 (인터럽트 허용 ENABLE) =>  다른 인터럽트(INT 4) 발생/요청/허용/루틴 실행O


= 실행 중인 INTERRUPT(INT 5) 보다 우선순위 높은 INTERRUPT(INT 4) 발생/요청 => 인터럽트(INT 4) 허용/루틴 실행O


= 실행 중인 INTERRUPT(INT 5) 보다 우선순위 낮은 INTERRUPT(PCINT 0) 발생 => 다른 인터럽트(INT 4) 불가/루틴 실행X














=ISR_Enable()함수 추가 전

-NT 5 -> INT 4




<AVR2560.H>





<INTERRUPT.H>




<INTERRUPT.C>








<MAIN.C>



=결과 : (시뮬레이터 상에서는 ucSw (vector_6() / vector_7())에 따른 동작 확인 잘 안됨)

-INT 4 -> INT 5



-INT 5 -> INT 4




* 소스코드 작성시 주의사항


1. 출력 PORT 초기화를 가장 우선으로 했는가?

2. STACK POINT 번지지정 이상 없는가?

3. STACK 영역의 할당은 적절한가

4. RAM Clear 시 Interrupt가 발생한느가

5. vctor table의 address 및 label정의 적확한가

6. 입출력 포트의 입출력모드 레지스터 설정 정확

7. 입출력 포트 초기화

8. ....


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

20150421  (0) 2015.04.21
20150420  (0) 2015.04.20
20150416  (0) 2015.04.16
20150415  (0) 2015.04.15
20150414  (0) 2015.04.14
Posted by ahj333
,