찬찬히 로봇 메이커 :: 찬찬히 로봇 메이커
반응형
펌웨어 기본기를 닦는 과정입니다.


a. Makefile은 일종의 매크로이다. 컴파일러로 .out/ .exe/ .axf와 같은 실행파일을 만들 때 여러 번 쓰지 않고 Makefile 하나만 실행해서 만들 수 있기 때문에 유용하다.

 

b. 우선 c언어를 gcc를 이용하여 오브젝트 파일로 만든다. 여기에서는 main.c와 motor.c를 사용한다.

gcc -c main.c motor.c

(-c 옵션은 .c를 사용하여 .o를 만들어준다. )

그러면 main.o, motor.o가 생성이 된다.

 

c. 만들어진 main.o를 링커에 넣어 바이너리로 이루어진 실행파일로 만든다.

gcc -o app.out main.o motor.o

(-o옵션은 오브젝트 파일을 사용하여 .out 파일을 만든다. app.out은 임의의 이름으로 된 실행파일이다.)

 

d. 이렇게 기본적인 컴파일 과정이 있는데 실제로 리눅스에서 gcc를 이용하여 이렇게 실행파일로 만들 수 있다. 하지만 이 과정을 한 번에 처리해 줄 수 있는 것이 Makefile이다. Makefile의 기본적인 문법은 이렇다.

Target : Dependency

    command

타겟은 내가 만들고 싶은 것.

디펜던시(종속성)는 타깃을 만들 때 필요한 것.

커맨드는 타깃을 만드는 데 필요한 코드.

 

e. 위의 과정을 Makefile에 적으면 아래와 같다.

app.out : main.o motor.o

    gcc -o app.out main.o motor.o

main.o : 

    gcc -c main.c

motor.o :

    gcc -c motor.c

 

f. 이렇게 적으면 위의 과정과 똑같다고 할 수 있다. 그런데 Makefile에서 최종 결과물을 명시해주기 위해 all이라는 명령어를 쓴다. all은 내가 원하는 최종 결과물이다. all을 안 쓰면 1개의 타깃만 만들고 종료한다. 쓰는 순서는 모두 상관이 없다.

all : app.out

app.out : main.o motor.o

    gcc -o app.out main.o motor.o

main.o : 

    gcc -c main.c

motor.o :

    gcc -c motor.c

이렇게 하면 Makefile 쓰는 기본은 끝이다.

 

-------------------------------------------------------------------응용-----------------------------------------------------------

더 깔끔하게 쓰고 싶거나 그렇게 써진 Makefile을 해석할 때 필요한 문법들이다.

변수 선언 

CC = gcc

TARGET = app.out

OBJS = main.o motor.o

변수 사용

$(TARGET) : $(OBJS)

    $(CC) -o $(TARGET) $(OBJS)

main.o : 

    $(CC) -c main.c 

motor.o :

    $(CC) -c motor.c 

 

여기서 저 $(TARGET)이나 $(OBJS)를 두 번 쓰는 게 싫다! 고 한다면

$@는 타깃이라는 뜻.

$^는 종속성이라는 뜻.

표시를 써주면 된다.

$(TARGET) : $(OBJS)

    $(CC) -o $@ $^

 

또한 main.c motor.c도 쓰기 싫고 모든 c파일을 오브젝트로 바꾸고 싶을 때 $<기호를 써주면 된다.

 

.c.o : 

    $(CC) -c -o $@ $<

이렇게 쓰면 gcc -c main.c motor.c과 같은 뜻이다.

 

최종본은 아래와 같다.

CC = gcc

TARGET = app.out

OBJS = main.o motor.o

 

$(TARGET) : $(OBJS)

    $(CC) -o $@ $^

.c.o : 

    $(CC) -c -o $@ $<

 

실제 사용되는 메이크 파일 또한 비슷한 구성으로 되어있다. 옵션과 라이브러리가 추가되어있는 make파일 일부분이다.

 

반응형
반응형

a. 운영체제의 일반적인 모든 기능을 사용하지 않고 임베디드 시스템에 최적화된 효율적인 운영체제를 만드는 것이 임베디드 운영체제의 목적이다.

 

b. 운영체제란 하드웨어를 관리하고 인터페이스 역할을 하며 시스템의 동작을 제어하는 시스템 소프트웨어이다.

 

c. 기능적으로는 프로세서 관리, 저장장치 관리, 네트워킹 관리, 사용자 관리, 디바이스 드라이버 로 나뉜다.

