메모리(RAM)의 구조/지역변수&전역변수/AVR makefile

 

학습목표

 

메모리의 구조의 대하여 이해하고 변수생성 시 어느 영역에 저장되는지 안다.

폰 노이만 구조와 하버드 구조의 차이점을 이해한다.

지역변수와 전역변수의 차이와 활용에 대해서 안다.

재귀함수에 대해 안다.

Makefile에 있는 문법에 대해 안다.

 

//Intel이나 ATmega에서 메모리 영역의 사용은 동일하다.

 

명령어들은 메모리의 Code영역에 저장된다.

폰 노이만 방식은 Code영역과 저장용 메모리 영역의 버스를 달리함으로써 속도를 향상 시킨다.

 

전역 변수를 쓰면 함수의 인자가 필요하지 않게 된다.

 

전역변수는 프로그램을 복잡하게 만드는 주범임으로 가능한 한 사용을 최소화해야 한다.

또한 전역변수는 해당 프로그램이 시작될 때부터 종료할 때까지 메모리를 차지하게 된다. 때문에 RAM의 메모리를 지속적으로 사용하게 된다.

 

지역변수를 사용하면 변수의 생성과 소멸에 의해 CPU에 부하가 발생할 수 있지만 이것은 메모리 사용보다는 낮은 우선순위이다.

 

Static 지역변수


 

Static변수는 한 번만 초기화되는 전역변수이다.

 

p/234 예제 static 변수)

 

 

Static 변수도 전역변수의 일종임으로 가능한 한 지역변수를 사용하자!

 

사용해야 하는 우선 순위(왼쪽이 순위 높음)

 

지역변수 - static 지역변수 - 전역변수

 

레지스터 변수

 

레지스터 변수 선언하면 CPU내 레지스터에 저장될 확률이 높아진다. 때문에 빠른 변수의 처리를 원할 경우 register 변수를 선언하면 처리가 빨라질 수도 있다.

 

// register명령어와 비슷한 명령어는 volatile이다. 둘 다 compiler 실행에 간섭한다.

 

전역변수는 register 변수로 선언할 수 없다.

 

p/238 재귀함수

 

재귀함수는 만들지 말아라! 메모리를 많이 사용하기 때문이다.

 

무한 재귀함수의 문제점은 변수를 무한대로 생성하여 메모리를 지속적으로 차지하게 된다. Window운영체제에서는 이러한 프로그램을 강제종료 시키지만 이러한 재귀함수를 제한하지 않은 환경에서는 오작동이 발생할 수 있다.

 

// 지역 변수를 다른 용어로 buffer라고도 부른다.

 

// 할당된 메모리를 넘어가서 다른 영역까지 메모리를 침범하는 경우를 oveflow라고 부른다.

 

// 해킹의 용도로 고의적으로 stack을 넘치게 하여 컴퓨터에 오류를 일으키게 할 수 있다.

 

makefile에 대한 설명

 

line44 MCU = atmega128 //변수타입 없이 선언 되었다. MCU의 값 atmega128

line65 F_CPU = 16000000 //전에 800000이던 것을 수정하였다.

 

line83 SRC = $(TARGET).c //변수를 사용할 때는 $(TARGET)을 사용해해야 한다.

 

#을 넣으면 주석처리 된다.

$(*)을 넣으면 변수처리 된다.











 

반응형
Posted by newind2000
메모2015. 3. 11. 16:11



반응형

'메모' 카테고리의 다른 글

간단 메모  (0) 2015.08.21
100권의 금서  (0) 2015.07.29
세금 환급  (0) 2015.07.26
기록 방법  (0) 2015.01.28
Posted by newind2000
Busan IT/디지털 제어2015. 3. 11. 13:27

디지털 제어 - 엔코더/디코더/멀티&디멀티플렉서

 

학습목표 - 엔코더, 디코더, 멀티&디멀티플렉서의 논리를 이해하고 회로도를 그릴 수 있다.




 

오늘은 본격적으로 인코더에 대해서 알아보겠다.








 

2진수를 그레이코드 바꾸는 법

 

- 맨앞자리는 그대로 내려오고

- 그 위에부터는 두 개씩 XOR을 하여 내려오면 된다.

 

ex) 1011(2) -> 1110(Grey)

 

//카르노맵이란?

 

 

그레이코드를 2진수로 바꾸는 법

 

- 맨 앞지리는 그대로 내려오고

- 그 뒤부터 앞에 나온 값과 다음 자리를 XOR 값을 도출하면 된다.

 

ex) 1110(Grey) -> 1011(2)

 

 

패리티 비트(Parity bit)는 정보의 전달 과정에서 오류가 생겼는지를 검사하기 위해 추가된 비트이다. 전송하고자 하는 데이터의 각 문자에 1 비트를 더하여 전송하는 방법으로 2가지 종류의 패리티 비트(홀수, 짝수)가 있다. 패리티 비트는 오류 검출 부호에서 가장 간단한 형태로 쓰인다.

 

짝수(even) 패리티 - 전체 비트에서 1의 개수가 짝수가 되도록 패리티 비트를 정하는 것인데, 이를테면 데이터 비트에서 1의 개수가 홀수이면 패리티 비트를 1로 정한다.

 

홀수(odd) 패리티 - 전체 비트에서 1의 개수가 홀수가 되도록 패리티 비트를 정하는 방법이다.

 

7bit의 자료 데이터를 전송할 때 짝수 패리티는 자료 데이터 속 1의 개수가 짝수가 되도록 제일 앞자리에 0또는 1일 넣어서 8비트 1의 개수가 짝수가 되는 값으로 도출해준다.

홀수 패리티는 1의 개수가 홀수가 되도록 가장 앞자리에 0또는 1을 넣어주는 것이다.

 

패리티는 데이터를 한 공간에서 다른 공간으로 이동시킬 때 데이터가 제대로 전송되었는지 정검해주는 기술을 말한다.



포트는 총 10개이고 시작/종료 포트 각 각 1개씩, 데이트 비트 8개 총 10bit이다.

엔코더를 그려 보자



엔코더는 디코더의 반대이다. 2n승개의 코드 입력을 받아서 n개의 데이터를 내보내는 것이다.

디코더도 그려보자.

 

 

 

디코더 & 디멀티 플렉서

 

디코더는 코드를 분할하는 것이다. n비트의 코드 입력을 받아서 2n승개의 데이터를 내보내는 것이다.

 

ex) 2진법 -> 전광판 숫자로

 

엔코더

 

//수업의 목표는 1. 진리표를 만들어서 2. 진리표를 보고 회로도를 만드는 것이다.

멀티플렉서도 만들어 보자!



멀티 플렉서는 다양한 입력 값 중에 하나를 선택하여 출력하는 것이다.

 

 

아래의 회로를 만들어 보자!

 

1. 4 X 2(엔코더) X 4(디코더)

 

2. 1 X 4(디멀티플렉서) X 1(멀티플렉서)

 

 

1. 엔코더의/디코더/디멀티플렉서/멀티플렉서의 논리와 회로 구조를 이해한다.

 

2. 위의 주어진 엔코더와 디코더를 붙혀서 입력 값과 출력 값이 맞는지 확인한다.

 

 

코드란 어떤 정보를 특정 규칙의 다른 언어로 변환한 것인데, 프로그래밍에서는 정보를 디지털신호(2진수)로 변환하는 것이다.

 

Decoder2진 정보를 다른 형식의 단일 신호로 바꾸어 주는 회로이다.

n개의 정보를 입력 받아 2n승의 정보를 출력한다.

 

 

반응형
Posted by newind2000