일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
- 워리어
- 브이포
- axe
- 2차전직
- VDI
- v4
- 치루
- 리니지2레볼루션
- 창세기전 모바일
- AT&T
- 국립경주박물관
- 울산박물관
- 스피릿위시
- 몬스터스트라이크
- 주식
- 창세기전
- 피쉬아일랜드
- 후기
- 아가시온
- 도미네이션즈
- 반구대암각화
- 족저근막염
- 걷기앱
- 달빛조각사
- AIA Vitality
- 버그
- 샤오미
- 후쿠오카
- 한국대중음악박물관
- 쿠폰
- Today
- Total
일상다반사 로그
임베디드 리눅스 - LED 본문
실습10 mmap 함수를 통한 가상번지 접근
- 실습목표 -
* 리눅스 시스템에서 파일이나 장치 디바이스를 메모리에 대응시키는 여러방법 중 하나인 mmap() 함수를 사용하여 파일 기술자를 통하여 특정메모리 주소를 액세스해 본다.
* 이 과정을 통해서 하드웨어 번지와 사용자가 사용할 수 있는 가상번지 간의 매핑을 이해하고 작성된 프로그램을 컴파일하기 위한 Makefile 작성법을 익힌다.
- 준비물 -
리눅스 시스템호스트, EmposII, 크로스 UTP LAN 케이블, RS-232C 직렬 케이블
- 실습내용 -
임베디드 시스템이 적은 메모리와 일반컴퓨터처럼 완벽하게 구현된게 아니기 때문에 가상번지를 이용하여 메모리접근한다.
1. SRAM 하드웨어 번지를 정의한다.
#define ADDRESSOFSRAM 0x0c000000 <-- 가상번지
2. 가상번지를 저장할 변수를 저장하고, open 함수로 fd를 얻는다.
3. mmap 함수를 이용하여 SRAM 영역의 가상번지를 얻어온다.
addr_sram = mmap(NULL,1,PROT_READ,MAP_SHARED,fd,ADDRESSOFSRAM);
4. 얻은 번지의 내용을 확인하는 코드를 삽입한다.
5. Makefile을 작성하여 컴파일한다.
파일명이 짧거나 작성이 간단할 경우 make 파일 작성안해도 된다.
6. 로더에서 SRAM 영역에 값을 넣은 후 위의 응용 프로그램으로 값을 확인한다.
실습11 LED 제어 프로그램
- 실습목표 -
* mmap 함수를 이용하여 LED 디바이스를 제어해 본다.
* LED 응용 프로그램은 사용자의 키 입력을 받아 LED가 왼쪽으로 혹은 오른쪽으로 시프트 되는 프로그램을 작성하고 작성된 프로그램을 컴파일하여 램 디스크에 적재하여 실행하거나, RS-232C 직렬 통신으로 전송하여 실행해본다.
- 실습내용 -
타켓보드에는 8개의 SMD 형태의 LED가 있으며, PXA 255 CPU의 데이터 버스와 연결되어 특정번지에서의 데이터 비트 출력으로 LED의 On/Off 를 할 수 있다. LED 디바이스는 LED1에서 LED8RK지 각각 한 개의 비트에 대응된다. LED에 접근하기 위한 물리번지는 0x1060 0000dlek.
1. 프로그램 구성을 위해 필요한 헤더 파일과 외부 LED의 물리번지를 선언한다.
2. 매인함수내에 필요한 변수들을 선언한다.
fd - 메모리에 대한 파일 기술자, i - 반복에 사용할 변수, *led_addr - mmap에서 넘겨받을 외부LED 접근할 번지를 저장할 포인터, blink_count blink_delay - 반복에 사용할 변수, LED 상태를 유지할 변수
blink_delay 값이 작으면 LED가 너무 빨리 변화되어 LED 상태가 변화는 것을 눈으로 구분하기 쉽지 않다.
3. mmap 함수를 정의한다.
외부 LED에 접근할 주소를 led_addr 포인터에 저장하고 포인터를 얻지 못하면, 메모리 파일 기술자를 닫고 프로그램을 종료해야한다.
4. LED점등 프로그램
*led_addr = 0xAA로 LED를 초기화하여 LED를 off 시키도록 한다. blink_count만큼 led_status를 시프트시키면서, 외부 LED에 led_status를 출력한다.
5. LED 디바이스 해체
LED를 모두 끄고 munmap함수로 mmap에서 사용한 주소를 해제하고, 메모리파일 기술자를 닫고 프로그램 종료
'IT > 임베디드 리눅스' 카테고리의 다른 글
임베디드 리눅스 Push,LED,TextLCD (0) | 2017.10.14 |
---|---|
임베디드 리눅스 -TextLCD (0) | 2017.10.13 |
임베디드 리눅스 - LED(2) (0) | 2017.10.12 |
임베디드 리눅스 - 텍스트 LCD (0) | 2017.10.11 |
임베디드 리눅스 - 스톱워치 (0) | 2017.10.10 |