본문 바로가기

전체 글

(29)
vector 중복 제거 검색하면 다 나오는 것이지만, 나중에 보기위해 블로그에 끄적끄적 코딩 문제를 풀다가 나온 문제 중 하나가 연속해서 같은 숫자가 나오면 제거하는 문제였다. 예를 들면 { 1, 1, 2, 3, 4, 4, 4, 5 } 로 나오면 답은 { 1, 2, 3, 4, 5 } 가 되는 것이다. 처음에는 vector가 나오면 항상 쓰는 방식인 iterator 로 풀었다. for(it = arr.begin(); it != arr.end()-1;) { if(*it == *(it+1)) { it = arr.erase(it); } else { ++it; } } 답은 다 맞는데, 효율성이 안좋다고 나왔다. 그래서 검색해보았다. 대학때 배운걸 생각해보면 분명 vector에서 중복제거하는 함수가 있었다. 역시나 사람들이 잘 정리한 글..
TCP tunneling 을 빙자한 Raw Socket 회사에서 게이트웨이 어플리케이션을 만들었다. 장치에서 데이터를 가져와 LWM2M으로 서버와 통신하는 그런 어플리케이션이다. 원래는 LTE모듈로 UDP 송신하는 단순한 통신방식이였다. 그런데, 보고서까지 작성한 프로젝트를 가져와서 수정을 해야 한다고 한다. LTE모듈이 아닌 다른 라우터 장치로 서버와 통신을 해야한다고 한다. 근데 그 라우터 장치는 TCP만 지원한다고 한다. 그럼 서버에 어떻게 보내야 할까? UDP 패킷을 만들고, 그 위에 TCP를 씌워야 한다는 팀장님. 장치가 TCP로 보내면 저쪽에서 Proxy server가 UDP 패킷을 server로 전송한다는 것이다. GW - Router - Proxy server - server 이러한 구조가 된다는 것이다. TCP는 어짜피 장치가 만들어주기 때문..
vector 비교할 때 프로그래머스에서 문제를 풀다가 느낀점. vector 나 배열같은 문제에서 2개의 리스트를 주고, 서로 비교하여 한쪽에만 있는 아이템을 리턴하라는 문제가 있었다. 이때, 아이템이 여러개 존재할 수 있다. 처음에는 iterator를 사용하여 for문 돌려서 비교하였다. 중복을 제거하기 위하여 있으면 없앴었다. 근데, 답은 답대로 틀리고, 수행시간도 너무 길었다. O(n2) 정도의 수행시간이 걸렸을것이다. 그래서 힌트를 얻은게 정렬하는 것이였다. vector를 정렬하는 방법은 간단했다. 헤더를 넣고. vector v; sort(v.begin(), v.end()); 이렇게 하면 벡터의 처음과 끝이 정렬되었다. 이렇게 두 벡터를 정렬하고, for문 하나를 돌려서 처음부터 끝까지 1대1로 비교하면 되었다. 안맞는게..
mbed OS 에서 메모리 사용량 체크 mbed_stats.h 과제가 거의 완료되어 여유시간이 남았으니 회사에서 작업했던 내용을 조금씩 정리하고자 한다. 곧있으면 투입된 다른 프로젝트가 시작할터이니 그 전에 조금씩 해놔야지. 지난 과제에서는 Mbed OS 가 들어간 커스텀 보드를 사용했다. 근데 뭐만 넣었다 하면 맨날 리셋이 되더라... 거의 대부분의 원인은 달려있던 통신모듈이 강제로 리셋 때리는 거였다. 다른 Thread에서 Priority를 높게 잡아가면 통신모듈에서 돌아가는 Thread가 잘 안돌아가서 오류 뿜뿜 -> 리셋 아무튼, 처음에는 메모리 문제인가 해서 이것저것 빼고, 코드 전체 크기도 줄이고, Static array 생성한것도 줄여보고 다 했다. 거의 한달동안 이 짓을 해서 코드가 꽤 가볍게 돌아가긴 하더라. 불필요하게 많이 선언된 배열들을 다 줄여..
시리얼 통신 그래도 소프트웨어 개발자라고 회사에 들어가서 일하고 있으니 어디 한번 개발에 관한 일이라도 써보자. 2년이 지났고 한 프로젝트 참여도 하고 있긴 하다만, 아직도 코드를 짜는걸 보면 중구난방으로 짜고 있다. 업무는 대부분 시리얼 통신으로 데이터 주고받기다. 서버에 업로드를 하기 위한 통신 모듈도, 아래에 붙어 있는 장치도 전부 시리얼 통신으로 제어한다. 물론 장비에 Ethernet 포트도 달려있으니 LAN으로 연결한다면야 서버 통신을 TCP로 하기도 한다.만 최근에는 대부분 무선통신모듈을 사용하는터라 어쨌든 시리얼이다. 장치의 커널 UART Driver 가 시리얼 콘솔을 /dev/tty 와 연결하면 C++ 어플리케이션에서 그걸 사용한다. 커널을 만진 경험이 적어서 아직도 잘 알진 못한다. 그저 사용할 뿐...