Skip to content

컴퓨터공학과 마이크로프로세서 실습 정리입니다.

Notifications You must be signed in to change notification settings

chihyunwon/Microprocessor

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

39 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Microprocessor

컴퓨터공학과 마이크로프로세서 실습 정리입니다.

종강

image

GEMS-CRC 모트(ATmeaga2560 마이크로 프로세서 활용 방법)을 다루는 과목으로 전원 및 직렬 통신 케이블 연결, 소프트웨어 개발도구
UART 장치 구동기, 소프트웨어 타이머, 운영체제 타스크, 센서 인터페이스 표준들을 위한 구동기, 부트 로더, 컴파일러 최적화 이슈 등을
포함하고 IOT 모델을 완성하는 인터넷과의 연결 방법을 학습하였습니다.

image

#define PORTE
*(unsigned char)0x180
PORTE = 0x10100000

 16번지로 180번에 0xa0 < 이진수로 10100000

핀의 값을 PE7가 1부터 PE0까지 10100000

PD0 라이트 1꺼지고 0이되면 켜진다

PORTA~PORTB~~~PORTL <- #include <avr/io.h>에 PORT 입출력 장치와 대응시켜놨다.
PORTL 출력하기 위해서는 PORTL
읽을때는 x = PINL
DDRL <- 8비트 (Data Direction Register) < 0과1을 내보내는거 (라이트 출력) 입력용(0), 출력용(1) 입력용으로 쓸건지 출력용으로 쓸건지

3개의 레지스터가 정의되어있다. GPI 범용

23.09.15 Pjt_01

led.c 작성한 후에 led.h를 작성한다.
led.h에는 함수의 프로토타입을 작성하는 데 함수 반환 타입의 오류를 미연에 방지해준다.

main.c에 있는 것들을 led.c 파일로 쪼갠다.

진행 상태를 led로 확인할 수 있다. (led 몇 번을 상황에 따라 설정해서 오류 확인용도로 사용 가능)

unsigned char = uint8_t 

23.09.15 Pjt_02

image
image
image

USART(Universal Synchronous and Asynchronous serial Receiver and Transmitter) registers
serial : 직렬

UART (비동기 : 보내고싶을 때 보냄)

UART 총 4개가 있는데 0번 사용

8비트 레지스터에 쓰게 되면 보내겠다.
UDR0 = 'A'(쓰기)
A = UDR0 (읽기)
읽기/쓰기용도

전송된 것을 (A = UDR0)읽는 순간 소멸
쓰는 순간 전송 시작(UDR0 = A)

속도 조절 Speed
UBRRnL : 0L
UBRRnH : 0H

UCSRnA : Control Register 8비트

sbi(UCSR0A, U2X0) <- UCSR0A 레지스터의 U2XN(==1)번 비트를 1로 변경

cbi(UCSR0B, TXEN0) <- UCSR0B 레지스터의 TXEN0(==3)번 비트를 0으로 변경

끝의 숫자 N이 비트 번호임

개행문자 캐리지 리턴 하나 쓰고 새로운 줄에서
new line이 오면 뒤에 캐리지리턴도 따라서 보내도록 설정한다.

main함수에서 A부터 Z 까지 문자를 보내고 ABCDE~Z 까지 나오고 캐리지리턴을 반복

txend -> 0 인데 컴파일러가 interrupt는 보지못하고 중간에 변동이 없으니까 그냥 무조건
0으로 넣고 !이되서 1이되서 영원히 반복되는데 이를 방지하기 위해 volatile 키워드를 넣어서 선언해준다.

volatile 휘발성-> 컴파일러가 volatile을 만나면 txend가 자꾸 바뀌는 휘발성변수구나 컴파일러가
언제 바뀔지 모르는 변수임을 알려주는 키워드가 volatile 값을 항상 읽어서 대체한다.

컴파일러 최적화 기법 Optimization

image

a = 10; b = 20; a = 20; 일때 컴파일러가 a = 10;을 날려버림

컴파일러 최적화 기법

상수 접기(Constant folding)

상수 1 * 상수 2 -> 미리 계산한다.
2 * 3.14 * r 변수 일 때 2 * 3.14를 미리 계산한다. 그냥 6.28로 계산할 때보다 빠르다.

상수 전파(Constant Propagation)
r = 5; <- r 이 변하지 않는다.
3.14 * r *r <- r이 5로 변하면서 3.14 * 5 * 5 <- 상수로 대치되서 계산한다.

-Os<-기본적으로 이거쓴다. 상수전파,상수 접기 최적화 등을 한다.
상수 전파 문제가 발생하는데 최적화 옵션을 제거하면 되지 않는가?
-> 컴파일러가 곧이곧대로 번역하기 때문에 내용이 길어짐
국부적으로 해결해야 한다. 전체적인 옵션을 건들여서는 안된다.

운영체제 영역과 어플리케이션 영역을 분리한다.

AVR에서의 cli(), sei()

AVR에서의 cli는 Clear Global Interrupt Flag <- 인터럽트를 disabled 시키는 함수이다.
seti) 함수는 Set Global Interrupt Flag의 약자로 인터럽트를 enabled 시키는 함수이다.

About

컴퓨터공학과 마이크로프로세서 실습 정리입니다.

Topics

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages