Project 카테고리가 추가되었습니다.

Project 카테고리는 팀원분들께서 진행하셨었던, 진행 중인 프로젝트에 대한 내용을 자유롭게 작성하실 수 있습니다.

그외, 소개하고 싶은 프로젝트나 평가받고 싶은 프로젝트, 아이디어에 대한 내용을 작성하실 수 있습니다.


Project - TO-DO 카테고리에는 진행할 계획이 있는 프로젝트나, 아이디어를 업로드할 수 있는 공간입니다.

Project - Release 카테고리에는 간단한 프로그램, 미완성 프로젝트, 완성 프로젝트 등 본인이 개발했던 프로그램과 프로젝트를 공유하고 싶을 때 이용하시면 됩니다.


Release 하실 때 오픈소스에 대한 사항은 창작자 본인께서 판단해주시기 바랍니다.


+ 외부와의 공개가 꺼려지실 경우 비공개로 작성해주시면 됩니다.

기존 스마트포인터들은 new[] 형식의 할당된 포인터는 제대로된 처리를 하지않습니다.

(boost 라이브러리나 기타 라이브러리에 이미 보완된 코드가 존재할 것 같은데, 저는 한번도 못봤네요.)


때문에 기존 스마트포인터를 new[] 형태로 사용할 경우엔 일반적으로 vector 컨테이너와 함께 사용합니다.


스마트포인터 소멸자의 처리에서 new[] 형식의 할당된 포인터는 delete[] 를 호출해야 하지만, 기존 스마트포인터는 delete 만 호출할 겁니다.

이런 정상적으로 해제되지 않은 메모리는 _CrtDumpMemoryLeaks() 로 메모리 누수 체크를 하면 정상적으로 탐지하지 못하게 됩니다.


그리하여 vector 까지 써가며 코드를 작성하는게 귀찮았기 때문에 간단하게 만들어본 클래스입니다.


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
namespace am
{
  class noncopyable
  {
  protected:
    noncopyable() {}
    ~noncopyable() {}
 
  private:
    noncopyable(const noncopyable&);
    noncopyable& operator=(const noncopyable&);
 
 
  }; // class noncopyable
 
  template<class R>
  class safe_ptr : private noncopyable
  {
  private:
    R* ptr_;
    size_t cnt_;
 
  public:
    explicit safe_ptr(R* ptr = 0) throw()
    {
      if (ptr)
      {
        ptr_ = ptr;
        cnt_ = _msize(ptr) / sizeof(R);
      }
    }
 
    explicit safe_ptr(void* ptr) throw()
    {
      ptr_ = (R*)ptr;
      cnt_ = 0;
    }
 
    ~safe_ptr()
    {
      if (ptr_ && cnt_)
          cnt_ == 1 ? delete ptr_ : delete[] ptr_;
       
      ptr_ = nullptr;
    }
 
    R& operator*() const throw()
    {
      return *ptr_;
    }
 
    R* operator->() const throw()
    {
      return ptr_;
    }
 
    R& operator[](size_t n) const throw()
    {
      return ptr_[n];
    }
 
    R* get() const throw()
    {
      return ptr_;
    }
 
    size_t get_size() const throw()
    {
      return cnt_;
    }
 
    bool empty() const throw()
    {
      return nullptr == ptr_;
    }
 
 
  }; // template<class R> class safe_ptr
} // namespace am


가끔 가다보면 실제 아두이노에서 hex 파일을 추출해야 하는 경우가 있어요!

그렇다면, avrdude 를 사용해봐요

우선 "아두이노 IDE 설치경로\hardware\tools\avr\bin\" 에보면 avrdude.exe  가 있어요. 해당 폴더에서 명령프롬프트를 열어요.

(Tip : Shift+우클릭 해서 명령창 관련 메뉴를 선택하면 해당폴더에서 명령창이 열려요.)

avrdude.exe -p m328p  -c arduino -C "..\etc\avrdude.conf" -P com6 -U flash:r:"C:\flash.hex":i

이렇게 입력하면 아두이노에서 hex 파일이 추출가능해요.

(-P 다음에 오는건 COM 포트 번호에요. 각자에 맞는 COM 포트 번호로 바꾸세요.)

(단, uno 기준이에요. 메가2560 사용자분들은 -p 다음껄 atmega2560 으로 바꾸고 해보세요!)

p.s 윈도우 환경에서는 아무도 설명안해주길래 적어봄.


#오이콩


+ Recent posts