전체 글 41

Nordic Semiconductor - nRF MCU and Bluetooth Low Energy

www.skkuwongroup.online/ 0. Nordic nRF51/nRF52 Series? 이번 연구에 쓰이는 마이크로컨트롤러는 Nordic nRF52, PCA10040 모델입니다. CPU는 ARM Cortex M4 로 저전력이 장점이며 Flexible GPIO, Bluetooth Low Energy, NFC를 활용할 수 있다는 특징이 있으나 STMicro 사의 Cube MX 같은 툴이 없고 환경이 달라 여러 Webinar 등을 찾아보고 도메인 지식을 쌓을 필요가 있다고 느꼈습니다. 처음에 마이크로컨트롤러를 받았을 때는 포장지에 nRF51 시리즈라고 쓰여 있었는데 마이크로컨트롤러의 마이크로프로세서 위 패키징 위에 붙은 모델번호 'PCA10040' 를 찾아보니 nRF52832 SoC 를 위한 Dev..

EE/Embedded Systems 2020.12.22

Function

자주 쓰는 기능이 있다면 함수로 만들어 모듈화를 해야 한다. 이 것이 간결하고 유지보수가 쉬운 프로그램을 만들기 위한 가장 첫 번째 단계이다. 함수를 만든다는 것은 여러 명령들의 집합을 만들어 묶는 것과 같다. 수학에서의 함수를 생각하면 쉽다. 아래와 같이 함수에 인풋을 전달하면 정해놓은 지시대로 인풋의 데이터를 처리해 아웃풋을 낸다. Input -----(함수 안에 프로그래머가 정의한 지시들) ----> Ouput 나중에 나아가서 프로그램을 짜는 것에 능숙해진다는 것은, 함수와 클래스를 어떻게 짤 것인지, 즉 아키텍쳐를 빨리 생각해내는 능력이라고 한다. 그 단계까지 최대한 빨리 갈 수 있도록 얼른 공부해야겠다! 주의할 것들 함수는 단 하나의 기능을 수행하도록 하는 것이 좋다. 함수를 호출하면 CPU 사..

Algorithms/C, C++ 2019.10.13

Overflow / Underflow

조금 더 자세히 들어가 왜 타입 캐스팅을 잘못하면 오버플로우가 나는지에 대해 알아보도록 한다. 먼저, 이진법에서 음수를 어떻게 활용하는지를 파악하는 것이 중요하다. 2진법에서는 음수를 표현하기 위해 '보수' (complement)의 개념을 활용한다. Most Significant Bit (가장 왼쪽에 있는 비트)가 부호를 나타내기 위한 비트이다. 5 00000101 Signed Magnitude 10000101 +0 과 -0 존재 10000000 00000000 1's Complement 1의 보수 11111010 +0과 -0 존재 11111111 00000000 2's Complement 2의 보수 11111011 Unique Value of 0 2의 보수의 표현범위는 다음과 같다 8비트 : -128 ..

Algorithms/C, C++ 2019.10.09

Type Casting (형변환)

형변환은 (type_name) expression 으로 가능하다. 예를 들어 원의 체적을 구하는 식을 계산하려 할 때 (int) 4/3 * PI * r * r * r 에서는 (int)가 type_name 이고 나머지가 expression 이다. 위 그림은 형 변환을 할 때의 서열이라고 생각하면 된다. int형과 float형을 계산한다면 float 형으로 결과가 저장되는 방식이다. float 나 double 에서 int 형으로 변환 할 때에는 소수점 밑 숫자들이 모두 내림처리된다. (반올림되지 않음) 예제를 보며 이해하는 편이 빠르다. 여담이지만 scanf 함수 쓸 때, 두 번째 parameter에 &를 넣지 않는 실수를 자주 한다. 그러고서 형변환 에 문제가 있나?? 하고 한참 삽질하기 전에 꼭 확인해야..

Algorithms/C, C++ 2019.10.05

miniconda 설치와 Python (2019년 9월 기준)

OpenCV를 실행하기에 앞서 miniconda라는 가상환경을 만들어 줄 필요가 있다. 가상환경을 만들어 주는 이유는 외부의 시스템 변수에 프로그램 구동이 영향을 받지 않게 하기 위해서이다. 1. miniconda bash 파일을 https://docs.conda.io/en/latest/miniconda.html 에서 다운로드 2. 'which python3' 명령어로 python3의 버전을 확인한다. 내 경우에는 python3.7로 업데이트 되어있네요. (이전에 python3를 설치한 적이 없으면 설치한다. 하지만 이미 macOS에 내장되어 있는 2.7버전을 지워서는 안 된다. OS 자체를 구동시키고 있는 중요한 요소이기 때문이라고 함...) 3. 터미널에서 다운받은 bash 파일을 실행하고 minic..

UI Button - 비슷한 여러 버튼이 있을 때 Tag 기능으로 코드 라인 줄이기

실로폰 앱을 만든다고 가정합니다. 이렇게 했을때 IBAction을 하나하나 다 설정해주어야 하느냐? 그건 아닙니다. 존재하는 버튼 모두를 하나의 IBAction에 연결한 다음 (이 경우에는 notePressed라는 함수가 호출되게 됩니다) 스토리보드에서 버튼을 누르고 화면의 오른쪽에 Attribute Inspector를 들어가줍니다. 우측 상단의 메뉴 중 왼쪽에서 네 번째입니다. Attribute Inspector의 View 란에는 Tag라는 것을 입력할 수가 있는데요. 이 Tag기능이 있기 때문에 IBAction을 하나하나 설정해야 하는 수고로움을 덜을 수 있는것입니다. 각각에 실로폰 키에 1(보라색)부터 7(빨간색) 까지 Tag 숫자 입력을 해주면 본 기능을 쓸 수 있습니다 실제로 코드상에서 이 Ta..

CS/Mobile 2019.09.08

XCode - 자주 마주치는 에러들, 자주 쓰는 기능들

Swift4 언어로 iOS 개발을 하며 매우 자주 보이는 에러와 자주 쓰이는 함수를 정리해보았다. 앞으로 개발하면서 계속 수정할 예정이다 에러 this clas is not key value coding-compliant for the key 'variableName' XML파일에 있는 이미지 이름과 실제 스토리보드에 있는 이미지 매칭이 되지 않아 생김. 대부분의 경우에 변수의 이름을 잘못 입력해서 바꾸었을 때 나타남 Connection을 모두 끊은 다음 스토리보드의 ImageView를 다시 드래그해 새로운 커넥션을 만들어줌 cannot assign value of type 'UInt32' to type 'Int' type-casting 필요 can't form range with upperbound <..

CS/Mobile 2019.09.08

[Data Structures][1]Singly Linked List

단일 연결리스트는 인덱스를 이용한 참조는 힘들지만 데이터 삽입과 제거가 용이하다. 다음과 같은 구조를 가지고 있다. 1. 먼저 typedef struct를 이용해 구조체를 만들어 줌 2. 구조체에는 int/float/double/char 등등 의 데이터 부분과 Node 포인터인 next 가 만들어져야 한다. 3. Alias는 Node로 설정. 4. 전역에서 head 노드 포인터 변수를 만들어 준다. head는 자료의 시작지점이라고 생각하면 된다. - 전역에서 만들어주는 이유는 추후 함수형으로 프로그래밍을 할 때, 함수로 찾기 편하게 하기 위해서이다. 5. main 함수에서 head를 동적할당 시켜준다.. 6. node1을 동적할당 합니다. node1의 데이터에 들어가는 값은 1로 한다. node2도 동적..

Algorithms/Theory 2019.08.24

[Data Structures][0]Array

배열(Array)는 자료를 나열하고 접근할 때 아주 편리. 배열의 장점: 1) 특정한 원소로 즉시 접근할 수 있음 하지만 자료가 100000개 정도 있고, 2번째 요소를 지우고자 한다면 뒤에 있는 99998개의 요소를 한 칸 앞으로 덮어쓰기 해 주어야만 한다. 또 맨 앞에 요소를 추가할 때는 배열을 모두 한 칸씩 뒤로 미룬 다음 배열의 0번째 인덱스에 값을 입력한다. 코드상으로는 이렇게 표현할 수 있다. #define _CRT_SECURE_NO_WARNINGS #include #define INF 10000 int arr[INF]; int count = 0; void addBack(int data) { arr[count] = data; count++; } void addFirst(int data) { f..

Algorithms/Theory 2019.08.23

#문법 - 전처리기

파일 내의 소스코드를 통째로 붙여 넣는 대신에 간결하게 라이브러리를 불러오는 방식으로 프로그램을 구성할 수 있습니다. 두 가지 방법이 있는데요, #include 시스템 디렉터리에서 파일 검색. 운영체제마다 시스템 디렉터리가 존재하는 경로가 다릅니다. #include "파일 이름" 현재 폴더에서 파일 검색. 현재 폴더에 파일이 없다면 시스템 디렉터리에서 검색 stdio.h 와 같은 헤더 말고도 우리가 직접 헤더를 만드는 방법도 있어요. 앞으로 프로그램을 짤 때 훨씬 간소하게 프로그램이 보여질 수 있게 해줍니다 테스트 해보기 위해 헤더파일에 함수를 하나 입력합니다. 이후 main.c 파일에서는 이런 식으로 코딩을 해주면 #define _CRT_SECURE_NO_WARNINGS #include #include..

Algorithms/C, C++ 2019.08.19