전체 글 41

[Android][3] On-Board LED 제어하기

Android 기기에서 UI로 직접 하드웨어를 제어할 수 있는 어플리케이션을 만드려면 JNI (Java Native Interface)의 도움을 받아야 합니다. 이제부터는 IDE 사용법과 makefile 작성보다는 개발을 위한 프로세스에 초점을 맞추도록 하겠습니다. 실제 코드로직 작성 이외의 작업은 Eclipse에서 제공하는 툴에 의존합니다. 토글버튼을 터치하면 보드에 내장된 LED를 켜고 끌 수 있는 어플리케이션과 디바이스드라이버를 만들도록 하겠습니다. 우선 화면을 구성하는 Activity를 정의하기 위해 XML 파일을 작성합니다. 더보기 메인 화면의 이벤트 처리를 담당하는 MainActivity.java 파일입니다. package edu.skku.sm5baseled; import android.app..

EE/Embedded Systems 2021.09.24

[Android][2] Device Driver 컴파일

보드는 FPGA의 Memory Mapped IO Interface로 구성되어 있습니다. 이러한 특징을 이용해 특정 메모리에 값을 쓰면 LED가 켜지고, 부저가 울리게 할 수 있습니다. 이를 위해 특정 역할을 하는 디바이스 드라이버를 작성하여야 합니다. 드라이버 작성 준비 kdriver라는 Makefile Project를 생성합니다. 만든 프로젝트를 선택 후 Miscelleneous Device Driver를 만듭니다. 드라이버 파일 명은 kdriver를 그대로 사용합니다. Project Explorer 에 다음과 같이 Driver를 위한 개발 환경이 IDE에서 자동으로 생성되었습니다. 이제 kdriver를 컴파일하게 되면 컴파일 후 보드로 다운로드까지 실행됩니다. kdriver로 자동생성된 샘플코드는 다..

EE/Embedded Systems 2021.09.17

[Android][1] 커널 빌드

[HBE-SM5-S4210 BASE] 리눅스 커널을 기반으로 하는 Android Board의 디바이스 드라이버를 작성하고 어플리케이션에서 추가된 하드웨어를 쓸 수 있도록 한다. Android Operating System 모바일 디바이스를 가지고 여러 서비스를 제공하기 위한 Software Stack 이다. 운영체제 + 미들웨어 + 어플리케이션을 포함한다. 많은 부분이 오픈소스 기반. 일부는 유료이며 오픈소스가 아닙니다. 컴포넌트 기반의 아키텍처를 가진다. 프로그램이 실행되고 종료될 때까지 Life Cycle 을 관리해주기도 한다. 커널 부분은 C, 런타임 라이브러리도 C로 되어있지만, 어플리케이션 개발자는 Java, Kotlin으로 개발한다. 크게 4개의 Layer로 나뉘어져 있다. 커널은 디바이스의 ..

EE/Embedded Systems 2021.09.17

[BOJ_2606][BFS]바이러스

네트워크에 연결된 컴퓨터 중, 1번 컴퓨터로 인해 바이러스가 전파된 컴퓨터의 수를 구하는 문제입니다. 유의할 점은 데이터를 받으며 그래프 정보를 입력 시 양방향으로 입력해주는 것과, Queue에 Push할 때 방문처리를 해주는 것입니다. 1. 그래프 입력 2. 시작 노드 Push 후 방문처리 3. BFS : 2차원 배열 BFS와는 다르게 갈 수 있는 방향이 그래프에 연결되 노드의 개수만큼 있습니다. 방문 후 Push 될 경우 감염된 컴퓨터의 수를 증가시키며, 1번 컴퓨터는 세지 않기 때문에 0부터 시작합니다. #define _CRT_SECURE_NO_WARNINGS #include #include #include #include using namespace std; queue q; vector com[1..

Algorithms/Problems 2021.08.27

[BOJ_1107][Brute_Force]리모컨

0, 1, 2, 3, 4, 5, 6, 7, 8, 9, +, - 버튼을 이용해 특정 채널로 이동하려고 할 때 망가지지 않은 버튼을 이용해 이동하려면 최소 몇 번 버튼을 눌러야 하는지 계산하는 문제입니다. 유의해야 할 점은, 목표 채널로 이동하기 위해 숫자를 누르지 않는 것이 빠를 수 있다는 점입니다. 또한, 목표채널 N이 어디에 존재할 지 모르므로 뺄셈 연산 후 절대값을 취해줘야 함을 잊지 말아야 합니다. 1. 모든 번호를 Brute Force 로 탐색(0 에서 500000까지의 N 이 존재하지만, 이동할 수 있는 채널의 제한은 없으므로 1000000 까지의 채널을 탐색하도록 합니다. 망가진 버튼이 무엇인가에 따라 N 범위를 벗어난 채널에서 이동하는 것이 더 빠를 수 있습니다. 2. 고른 채널을 숫자를 눌..

Algorithms/Problems 2021.08.27

PyTorch Basics(1)

Referred to : Prof. Sung Kim's PyTorch Lecture Linear Model y_hat 은 forward function 에 정의되어 있으며 예측값을 나타냅니다. loss는 예측값에서 실제 값을 빼고 제곱한 값을 나타냅니다. 데이터 셋에서 나온 loss 값의 평균을 취해주면 Mean Squared Error (MSE)를 얻을 수 있습니다. import torch import numpy as np import matplotlib.pyplot as plt w = 1.0 def forward(x): return x * w def loss(x, y): y_pred = forward(x) return (y_pred - y) * (y_pred - y) x_data = {1, 2, 3}..

CS/ML+DL 2021.08.24

Bio-signal for Emotion Classification

Referred to Signal Processing Lecture by Dr. Ajay Kumar Verma 이산 웨이브렛 변환을 이용한 고각성 부정 감성의 GSR 신호 분석(2017, 임현준 외 2) https://www.sciencedirect.com/topics/engineering/detail-coefficient https://bookdown.org/yuaye_kt/RTIPS/ttest.html Project Timeline 1번부터 3번까지는 Matlab에 존재하는 신호처리 API를 활용하여 Preprocess 1. Upsampling : Sensor Data와 Emotion Data의 데이터 주기를 맞춥니다. 2. Nearest Interpolation : 실험에서 데이터가 비어있어 오류가..

[BOJ_2529][Backtracking]부등호

부등호를 입력받으면 그 사이에 들어갈 수들을 붙여놓은 것 중 가장 큰 수와 작은 수를 찾아내는 문제입니다. 처음에 접근한 방식은 모든 경우의 수를 찾고 부등호에 대한 조건은 모든 수를 선택한 후에 알아보도록 하는 것이었습니다. 보통 재귀를 설계하는 방식처럼 final condition을 먼저 명시하였고, 이후에는 0에서 9까지의 반복문 안에서 check 배열을 넣었다가 풀며 재귀를 돌렸습니다. #define _CRT_SECURE_NO_WARNINGS #include #include #include /* 부등호 */ using namespace std; char a[15], check[15]; int k; vector ans; string to_string(int i) { char j = i + '0'; ..

Algorithms/Problems 2021.07.29