프로세서 관리란 CPU를 점유할 프로세스를 결정하고 CPU 자원을 프로세스에 할당한다.

저장장치 관리란 1차로 메모리 영역을 지정하고 해제, 메모리 영역 간의 침범 방지 기능을 한다.

2차로 SSD나 HDD에 파일 형태로 데이터를 저장한다. 이를 위한 파일 시스템이 개발되어있다.

네트워킹 관리란 TCP/IP 또는 다른 프로토콜 기반 네트워크에 연결하여 응용프로그램이 처리한 데이터를 물리적으로 네트워크에 데이터를 실어보낸다. 반대로도 성립한다.

사용자 관리란 운영체제가 사용자의 계정을 관리하고 서로 개인적인 데이터에 접근할 수 없도록 한다. 

디바이스 드라이버란 시스템의 하드웨어를 관리하기 위해 운영체제가 하드웨어를 추상화하는 계층을 말한다. 

 

d. 규모가 작거나 최적화가 필요한 임베디드 장치는 운영체제 없이 펌웨어로만 동작한다.

 

e. 운영체제의 응답과 동작이 즉각적이고 실시간으로 움직이면 RTOS(real time os)이다.

반응형
반응형

중고나라에서 자전거를 샀는데 싼 걸 사서 아무것도 달려있지 않았다. 잠금장치도 안주더라. 사진에는 있었는데?

그래서 타고 다니다가 헬멧은 필수라고 생각이 들었고 자전거 바구니는 시장 갈 때 있으면 편할 것 같아서 싼 걸로 찾아봤더니

누가 봐도 뒤틀려있음. 하지만 장착은 문제가 없음.

쉽게 탈부착이 가능한 자전거 바구니를 팔고 있었다. 그래서 냉큼 하나 사버렸다. 일단 후기는 생각보다 많이 크다는 것이다. 사이즈를 재고 사진 않았는데 막상 와보니 그냥 바구니 사이즈이다 ㄷㄷ 근데 확실히 장착하기는 편하고 바구니와 걸이가 탈부착이 쉽게 되어있다. 확실히 특허제품인 듯 ㅎㅎ 자전거 바퀴가 26인치인데 바퀴에도 안 걸리게 잘 만들긴 했다. 

하지만 단점은 싸구려 중국산답게 바구니가 전체적으로 뒤틀려 있고 고정하는 벨크로도 싸구려 느낌이 난다. 확실히 고정하려면 추가적인 무언가가 더 필요할 듯싶었다. 그리고 바구니도 그냥 손잡이를 들면 빠지는 구조라 누가 가져가기 쉬워 보였다. 그래서 집에서 두고 필요할 때만 장착해서 쓰기를 추천한다.

 

+ 일주일 사용 후기

실제로 사용해보니 꽤나 만족스러웠다. 일단 바구니가 꽤 무겁긴 하지만 크기가 큰 편이라 내용물이 많이 들어간다. 시장갈 때 사용하는데 매우 만족스러웠다. 그리고 전체적으로 뒤틀려있긴 하지만 자전거에 고정은 잘 됐다. 크게 흔들려도 빠지지는 않는다. 그래서 결과적으로는 매우 만족.

헬멧은 여러 헬멧을 찾아보다 카멜 캔쿤 헬맷을 구매했다. 우선 어디회사껀지는 모르겠다. 카멜이라고 되어있는데 카멜은 모니터 거치대나 전자제품 관련 만드는 회사인데? 

어쨌든 여러 헬멧을 찾아보니 이게 제일 가벼운 축에 속했다. 실제로 받아보니 무게감이 거의 느껴지지 않는 무게였다. 그리고 아시안 핏이라 그런지 머리에 착 감기는 편안함도 있었다. 헬멧 뒤에 클리커로 조절이 가능해서 누구나 편하게 쓸 수 있는 것 같다. 내부 소재는 다 비슷비슷한 것 같아서 꽤나 가성비로 잘 산 것 같다. 벌레 망도 있어서 안심하고 사용이 가능하고 머리망이 탈부착이 가능해 빨래도 쉬울 듯하다. 

단점이라면 턱끈 조절이 좀 불편(?)하게 되어있는데 턱을 받쳐주는 두꺼운 천부분이 가운데로 안 온다. 그래서 혹시 좌우대칭이 중요하신 분들은 이 제품은 잘 모르겠다. 그래도 내 머리 잘 지켜주겠지.

반응형
반응형

