본문 바로가기
코스웨어/15년 스마트컨트롤러

20151106 - 11번 남수진 / 라즈베리 파이(디바이스 드라이버를 이용한 GPIO제어), 영상처리(비트맵 이미지 편집)

by 알 수 없는 사용자 2015. 11. 7.
728x90
반응형

라즈베리 파이


  • LED 디바이스 드라이버를 작성하는 예제 분석(교재 521~544)




1. 모듈 프로그램 smart.c


 함수 이름

 app 호출 함수

 동작

 smart_init

 

 insmod로 모듈이 커널에 적재될 때 실행, 

 register_chrdev()로 디바이스 드라이버 등록, file_operations 등록

 smart_exit

 

 rmmod로 모듈이 제거될 때 실행,

 led_open

 open

 ioremap으로 gpio레지스터 가상주소를 얻고 gpio23을 출력으로 설정 + gpio23에 연결된 led on_off

 led_release

 close

 iounmap + gpio 레지스터 원래 값으로 복구

 led_read

 read

 gpio23 핀의 값을 읽어온다

 led_write

 write

 gpio23 핀의 값을 설정한다

 led_ioctl ioctl

 인자로 설정한 동작 수행




2. smart.c에서 기존 소스코드 수정

  1. led_read에서 copy_to_user 추가
  2. led_write에서 copy_from_user 추가



3. 모듈 적재 후 실행 결과


./led_app 실행 결과


./led_app 실행 후 커널 메시지 확인




영상처리



  • 기존의 400*400 비트맵 이미지의 x = 100, y = 100에 줄을 긋는 프로그램


추가 코드

- 기존 코드의 이중 for문 안에 if문 추가

- bmp 파일에 이미지가 상하 반전되어 저장되므로 y=100에 줄을 긋기 위해 iCntY=300일 때 점을 찍어야 한다



실행 결과





  • 비트맵 파일의 가로줄 용량은 4의 배수가 되어야 한다


405*400 크기의 비트맵 파일을 위에서 만든 실행파일로 처리한 결과 이미지

- 비트맵 이미지의 가로줄 용량이 4의 배수가 아닐 경우 4의 배수를 맞추기 위해 1~3바이트가 추가된다

- 위에서 사용한 이중 for문 알고리즘은 이 추가되는 바이트를 고려하지 않았기 때문에 처리 결과가 이상하게 된다 




비트맵 이미지의 가로 픽셀수에 따른 추가 바이트 계산









728x90