전에 쓰던 마우스 tron g10의 휠이 헛돌며 고장났다. 3년정도 썼으니 본전은 뽑은 듯 하다. 아마 접착제가 떨어져나간거같은데 그래서 휠이 휭~하고 돌고 스크롤이 안되서 새로 하나 샀다. 

 

맥스틸 마우스가 크기가 큰 편이라 처음 쓰는 사람들은 불편할 수 있다. 아무래도 평범한 마우스를 쓰던 사람들이라면 로지텍의 102가 더 편할거라고 생각한다. 하지만 이미 이 마우스를 사서 쓰다보니 적응해버려 이 마우스 없이는 못 사는

고장난 김에 분해해서 본 g10

확인해보니 g10의 상위버전 pro가 나와서 몇천원 더 주고 샀는데..

스펙상으로 상당한 차이가 있다. 특히 pro는 mcu를 오버해서 DPI와 FPS를 높였다고 한다.

사실 g10과 큰 차이점은 못 느꼈다. 외관이 좀 더 멋있어보인다는 것? 근데 사용하다보니 휠에 유격이 있다는 것을 알게 되었고 마우스를 약간 격하게 흔들면 소리와 느낌이 와서 살짝 불편함이 생겼다.

그래도 맥스틸 마우스를 좋게 쓰기도 했고 이미 샀으니 계속 쓰겠지만 다음에 사게 되면 다른 마우스를 살 것 같다.

반응형
반응형

 

 

배열은 모두가 아는 배열이다. 배열을 만들어 사용하는 방법은 다양하다.

 

우선 기본적으로 함수안에 자료형을 이용하여 배열을 만들 수 있다.

 

int arr[x] = {0, };

x에는 임의의 수가 적혀있어야 한다. 배열을 생성할 때 변수를 이용해서 배열을 생성할 수 없다. 즉 x는 상수여야한다. 그래서 이러한 배열을 정적할당이라고 한다.

 

내가 원하는 만큼의 배열을 만들고 싶다면 동적할당이라는 방법을 사용해야한다. 처음보는 사람은 아마 어렵게 느껴질텐데 그냥 외우면 편하다.

int *arr = new int [x];

이 x는 변수로 만들어도 동작을 한다. 그래서 동적할당이라고 불린다. 동적할당된 배열을 사용하고 나면 꼭 delete[] arr;로 지워주어야 한다. 사실 안해도 오류는 안나지만 메모리를 잡아먹기 때문에 그렇다. 컴파일러가 친절하지 않으면 개발보드에 좋지 않을 것 같다.

 

또한 vector(벡터) 라이브러리를 사용하여 만들수도 있다. vector container 라고 한다.

#include<vector>

vector<int> str;

로 만들 수 있다. 이 벡터는 나중에 배열을 그때그때 추가할 수 있어 매우 편하다.

ex ) str.push_back('1');

printf("%c", str[i]);

이런식으로 사용할 수 있다. 생성과 사용법은 인터넷에 치면 친절히 나온다.

 

보통 크기가 작은 경우는 미리 만들어서 사용하면 편하고, 크기가 큰 경우는 벡터나 동적할당을 사용하면 편한 경우가 많다. 하지만 정확한 사용법을 외워놓지 않으면 나중에 분명 발목을 잡을 것 같다.

 

2차원 배열은 동적할당을 for문을 사용해야하므로 복잡하다. 2차원 벡터는 그나마 낫다. 제일 쉬운 것은 2차원 배열이다. 그래서 2차원 배열로 풀다가 동적할당을 써야할 것 같다면 2차원 벡터를 사용하는 편이 쉽고 빠르지 않을까 싶다. 왜냐면 벡터의 기능이 더 많기 때문이다.

 

stack(스택)은 목이 긴 그릇을 생각하면 사용법이 편하다.  목이 긴 그릇에 순서대로 넣는다고 생각하면 꺼낼 때에는 넣은 것의 역순으로 꺼내야한다.

스택 넣을 때와 꺼낼 때랍니다.

FILO(first in last out )라고도 한다. 사용법은 vector와 비슷한다.

#include<stack>

stack<int> s;

push로 값을 저장하고 pop으로 값을 빼낸다. 이 또한 vector처럼 여러 기능이 있으니 찾아서 공부하는 것이 좋다. 최근에 보았던 스택문제는 다음과 같다.

 

사용법이 어렵지는 않아서 조금만 연습하면 금방 숙달할 수 잇다.

 

 

반응형

+ Recent posts